我一直試圖解決上述錯誤,因爲昨天晚上到深夜。 今天我又試了好幾個小時。我學到了很多,並瞭解更多。我發現了一些事情並修復了它們,不幸的是錯誤依然存在。TypeError:錯誤#1009:無法訪問空對象引用的屬性或方法
我現在知道例如 上述錯誤表明我的代碼所針對的一個對象超出了範圍。 通過可能引發的:
它正在宣告但尚未實例化
它不會有一個實例名稱(或實例名稱拼寫錯誤)
它不會在存在該代碼試圖與之通話的幀
它被動畫到位,但未在每個關鍵幀中爲其分配實例名稱
它是相同對象的兩個或多個連續關鍵幀之一,在前面的幀中沒有指定名稱(或不同的名稱)。
這是錯誤線通向哪裏錯了:
if (back.collisions.hitTestPoint(player.x + leftBumpPoint.x,player.y + leftBumpPoint.y,true))
所以它必須是一些與背部或collosions ...
我檢查過,它不是拼寫錯誤的實例 BTW返回與返回實例的背景動畫片段,它包含例如碰撞
它被宣佈(但可能不是右)
碰撞圖像可能是原因。第1幀是預加載器。第2幀是帶有按鈕的菜單,以啓動代碼cat.as.第3幀包含遊戲
只在一個關鍵幀存在,故不誤數4
它只存在於一個關鍵幀,所以它不是錯號5
所以它很可能是數字3.
我認爲會發生的事情是,我點擊按鈕,它立即想運行cat.as之前去幀3.我應該如何解決這個問題。我正在考慮將遊戲置於第2幀但離屏。 我非常希望得到這方面的反饋。由於
我的代碼:編輯:我給了var公共
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;
}
我修改了我的答案。您必須先將玩家添加到舞臺,然後才能獲得x val。 –