Проблема с ошибкой типа 1009 Ссылка на нулевой объект gameLoop () - PullRequest
0 голосов
/ 17 февраля 2012

У меня проблема с флэш-кодом. Я делаю простую игру с выпадением мяча и получаю эту ошибку

TypeError: Ошибка # 1009: Невозможно получить доступ к свойству или методу пустой ссылки на объект. at balldrop_fla :: MainTimeline / gameLoop () [balldrop_fla.MainTimeline :: frame1: 46]

Кажется, речь идет о строке 46, которая называется "ball.y + = 5;"

Вот мой код:

 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();

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

Ну, первое, что я вижу, это то, что слушатель ENTER_FRAME, вероятно, вызывается до того, как вы запустите мяч с помощью makeBall (). Я бы добавил слушатель для ENTER_FRAME после makeBall.

0 голосов
/ 17 февраля 2012

Вы должны попытаться добавить

stop();

в конце скрипта. Затем временная шкала заканчивается и начинает играть с начала, вспышка воссоздает все объекты на сцене, и ваш мяч становится нулевым.

А ты уверен, что после

randBall = Math.floor (Math.random () * 5); * +1008 *

randBall будет, например, 0 вместо 0,000000001? Лучший способ - сделать тип randBall int вместо Number.

...