0

昨日夜遅くから上記のエラーを修正しようとしています。今日、私は何時間も再試行しました。私は多くのことを学び、より多くのことを理解しました。途中でいくつかのことを見つけて修正しましたが、残念ながらエラーは解決しませんでした。

たとえば、上記のエラーは、コードの対象となっているオブジェクトの 1 つが範囲外であることを示していることがわかりました。 考えられる原因:

  1. 宣言されているがインスタンス化されていない

  2. インスタンス名がありません (またはインスタンス名のスペルが間違っています)。

  3. そのコードが通信しようとしているフレームには存在しません

  4. 所定の位置にアニメートされますが、すべてのキーフレームでインスタンス名が割り当てられません

  5. これは、前のフレームで名前が割り当てられていない (または別の名前の) 同じオブジェクトの 2 つ以上の連続したキーフレームの 1 つです。

これは、うまくいかないエラー行です。

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

だから、それは背中や衝突のあるものでなければなりません...

  1. 確認したところ、スペルミスのインスタンスではありません。ところで、back は Back インスタンスを含む背景ムービークリップであり、インスタンス Collisions を含む衝突画像が含まれています。

  2. 宣言されています(ただし、正しくない可能性があります)

  3. 原因かもしれません。フレーム 1 はプリローダーです。フレーム 2 は、コード cat.as を開始するためのボタンを含むメニューです。フレーム 3 にはゲームが含まれます

  4. 1 つのキーフレームにしか存在しないため、間違い番号 4 ではありません

  5. 1 つのキーフレームにしか存在しないため、間違い番号 5 ではありません

というわけで、3番の可能性が高いです。

ボタンをクリックすると、フレーム 3 に進む前に cat.as をすぐに実行したいと思います。これをどのように解決すればよいでしょうか。ゲームをフレーム 2 のオフスクリーンに配置することを考えています。これについてフィードバックをいただければ幸いです。ありがとう

私のコード:編集:変数を公開しました

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

あなたの声明によると

back は Back インスタンスを持つ背景ムービークリップです

movieClip「back」のインスタンス名として「Back」を設定すると仮定できます

「戻る」を「戻る」に変更する必要があります

于 2013-01-15T16:53:34.210 に答える
0

バックとコリジョンを別々に宣言しますが、バックのプロパティであるコリジョンを使用してそれらにアクセスしています。バックには衝突プロパティがありますか? もしそうなら、それはどのように初期化されますか?

于 2013-01-15T16:13:25.593 に答える