0

从昨天深夜开始,我一直在尝试修复上述错误。今天我又试了好几个小时。我学到了很多,也明白了很多。我一路上发现了一些东西并修复了它们,不幸的是错误仍然存​​在。

例如,我现在知道上述错误表明我的代码所针对的对象之一超出了范围。 可能由以下原因引起:

  1. 它被声明但未实例化

  2. 它没有实例名称(或实例名称拼写错误)

  3. 它不存在于该代码试图与之对话的框架中

  4. 它已动画到位,但未在每个关键帧中为其分配实例名称

  5. 它是相同对象的两个或多个连续关键帧之一,在前一帧中未指定名称(或不同名称)。

这是出错的错误行:

if (back.collisions.hitTestPoint(player.x + leftBumpPoint.x,player.y + leftBumpPoint.y,true))

所以它必须是有背部或碰撞的东西......

  1. 我检查了一下,它不是拼写错误的实例 BTW back 是带有 Back 实例的背景影片剪辑,它包含带有实例 Collisions 的碰撞图像

  2. 它正在被宣布(但可能不正确)

  3. 可能是原因。第 1 帧是预加载器。第 2 帧是带有启动代码 cat.as 的按钮的菜单。第 3 帧包含游戏

  4. 它只存在于一个关键帧上,所以它不是错误号 4

  5. 它只存在于一个关键帧上,所以它不是错误号 5

所以很可能是3号。

我认为发生的事情是我单击按钮,它立即想要运行 cat.as 在进入第 3 帧之前。我应该如何解决这个问题。我正在考虑将游戏放在第 2 帧但不在屏幕上。我非常希望对此提供反馈,请。谢谢

我的代码:编辑:我给了 var public

package 
{
import flash.display.MovieClip;
import flash.events.*;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.geom.Point;

public class Cat extends MovieClip
{

    public var leftPressedfBoolean = false;
    public var rightPressed:Boolean = false;
    public var upPressed:Boolean = false;
    public var downPressed:Boolean = false;

    public var leftBumping:Boolean = false;
    public var rightBumping:Boolean = false;
    public var upBumping:Boolean = false;
    public var downBumping:Boolean = false;

    public var leftBumpPoint:Point = new Point(-30,-55);
    public var rightBumpPoint:Point = new Point(30,-55);
    public var upBumpPoint:Point = new Point(0,-120);
    public var downBumpPoint:Point = new Point(0,0);

    public var scrollX:Number = 0;
    public var scrollY:Number = 500;

    public var xSpeed:Number = 0;
    public var ySpeed:Number = 0;

    public var speedConstant:Number = 4;
    public var frictionConstant:Number = 0.9;
    public var gravityConstant:Number = 1.8;
    public var jumpConstant:Number = -35;
    public var maxSpeedConstant:Number = 18;

    public var doubleJumpReady:Boolean = false;
    public var upReleasedInAir:Boolean = false;

    public var keyCollected:Boolean = false;
    public var doorOpen:Boolean = false;

    public var currentLevel:int = 1;

    public var animationState:String = "idle";

    public var bulletList:Array = new Array();
    public var enemyList:Array = new Array();
    public var bumperList:Array = new Array();

    public var player:Player;
    public var back:Back;
    public var sky:Sky;
    public var collisions:Collisions;
    public var visuals:Visuals;
    public var other:Other;
    public var doorKey:DoorKey;

    public function Cat()
    {
        addEventListener(Event.ADDED_TO_STAGE, init);
    }

    public function init(e:Event):void

{
        player = new Player();
        back = new Back();
        sky = new Sky();
        visuals = new Visuals();
        other = new Other();            
        collisions = new Collisions();
        doorKey = new DoorKey();

        stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
        stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
        stage.addEventListener(Event.ENTER_FRAME, loop);
        addEnemiesToLevel1();
        addBumpersToLevel1();
    }

    public function addEnemiesToLevel1():void
    {
        addEnemy(620, -115);
        addEnemy(900, -490);
        addEnemy(2005, -115);
        addEnemy(1225, -875);
    }

    public function addBumpersToLevel1():void
    {
        addBumper(500, -115);
        addBumper(740, -115);
    }


    public function loop(e:Event):void
    {
        if (back.collisions.hitTestPoint(player.x + leftBumpPoint.x,player.y + leftBumpPoint.y,true))
        {
            //trace("leftBumping");
            leftBumping = true;
        }
        else
        {
            leftBumping = false;
        }
4

4 回答 4

1

在 if 语句之前添加它以查看缺少哪个项目:

trace("back "+back);
trace("back.collisions "+back.collisions);
trace("player.x "+player.x);
trace("leftBumpPoint.x "+leftBumpPoint.x);
trace("player.y "+player.y);
trace("leftBumpPoint.y "+leftBumpPoint.y);
于 2013-01-15T15:39:06.207 回答
0

问题是在检查它的 x 值是什么之前,您永远不会将玩家添加到舞台上。

于 2013-01-15T15:19:10.840 回答
0

您分别声明返回和碰撞,但您访问它们时碰撞是返回的属性。背部有碰撞属性吗?如果是这样,它是如何初始化的?

于 2013-01-15T16:13:25.593 回答
0

根据你的说法

back 是带有 Back 实例的背景影片剪辑

我可以假设您将“Back”设置为movieClip“back”的实例名称

将“返回”更改为“返回”应该这样做

于 2013-01-15T16:53:34.210 回答