Arrays 动作脚本3:角色命中测试对象,所有对象都在数组中
首先,感谢所有阅读此问题的人的关注 我是印尼人,如果我的英语不好,请道歉 我目前正在一个学校项目中,使用Flash ActionScript 3或Unity创建触摸屏Android游戏,我目前的项目是使用Flash和ActionScript 3制作的。我目前的工作是一个疯狂喂食的游戏,其中包括一名女性潜水者,她将消灭掉掉在水下的鱼炸弹 我想提醒潜水员注意屏幕上的炸弹。我有一个炸弹杀手类,它将调用一个常规炸弹类,使其落在随机的x位置。所有RegularBomb实例都放置在一个数组中,然后我使用hitTestObject进行每个循环,因此如果潜水员击中movieclip内的透明圆,将出现感叹号,并将潜水员类中的readyToDefuse布尔值设置为true,当潜水员远离bomb时,布尔值将设置为false,感叹号将消失 我的问题是潜水员只能和最后一部炸弹电影互动。当第一个炸弹孩子加入到阵列中,潜水员到达时,感叹号会出现,但每次新炸弹实例化时,感叹号都会消失,我必须让潜水员移动到新炸弹实例化处,使其出现 我已经阅读了关于这个问题的建议:删除for each循环中的else语句,但删除它将使readyToDefuse保持为True,感叹号保持出现 我做了谷歌搜索,似乎没有什么能回答我的问题,我必须完成这个游戏一周,直到演示,这让我在过去的几天里感到困惑 以下是我的炸弹杀手类的完整代码:Arrays 动作脚本3:角色命中测试对象,所有对象都在数组中,arrays,actionscript-3,flash,collision-detection,movieclip,Arrays,Actionscript 3,Flash,Collision Detection,Movieclip,首先,感谢所有阅读此问题的人的关注 我是印尼人,如果我的英语不好,请道歉 我目前正在一个学校项目中,使用Flash ActionScript 3或Unity创建触摸屏Android游戏,我目前的项目是使用Flash和ActionScript 3制作的。我目前的工作是一个疯狂喂食的游戏,其中包括一名女性潜水者,她将消灭掉掉在水下的鱼炸弹 我想提醒潜水员注意屏幕上的炸弹。我有一个炸弹杀手类,它将调用一个常规炸弹类,使其落在随机的x位置。所有RegularBomb实例都放置在一个数组中,然后我使用hi
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;
}
}
}
}
}
包{
导入flash.display.MovieClip;
导入flash.display.Sprite;
导入flash.events.Event;
公共级炸弹杀手电影剪辑{
公共区域:雪碧;
公共var炸弹:阵列;
公共var炸弹:常规炸弹;
公共战场:战场;
公共var潜水员:潜水员;
公共var警告:BombWarn;
公共功能炸弹杀手(角色:潜水员,警告:炸弹警告){
//构造代码
面积=新精灵();
面积.graphics.beginll(000000,0);
面积.图形.drawRect(0,02200720);;
area.graphics.endFill();
addChild(区域);
潜水员=性格;
华纳=警告;
炸弹=新阵列();
var newBomb=新的常规炸弹(Math.random()*area.width,diver,warner);
炸弹。推(新炸弹)
addChild(newBomb);
轰炸场=新轰炸场(0670,本);
addChild(爆炸场);
this.addEventListener(Event.ENTER_FRAME,moveBomb);
}
功能(事件:事件){
如果(Math.random()逻辑是错误的。你需要浏览炸弹,找到一个与潜水员有联系的炸弹(如果有的话),然后使用唯一的炸弹。否则潜水员已经准备好拆除炸弹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;
}
功能移动炸弹(事件:事件)
{
var aBomb:常规炸弹;
if(Math.random()它能工作!!实际上这只是一个开始,对于到达的每一颗炸弹,当用户按住一个拆除按钮时,炸弹位置上的指示器将充电,当炸弹充满时,炸弹小孩将消失,炸弹小孩将从阵列中移除..而且,不仅是炸弹,我还想与危险的海洋生物进行同样的互动,例如就像鲨鱼、水母、海蛇和河豚一样,但是当潜水员击中其中一个时,潜水员的健康值将降低。我也必须这样做吗?顺便说一句,非常感谢!!@AzmiFarhan不,瞬间击中的逻辑将是不同的。一般地考虑一下。潜水员应该选择一颗炸弹,然后得到一个炸弹准备好解除它。然后,任何危险的鱼都会立即伤害潜水员,不管会有多少鱼。那么,我应该对鱼使用我以前的逻辑吗?或者我的意思是,使用相同的逻辑,只在检查find函数输出的if语句中使用不同的表达式?@AzmiFarhan,请这样做不要让我替你想。我当然可以写你想写的所有东西,但有什么意义呢?是你自己,尽可能多地尝试自己解决问题,然后你就会学到一些关于算法的知识。