Flash Game Actionscript-3输出错误#1009

时间:2016-07-23 17:24:06

标签: actionscript-3 flash actionscript actionscript-2

我正在使用Actionscript 3在Flash中编写自己的游戏。游戏是关于跑步者角色,就像超级马里奥和Stickyman,他们只是跑,跳,死......等等。 通过在不同的场景中划分游戏的每个窗口非常有条理,我仍然遇到执行代码片段的问题" gotoAndStop()" ...这就是为什么我决定通过仅使用一个场景,使游戏的每个风在主时间轴中的不同帧中变得非常简单。所以我在root上工作,但仍然遇到了陷入白屏的问题!

无论如何,我在这里遇到的主要问题之一是错误#1009。即使我试图用同样的问题阅读其他主题,但我找不到适合我案例的答案。

这是错误:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at HR4_fla::MainTimeline/movePlayer()
TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at Apple/update()

以下是代码:

import flash.events.KeyboardEvent;
import flash.events.Event;
import flash.display.MovieClip;

import flash.geom.Rectangle;
stop();

var KeyThatIsPressed:uint;
var rightKeyIsDown:Boolean = false;
var leftKeyIsDown:Boolean = false;
var upKeyIsDown:Boolean = false;
var downKeyIsDown:Boolean = false;

var score:int = 0;
var lives:int = 3;
player_mc.health = 100;
player_mc.dead = false;
//var TouchRestartBox:Boolean = false;

var playerSpeed:Number = 8;
var gravity:Number = 2;
var yVelocity:Number = 0;
var canJump:Boolean = false;
var canDoubleJump: Boolean = false;

//var appleCount:int;

stage.addEventListener(KeyboardEvent.KEY_DOWN, PressAKey);
stage.addEventListener(KeyboardEvent.KEY_UP, ReleaseAKey);

stage.addEventListener(Event.ENTER_FRAME, cameraFollowCharacter);

function cameraFollowCharacter(event:Event):void
{
 scrollRect = new Rectangle(player_mc.x - stage.stageWidth/2, player_mc.y - stage.stageHeight/2, stage.stageWidth, stage.stageHeight);
}

//PressKey function here
function PressAKey(event:KeyboardEvent):void
{
    if(event.keyCode == Keyboard.RIGHT)
    {
    rightKeyIsDown = true;
    }
    if(event.keyCode == Keyboard.LEFT)
    {
    leftKeyIsDown = true;
    }
    if(event.keyCode == Keyboard.UP)
    {
    upKeyIsDown = true;
    }
    if(event.keyCode == Keyboard.DOWN)
    {
    downKeyIsDown = true;
    }
}

//ReleaseKey function here
function ReleaseAKey(event:KeyboardEvent):void
{
    if(event.keyCode == Keyboard.RIGHT)
    {
    rightKeyIsDown = false;
    }
    if(event.keyCode == Keyboard.LEFT)
    {
    leftKeyIsDown = false;
    }
    if(event.keyCode == Keyboard.UP)
    {
    upKeyIsDown = false;
    }
    if(event.keyCode == Keyboard.DOWN)
    {
    downKeyIsDown = false;
    }
}

//stage.addEventListener(Event.ENTER_FRAME, GameOver);

stage.addEventListener(Event.ENTER_FRAME, movePlayer);

function movePlayer(event:Event):void
{


if(!rightKeyIsDown && !leftKeyIsDown && !upKeyIsDown)
{
    player_mc.gotoAndStop(1);
}       

if(rightKeyIsDown)
{
player_mc.gotoAndStop(2);
player_mc.x+= playerSpeed;
player_mc.scaleX = 0.59;
}

if(leftKeyIsDown)
{
player_mc.gotoAndStop(2);       
player_mc.x-= playerSpeed;
player_mc.scaleX = -0.59;
}

if(upKeyIsDown && canJump)
{
player_mc.gotoAndStop(3);
yVelocity = -15;
canJump = false;
canDoubleJump = true;
}

if(upKeyIsDown && canDoubleJump && yVelocity > -2)
{
    yVelocity = -13;
    canDoubleJump = false;
}

yVelocity +=gravity;

if(!floor_mc.hitTestPoint(player_mc.x,player_mc.y, true))
{
player_mc.y+=yVelocity;
}

if(yVelocity > 20)
{
yVelocity =20;
}

for(var i:int=0; i<10; i++)
{
    if(floor_mc.hitTestPoint(player_mc.x, player_mc.y, true))
    {
    player_mc.y--;
    yVelocity = 0;
    canJump = true;
    }
}

for(var j:int=0; j<=2; j++)
{
    if(rb.hitTestPoint(player_mc.x, player_mc.y, true))
    {
        player_mc.x = -1703.35;
        player_mc.y = 322.1;
        player_mc.scaleX = 0.59;
        lives = lives - 1;
    }

    if(lives == 0)
    {
//          GameOver();
    // remove all the event listeners
//  stage.removeEventListener(Event.ENTER_FRAME, GameOver);
    stage.removeEventListener(Event.ENTER_FRAME, movePlayer);
    stage.removeEventListener(KeyboardEvent.KEY_DOWN, PressAKey);
    stage.removeEventListener(KeyboardEvent.KEY_UP, ReleaseAKey);
    stage.removeEventListener(Event.ENTER_FRAME, cameraFollowCharacter);
gotoAndStop(124);
//(root as MovieClip).gotoAndStop(124);
        }
    }


//  appleCount_txt.text = "Apples:" + appleCount;
}


/*function GameOver()
{
//  lives = 3;


// remove all the event listeners
stage.removeEventListener(Event.ENTER_FRAME, GameOver);
stage.removeEventListener(Event.ENTER_FRAME, movePlayer);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, PressAKey);
stage.removeEventListener(KeyboardEvent.KEY_UP, ReleaseAKey);
stage.removeEventListener(Event.ENTER_FRAME, cameraFollowCharacter);

//  player_mc.stop();
gotoAndStop(1); // this has your "dead" screen on it.
}*/

有人可以帮我解决这个问题吗? 感谢

1 个答案:

答案 0 :(得分:1)

在帧更改后仍然有一个监听器被执行。在该处理程序中,引用了一个在该帧上不存在的对象,因此null。 改变帧只能提供视觉上的变化,而不一定是完全改变状态。