首先感谢读这个问题的人的关注
我是印度尼西亚人,如果我的英语不好,请道歉。
我目前正在使用Flash ActionScript 3或Unity创建触摸屏Android游戏的学校项目,我目前的项目是使用Flash与ActionScript 3制作的。我目前的工作是一个类似Feeding Frenzy的游戏,涉及女性潜水潜水员将歼灭落在水下的鱼炸弹。
我试图让潜水员警告屏幕上的所有炸弹。我有一个BombsLayer类,它将调用RegularBomb类以落入随机x位置。所有RegularBomb实例都被放入一个Array中,然后我用hitTestObject进行每次循环,所以如果潜水员击中了movieclip里面的透明圆圈,会出现一个惊叹号,并将潜水员类中的readyToDefuse布尔值设置为true,当潜水员是远离炸弹,布尔值将设置为false,感叹号将消失。
我的问题是潜水员只能与阵列中的最后一个炸弹movieclip instace进行交互。当第一个炸弹子加入阵列并且潜水员到达时,会出现惊叹号,但每次新炸弹实例化时,惊叹号都会消失,我必须让潜水员移动到新炸弹实例化以制作标志出现。
我已阅读有关此问题的建议:AS3 - array hit test in 'for each' loop only works properly with last object in array删除for循环中的else语句,但删除它会使readyToDefuse保持为True并且感叹号仍然出现。
我已经进行了谷歌搜索,似乎没有什么可以回答我的问题,我必须完成这个游戏一周,直到演示文稿,这让我感到困惑,这些过去的日子......
这是我的Bombslayer类的完整代码:
package {
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
public class BombsLayer extends MovieClip{
public var area:Sprite;
public var bombs:Array;
public var bomb:RegularBomb;
public var bombground:BombGround;
public var diver:Diver;
public var warner:BombWarn;
public function BombsLayer(character:Diver, warn:BombWarn){
// constructor code
area = new Sprite();
area.graphics.beginFill(000000, 0);
area.graphics.drawRect(0,0,2200,720);
area.graphics.endFill();
addChild(area);
diver = character;
warner = warn;
bombs = new Array();
var newBomb = new RegularBomb(Math.random()*area.width, diver, warner);
bombs.push(newBomb)
addChild(newBomb);
bombground = new BombGround(0, 670, this);
addChild(bombground);
this.addEventListener(Event.ENTER_FRAME, moveBomb);
}
function moveBomb(event:Event){
if(Math.random() <= 0.0005){
var newBomb = new RegularBomb(Math.random()*area.width, diver, warner);
bombs.push(newBomb)
addChild(newBomb);
}
for each(var bomb:RegularBomb in bombs){
bomb.moveDown();
if(diver.hitTestObject(bomb)){
warner.visible = true;
diver.readyToDefuse = true;
}
else{
warner.visible = false;
diver.readyToDefuse = false;
}
}
}
}
}
如果需要,我也可以上传完整的项目..
所有帮助将不胜感激。 谢谢!
答案 0 :(得分:0)
逻辑错误。您需要浏览炸弹并找到与潜水员接触的炸弹(如果有的话),并使用唯一的炸弹。否则,潜水员已准备好拆除炸弹A但尚未准备好化解B,C和D,因此根本没有准备好。
function moveBomb(event:Event)
{
var aBomb:RegularBomb;
if (Math.random() <= 0.0005)
{
aBomb = new RegularBomb(Math.random() * area.width, diver, warner);
bombs.push(aBomb)
addChild(aBomb);
}
for each(aBomb in bombs) aBomb.moveDown();
// Find bomb in diver's vicinity.
aBomb = findBomb();
// The same as "if (aBomb != null)"
if (aBomb)
{
warner.visible = true;
diver.readyToDefuse = true;
}
else
{
warner.visible = false;
diver.readyToDefuse = false;
}
}
function findBomb():RegularBomb
{
for each(var aBomb:RegularBomb in bombs)
if (diver.hitTestObject(aBomb))
return aBomb;
return null;
}