数组帮助?
我的多媒体项目的当前构建存在一些问题(我使用的是ActionScript 2,因为它是我们学校课程所要求的)。
代码(下方)附加一个存储敌方实体的影片剪辑。然后代码将其推送到具有4个值的数组中(前三个没有任何问题)。
数组中的每个实体都会在EnemyBehaviour()下执行操作(这是为了拥有自己的个人健康,并通过一点点毕达哥拉斯的乐趣面对玩家;面对的工作正常)。
我遇到的错误是 - 当有两个或更多敌人产生(通过CreateEnemy())函数时,只有最后一个敌人可以被“子弹击中”'我是从“玩家”中产生的。 - 此代码也在下面给出。
我正在努力渲染所有敌人' hit-able'通过子弹 - 再次,最后生成的敌人(通过CreateEnemy())可以被击中,但以前的不能,尽管玩家面对脚本工作。
如果您有什么不明白的地方请问。
数组代码:
onEnterFrame = function (){
EnemyBehaviour();
}
var Enemies:Array = new Array();
var EnemyIndex:Number = 0;
function CreateEnemy() {
E = _root.attachMovie ( "mc_enemy" , "mc_enemy" + _root.getNextHighestDepth() , _root.getNextHighestDepth() , { _x:824, _y:402 } );
E.Diffx;
E.Diffy;
E.Distance;
E.health = 100;
Enemies.push(E);
trace('Enemy has been spawned');
}
function EnemyBehaviour() {
for (i=0; i < _root.Enemies.length; i++) {
curEnemy = _root.Enemies[i];
diffx = _root.mc_player._x - curEnemy._x;
diffy = _root.mc_player._y - curEnemy._y;
curEnemy.Distance = Math.sqrt( diffx^2 + diffy^2 );
curEnemy._x += Math.cos( Math.atan2( diffy, diffx ) ) * 2.5;
curEnemy._y += Math.sin( Math.atan2( diffy, diffx ) ) * 2.5;
curEnemy._rotation = Math.atan2( diffy, diffx ) / Math.PI * 180;
}
}
CreateEnemy()
子弹代码:
if(this.hitTest(_root.curEnemy)){
unloadMovie(this);
trace("hit")
_root.curEnemy.health -= 10;
trace("Enemy health is now " + _root.curEnemy.health)
if(_root.curEnemy.health <= 0){
unloadMovie(_root.curEnemy)
谢谢!
答案 0 :(得分:0)
你的问题是,在你的子弹代码中,你只检查子弹击中“curEnemy”,而不是所有的敌人。
在每一帧中, EnemyBehaviour()函数一次执行,子弹代码完成后执行。 这意味着在执行完整的for循环后, hitTest 执行一次。在这个循环中,curEnemy始终是最后一个给定值,在你的情况下是最后一个元素。
要解决此问题,您需要在现有循环中执行 hitTest ;或者在你的子弹代码中再次循环通过敌人阵列。
第二种解决方案可能是您当前代码中最快的解决方案。您只需更改子弹代码:
即可for (i=0; i < _root.Enemies.length; i++) {
curEnemy = _root.Enemies[i];
if(this.hitTest(curEnemy)){
// TODO : Delete the bullet, and makes enemy lose HP.
}
}