昨日夜遅くから上記のエラーを修正しようとしています。今日、私は何時間も再試行しました。私は多くのことを学び、より多くのことを理解しました。途中でいくつかのことを見つけて修正しましたが、残念ながらエラーは解決しませんでした。
たとえば、上記のエラーは、コードの対象となっているオブジェクトの 1 つが範囲外であることを示していることがわかりました。 考えられる原因:
宣言されているがインスタンス化されていない
インスタンス名がありません (またはインスタンス名のスペルが間違っています)。
そのコードが通信しようとしているフレームには存在しません
所定の位置にアニメートされますが、すべてのキーフレームでインスタンス名が割り当てられません
これは、前のフレームで名前が割り当てられていない (または別の名前の) 同じオブジェクトの 2 つ以上の連続したキーフレームの 1 つです。
これは、うまくいかないエラー行です。
if (back.collisions.hitTestPoint(player.x + leftBumpPoint.x,player.y + leftBumpPoint.y,true))
だから、それは背中や衝突のあるものでなければなりません...
確認したところ、スペルミスのインスタンスではありません。ところで、back は Back インスタンスを含む背景ムービークリップであり、インスタンス Collisions を含む衝突画像が含まれています。
宣言されています(ただし、正しくない可能性があります)
原因かもしれません。フレーム 1 はプリローダーです。フレーム 2 は、コード cat.as を開始するためのボタンを含むメニューです。フレーム 3 にはゲームが含まれます
1 つのキーフレームにしか存在しないため、間違い番号 4 ではありません
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;
}