こんにちは 単純なフラッシュゲームで困っています。これまでのところ、オブジェクトに命中した発射体を取り除くのは困難です。
サイトを通過した後、.parent.removeChild(wtv); を追加することがわかりました。オブジェクトを削除します。プレイヤーによって発射されたオブジェクトを使用すると、両方が削除されますが、同じ位置で別のオブジェクトが発射されると、発射されたオブジェクトは、削除されたばかりの目に見えないオブジェクトにヒットし、その位置で削除されます。ステージの端または別のオブジェクトがヒットします。これは、発射されたオブジェクトが削除されたときにのみ発生するようです。
これはコードです。問題は moveLaser 関数にあると考えられます。これ以上情報が必要な場合はお知らせください。どのような推奨事項も素晴らしいと思います。ありがとうございます。
package{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.display3D.IndexBuffer3D;
public class Level_1 extends MovieClip{
private var player:SpaceShip;
private var objects:Array;
private var probMoveObj:int;
private var bgStars:Level1_stars;
public function Level_1(){
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
public function onAddedToStage(event:Event):void{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
probMoveObj = 1;
bgStars = new Level1_stars();
player = new SpaceShip();
objects = new Array(50);
bgStars.vx = 50;
addChild(bgStars);
for(var i:int = 0; i < objects.length; i++){
objects[i] = new GameObject();
addGameObjects(objects[i]);
}
player.x = 100;
player.y = stage.stageHeight - 250;
addChild(player);
bgStars.addEventListener(Event.ENTER_FRAME, moveBackground);
player.addEventListener(Event.ENTER_FRAME, movePlayer);
stage.addEventListener(KeyboardEvent.KEY_DOWN, checkKey);
stage.addEventListener(KeyboardEvent.KEY_DOWN, checkFire);
}
public function movePlayer(event:Event):void{
/*for(var i:int = 0; i < objects.length; i++){
if(objects[i].hitTestObject(player.hit)){
objects[i].removeEventListener(Event.ENTER_FRAME, moveObject);
trace("HIT");
}
}*/
}
public function checkFire(event:KeyboardEvent):void{
if(event.keyCode == Keyboard.SPACE){
trace("SPACE");
var laser:Ship_laser = new Ship_laser();
var laser2:Ship_laser = new Ship_laser();
laser.x = player.x + 30;
laser2.x = player.x + 30;
laser.y = player.y - 30;
laser2.y = player.y + 30;
laser.addEventListener(Event.ENTER_FRAME, moveLaser);
laser2.addEventListener(Event.ENTER_FRAME, moveLaser);
addChild(laser);
addChild(laser2);
}
}
public function checkKey(event:KeyboardEvent):void{
if(event.keyCode == Keyboard.UP){
if((player.y - (player.height / 2)) >= 0){
player.y -= 10;
trace("UP");
}
}
else if(event.keyCode == Keyboard.DOWN){
if((player.y +(player.height / 2)) <= stage.stageHeight){
player.y += 10;
trace("down");
}
}
else if(event.keyCode == Keyboard.LEFT){
if(player.x - (player.width / 2) >= 0){
player.x -= 10;
trace("LEFT");
}
}
else if(event.keyCode == Keyboard.RIGHT){
if(player.x + (player.width / 2) <= stage.stageWidth){
player.x += 10;
trace("RIGHT");
}
}
}
public function addGameObjects(gameObj:GameObject):void{
// position the object randomly, but to the right of the player
gameObj.x = stage.stageWidth + (Math.ceil(Math.random() * (4000 + gameObj.width/2)));
gameObj.y = Math.ceil(Math.random() * (stage.stageHeight - 100 - gameObj.height/2));
// add object to the stage
addChild(gameObj);
// set the velocity of the object
gameObj.vx = -Math.ceil((Math.random() + 1) * 2);
// move the object each frame
gameObj.addEventListener(Event.ENTER_FRAME, moveObject);
}
private function moveObject(event:Event):void
{
var gameObj:GameObject = event.target as GameObject;
gameObj.x += gameObj.vx;
}
private function moveBackground(event:Event):void{
if(bgStars.x < ((bgStars.width / 2 + 100) * -1)){
bgStars.x = 0;
}
else{
bgStars.x -= bgStars.vx;
}
}
private function moveLaser(event:Event):void{
var laser:Ship_laser = event.target as Ship_laser;
for(var i:int = 0; i < objects.length; i++){
if(objects[i].hitTestObject(laser.hit)){
objects[i].removeEventListener(Event.ENTER_FRAME, moveObject);
if(objects[i].parent){
objects[i].parent.removeChild(objects[i]);
}
removeEventListener(Event.ENTER_FRAME, moveLaser);
if(laser.parent){
laser.parent.removeChild(laser);
}
}
}
if(laser.x > stage.stageWidth){
trace("LASER REMOVED");
removeEventListener(Event.ENTER_FRAME, moveLaser);
if(laser.parent){
laser.parent.removeChild(laser);
}
}
else{
laser.x += 20;
}
}
}
}