我正在制作一款与敌人战斗的Flash游戏。我为一个叫做史莱姆的敌人做了整个人工智能。现在我想把这个敌人的多个放在现场,我想知道我是否必须复制所有代码,例如slime1 slime2等。
if ((img_background.BackGround.wall).hitTest(slime._x + radius, slime._y,true )) { // When the slime hits a right wall
slime._x -= 8
}
if ((img_background.BackGround.wall).hitTest(slime._x, slime._y + radius, true)) {
slime._y -= 8;
}
if ((img_background.BackGround.wall).hitTest(slime._x, slime._y - radius, true)) {
slime._y += 8;
}
if ((img_background.BackGround.wall).hitTest(slime._x - radius, slime._y, true)) {
slime._x += 8;
}
if ((img_background.BackGround.wall).hitTest(slime._x)){
SLIwalltouch = 1
}else{
SLIwalltouch = 0
}
我可以指定一个具有多个值的变量,并执行以下操作:" slime" + numberofslimes ..... 我是新手,我需要帮助。感谢。
注意:我使用的是flash actionscript 2.0
答案 0 :(得分:0)
使用函数来包装代码,参数将是您想要的任何动画片段。首先,让我们准备一个函数来检查针对" target"的命中测试。我们称之为checkTouch,例如
function checkTouch(target){
// When the slime hits a right wall
if ((img_background.BackGround.wall).hitTest(target._x + radius, target._y,true )){
target._x -= 8
}
if ((img_background.BackGround.wall).hitTest(target._x, target._y + radius, true)) {
target._y -= 8;
}
if ((img_background.BackGround.wall).hitTest(target._x, target._y - radius, true)) {
target._y += 8;
}
if ((img_background.BackGround.wall).hitTest(target._x - radius, target._y, true)) {
target._x += 8;
}
if ((img_background.BackGround.wall).hitTest(target._x)){
SLIwalltouch = 1
}else{
SLIwalltouch = 0
}
}
请注意,我已经取代了所有"粘液"与"目标"。此时,您可以使用您喜欢的任何动画片段来调用该功能,并且会检查该动画片段的影片剪辑。
使代码与您的代码完全相同,只需添加:
checkTouch(slime);
现在这应该是如何检查更多对象的提示。如果你有,那就说吧,敌人叫做"粘液"," slime2"," hellhound"和"龙",你可以做到
checkTouch(slime);
checkTouch(slime2);
checkTouch(hellhound);
checkTouch(dragon);
然而,如果你最终拥有更多的敌人,将敌人添加到一个数组然后在循环中将它应用于它们会更有用:
var all_enemies=[slime, slime2, hellhound, mushroom, ..., enemyN];
for(enemy in all_enemies){
checkTouch(enemy);
}
请注意,为了发挥作用,敌人必须出现在舞台上才能在数组中声明然后这样。
如果你不想写出阵列中的所有敌人,并且知道你所拥有的敌人的确切数量 - 你可以利用闪光灯构建动画片段的能力名。
它是这样的,将所有敌人命名为enemy1,enemy2,enemy3,...... 然后使for循环看起来像这样:
for(i=0; i<numberofenemies; i++){ //replace numberofenemies with the number of enemies
checkTouch(this["enemy"+i]);
}