こんにちは、問題があります。原因はわかっていると思いますが、解決方法がわかりません。私は誰でもこの問題を解決するのを手伝うことができます。それは素晴らしいことです...エラーは
TypeError: エラー #1009: null オブジェクト参照のプロパティまたはメソッドにアクセスできません。Bullet/removeSelf()[C:\Users\Alan\Desktop\game copy\Bullet.as:56] で Bullet/loop()[C:\Users\Alan\Desktop\game copy\Bullet.as:44]
HERE は、BULLET ps を削除する 1 つの主なアクションのコードです。キャップでごめんなさい。
stage.addEventListener(Event.ENTER_FRAME, testCollisions);
//Check for collisions between an enemies array and a Lasers array
function testCollisions(e:Event):void
{
var tempEnemy:MovieClip;
var tempLaser:MovieClip;
for (var i:int=enemies.length-1; i >= 0; i--)
{
tempEnemy = enemies[i];
for (var j:int=bullets.length-1; j>=0; j--)
{
tempLaser = bullets[j];
if (tempLaser.hitTestObject(tempEnemy))
{
removeChild(tempEnemy);
removeLaser(j);
}
}
}
}
function removeLaser(idx:int)
{
parent.removeChild(bullets[idx]);
bullets.splice(idx,1);
}
これは、それを削除する弾丸クラスのコードです
public class Bullet extends MovieClip {
private var speed:int = 30;
private var initialX:int;
public var eligableForRemove:Boolean = false;
public function Bullet(playerX:int, playerY:int, playerDirection:String) {
// constructor code
if(playerDirection == "left") {
speed = -30; //speed is faster if player is running
x = playerX - 25;
} else if(playerDirection == "right") {
speed = 30;
x = playerX + 25
}
y = playerY - 75;
initialX = x; //use this to remember the initial spawn point
addEventListener(Event.ENTER_FRAME, loop);
}
public function loop(e:Event):void
{
//looping code goes here
x += speed;
if(speed > 0) { //if player is facing right
if(x > initialX + 640) { //and the bullet is more than 640px to the right of where it was spawned
removeSelf(); //remove it
eligableForRemove = true;
}
} else if (speed < 0) { //else if player is facing left
if(x < initialX - 640) { //and bullet is more than 640px to the left of where it was spawned
removeSelf(); //remove it
eligableForRemove = true;
} else {
eligableForRemove = false;
}
}
}
public function removeSelf():void
{
if(eligableForRemove == true){trace("remove self");
removeEventListener(Event.ENTER_FRAME, loop); //stop the loop
this.parent.removeChild(this); //tell this object's "parent object" to remove this object
//in our case, the parent is the background because in the main code we said:
//back.addChild(bullet);
}
}
}
}
削除するものが何もないときに空の関数 removeSelf を呼び出していることが原因だと思います。eligableForRemove変数を追加しましたが、正しく配置していない可能性がありますので、誰かがこの問題を解決するのを手伝ってくれれば幸いです...また、メインのアクションから箇条書きを削除しようとすると、呼び出し元エラーの子。助けてください。