2013-10-24 2 views
0

나는 나의 플래시 응용 프로그램에서 타이머를 사용하고, 나는 다음이 특정 오류가 있습니다 : 다음은이 특정 플래시 게임 응용 프로그램에 대한 내 코드입니다타이머 관련 오류, 형식 오류 번호 1009

TypeError: Error #1009: Cannot access a property or method of a null object reference. 
     at FlashGame_fla::MainTimeline/toTimeCode() 
     at FlashGame_fla::MainTimeline/timerTickHandler() 
     at flash.utils::Timer/_timerDispatch() 
     at flash.utils::Timer/tick() 

합니다. 플레이어가 특정 시간 내에 가능한 한 많은 항목을 수집하는 게임입니다.

import flash.display.MovieClip; 
import flash.events.MouseEvent; 
import flash.events.TimerEvent; 
import flash.utils.Timer; 
import flash.geom.Rectangle; 

menuButton.addEventListener(MouseEvent.CLICK, evilToMenu); 
rulesButton.addEventListener(MouseEvent.CLICK, toggleRule); 
gameRules.addEventListener(MouseEvent.CLICK, toggleRule); 
gameRules.visible = false; 
gameRules.buttonMode = true; 

evilGameOverMC.visible = false; 
evilWinLose.visible = false; 
playAgainBtn.visible = false; 
toMenuBtn.visible = false; 

var pLives:int = 3; 
var pEvilScore:int = 0; 
var pItems:int = 10; 
var daveMC:MovieClip; 
var cGameObjs:Array = new Array(); 
var timer:Timer = new Timer(100, 300); 
timer.start(); 
timer.addEventListener(TimerEvent.TIMER, timerTickHandler); 
var timerCount:int = 15000; 
//var cPlayerData:Object; 
//var cSavedGameData:SharedObject; 

addCharacter(); 
addBots(); 
addItems(); 

scoreDisplay.text = "" + pEvilScore; 
livesDisplay.text = pLives + " lives"; 

function evilToMenu(Event:MouseEvent):void 
{ 
    removeLeftovers(); 
    removeChild(daveMC); 
    timer.stop(); 
    gotoAndStop("menu"); 
} 

function timerTickHandler(Event:TimerEvent):void 
{ 
    timerCount -= 100; 
    toTimeCode(timerCount); 
    if (timerCount <= 0) 
    { 
     gameOver(false); 
    } 
} 

function toTimeCode(milliseconds:int): void 
{ 
    //creating a date object using the elapsed milliseconds 
    var time:Date = new Date(milliseconds); 

    //define minutes/seconds/mseconds 
    var minutes:String = String(time.minutes); 
    var seconds:String = String(time.seconds); 
    var miliseconds:String = String(Math.round(time.milliseconds)/100); 

    //add zero if neccecary, for example: 2:3.5 becomes 02:03.5 
    minutes = (minutes.length != 2) ? '0'+minutes : minutes; 
    seconds = (seconds.length != 2) ? '0'+seconds : seconds; 

    //display elapsed time on in a textfield on stage 
    timerDisplay.text = minutes + ":" + seconds; 

} 

function addCharacter():void 
{ 
    trace("Adding the character, Dave") 
    //set the initial values 
    var myBorder:Rectangle = new Rectangle(355,145,395,285); 
    var myXY:Array = [355,430]; 
    var myChar:int = Math.ceil(Math.random() * 3); 
    var myKeys:Array = [37,39,38,40]; 
    var myDistance:int = 7; 
    // create and add a new player object to the stage 
    daveMC = new Character(myBorder,myXY,myKeys,myChar,myDistance); 
    addChild(daveMC); 
} 

function addBots():void 
{ 
    trace("Adding the bots.."); 
    // set the initial values (adapt to suit your game) 
    var myBorder:Rectangle = new Rectangle(355,145,395,285); 
    var myMaxBots:int = 5;// simulation 
    // add bots one at a time via a loop 
    for (var i:int = 0; i < myMaxBots; i++) 
    { 
     // create a new bot object and name it 
     var thisBot:Bot = new Bot(myBorder, daveMC); 
     thisBot.name = "bot" + i; 
     cGameObjs.push(thisBot); 
     // add it to the stage 
     addChild(thisBot); 
    } 
} 

function addItems():void 
{ 
    trace("Adding the items.."); 
    //set the initial values 
    for (var i:int = 0; i < 10; i++) 
    { 
     // create a new bot object and name it 
     var thisItem:Item = new Item(daveMC); 
     thisItem.name = "item" + i; 
     cGameObjs.push(thisItem); 
     // add it to the stage 
     addChild(thisItem); 
    } 
} 

function updateLives(myBot:MovieClip):void 
{ 
    // update the player's LIVES and score 
    pLives--; 
    pEvilScore -= 30; 
    var myIndex:int = cGameObjs.indexOf(myBot); 
    cGameObjs.splice(myIndex,1); 
    // check for a LOST GAME 
    if (pLives > 0) 
    { 
     updateScores(); 
    } 
    else 
    { 
     gameOver(false); 
    } 
} 

function updateItems(myItem:MovieClip):void 
{ 
    // update the player's LIVES and score 
    pItems--; 
    pEvilScore += 20; 
    var myIndex:int = cGameObjs.indexOf(myItem); 
    cGameObjs.splice(myIndex,1); 
    // check for a LOST GAME 
    if (pItems > 0) 
    { 
     updateScores(); 
    } 
    else 
    { 
     gameOver(true); 
    } 
} 

function gameOver(myFlag:Boolean):void 
{ 
    updateScores(); 
    if (myFlag) 
    { 
     // player wins 
     msgDisplay.text = "YAY! PAPPLE FOR \nEVERYBODY!"; 
     removeLeftovers(); 
     evilWinLose.text = "Weee!! We've got papples for Gru! \nYour Score: " + pEvilScore; 
    } 
    else 
    { 
     // player loses 
     msgDisplay.text = "OH NO! NOT \nENOUGH PAPPLES"; 
     removeLeftovers(); 
     evilWinLose.text = "Boo!! Not enough papples for Gru! \nYour Score: " + pEvilScore; 
    } 
    timerDisplay.text = ""; 
    removeChild(daveMC); 
    evilGameOverMC.visible = true; 
    evilWinLose.visible = true; 
    toMenuBtn.visible = true; 
    playAgainBtn.visible = true; 
    toMenuBtn.addEventListener(MouseEvent.CLICK, Click_backtoMain); 
    playAgainBtn.addEventListener(MouseEvent.CLICK, backToEvil); 
} 

function updateScores():void 
{ 
    scoreDisplay.text = "" + pEvilScore; 
    livesDisplay.text = pLives + " lives"; 
    msgDisplay.text = pItems + " papples more to \ncollect.."; 
} 

function removeLeftovers():void 
{ 
    // check each BOT/ITEM in array 
    for each (var myObj in cGameObjs) 
    { 
     myObj.hasHitMe(); 
     myObj = null; 
    } 
} 

function backToEvil(event:MouseEvent):void 
{ 
    pEvilScore = 0; 
    pLives = 3; 
    pItems = 3; 
    gotoAndStop("menu"); 
    gotoAndStop("evil"); 
} 

누구나 나를 도와 줄 수 있습니까? 정말 고마워! :)

+0

정확히 무엇이 오류입니까? TypeError? 어느 선 이요? – JoDev

+0

Uhm,이 오류는 컴파일러 오류에 나타나지 않으므로 오류가있는 줄을 표시하지 않았습니다. 출력 영역에 나타납니다. 내가 게임을 실행할 때 나타납니다. 게임을 실행하면 타이머가 잘 작동하며 모든 것이 완벽합니다. 메인 메뉴로 돌아가서 같은 게임으로 돌아 가면 타이머가 작동합니다. 그냥, 왜 그런지 모르겠다.이 특별한 오류가 나타난다. –

+0

다음 오류입니다. TypeError : 오류 # 1009 : null 개체 참조의 속성이나 메서드에 액세스 할 수 없습니다. FlashGame_fla :: MainTimeline/toTimeCode() flash.utils의에서 FlashGame_fla :: MainTimeline/timerTickHandler() 에서 에서 : 타이머/_timerDispatch() flash.utils의에서 : 타이머/틱() –

답변

0

이하여 toTimeCode 기능 코드를 바꿉니다 :

function toTimeCode(milliseconds:int): void 
{ 
    trace(1); 

    //creating a date object using the elapsed milliseconds 
    var time:Date = new Date(milliseconds); 

    trace(2); 

    //define minutes/seconds/mseconds 
    var minutes:String = String(time.minutes); 

    trace(3); 

    var seconds:String = String(time.seconds); 

    trace(4); 

    var miliseconds:String = String(Math.round(time.milliseconds)/100); 

    trace(5); 

    //add zero if neccecary, for example: 2:3.5 becomes 02:03.5 
    minutes = (minutes.length != 2) ? '0'+minutes : minutes; 

    trace(6); 

    seconds = (seconds.length != 2) ? '0'+seconds : seconds; 

    trace(7); 

    //display elapsed time on in a textfield on stage 
    timerDisplay.text = minutes + ":" + seconds; 

    trace(8); 
} 
+0

흠, 나는 'didn를 get timerDisplay : null. 대신 출력 디스플레이에서 이것을 얻었습니다. -> timerDisplay : [object TextField] –

+0

답변이 업데이트 되었습니까? –

+0

출력은 1, 2, 3, 4, 5, 6, 7입니다. 모든 것이 정상이지만, 게임을 나가면 메인 메뉴로 돌아가서 위의 TypeError가 나옵니다. –

0

가이 일에 timerDisplay 라인을 변경해주십시오 ... 문제는 toTimeCode 방법에있을 것입니다. 오류 당신이 VAR 느릅 나무에서 메서드를 호출하지 않습니다하려고하는 말 (아직) 객체 ...

if(null != timerDisplay) 
    timerDisplay.text = minutes + ":" + seconds; 

당신은 객체 느릅 나무가 null 찾을 수있다! 추가 :

function toTimeCode(milliseconds:int): void 
{ 
    //creating a date object using the elapsed milliseconds 
    var time:Date = new Date(milliseconds); 
    trace("Time: " + time);