2012-02-16 2 views
-1

내 플래시 코드에 문제가 있습니다. 간단한 공 드롭 게임을 만들고 있는데이 오류가 계속 발생합니다.유형 오류 1009의 문제 Null 객체 참조 gameLoop()

TypeError : 오류 # 1009 : null 개체 참조의 속성이나 메서드에 액세스 할 수 없습니다. at balldrop_fla :: MainTimeline/gameLoop() [balldrop_fla.MainTimeline :: frame1 : 46]

"ball.y + = 5;"행 46에 대해 이야기하는 것 같습니다.

여기 내 코드입니다 :

import flash.display.DisplayObject; 
import flash.geom.Rectangle; 
import flash.events.Event; 
import flash.display.MovieClip; 


var points:Array = new Array(10,20,30,40,-50) 
var ball:DisplayObject; 
var randBall:Number; 
var score:Number=0; 
var rect:Rectangle=new Rectangle(0+(basket_mc.width/2), basket_mc.y,stage.stageWidth- basket_mc.width, 0); 
basket_mc.startDrag(true, rect); 

basket_mc.addEventListener(Event.ENTER_FRAME, gameLoop); 

function makeBall():void 
{ 
randBall=Math.floor(Math.random()*5); 

switch(randBall) 
{ 
    case 0: 
     ball=addChild(new ball0_mc()); 
    break; 
    case 1: 
     ball=addChild(new ball1_mc()); 
    break; 
    case 2: 
     ball=addChild(new ball2_mc()); 
    break; 
    case 3: 
     ball=addChild(new ball3_mc()); 
    break; 
    case 4: 
     ball=addChild(new ball4_mc()); 
    break; 
} 
ball.x=Math.floor(Math.random()*stage.stageWidth-ball.width); 
ball.y=-60; 
} 

function gameLoop(evt:Event):void 
{ 
score_txt.text=score.toString(); 
ball.y += 5; 

if(ball.y>stage.stageHeight + ball.height) 
{ 
    removeChild(ball); 
    makeBall(); 
} 
if(ball.hitTestObject(basket_mc)) 
{ 
    score += points[randBall]; 
    removeChild(ball); 
    makeBall(); 
} 
} 

makeBall(); 

답변

1

글쎄, 난 처음 보는 일이 ENTER_FRAME의 리스너가 아마 당신이 makeBall에 공을 인스턴스화 할 전에 호출된다는 점이다(). makeBall 후에 ENTER_FRAME에 대한 리스너를 추가합니다.

0

당신은 스크립트의 끝에서

stop(); 

을 추가하려고해야합니다. 그런 다음 타임 라인이 끝나고 처음부터 재생을 시작하면 플래시가 장면의 모든 객체를 다시 만들고 공이 null이됩니다.

그리고 당신이 있는지 수행 한 후

randBall = Math.floor (인 Math.random() * 5);

randBall은 예를 들어 0 대신 0.000000001입니까? 더 나은 방법은 Number 대신에 randBall의 int 형을 만드는 것입니다.

관련 문제