我现在正在开发AS3游戏,并设置它以便玩家精灵可以收集硬币。这是通过在检测到与玩家发生碰撞时将'硬币'影片剪辑不可见,并将硬币计数增加1来完成的。
现在,我有以下循环。
if (coin1Collected == false){
if (player.hitTestObject(level.coin1)){
level.coin1.visible = false;
coin1Collected = true;
coinsCollected++;
soundChannel = coinSound.play();
}
}
我不想为每个单独的硬币影片剪辑和硬币收集布尔设置其中一个,但是我无法找到将它们全部放入for循环的方法。有没有办法在for循环中将变量与增量值连接起来?如果这是一个愚蠢的问题,请提前感谢对不起。
答案 0 :(得分:3)
我认为您正在寻找level['coin' + i]
。例如,当i = 5
时,它等同于level.coin5
。为了避免两次收集相同的硬币,为什么不检查它的可见度呢?
const NUM_COINS = 10;
for (var i:int = 1; i < NUM_COINS; i++) {
var coin:Sprite = level['coin' + String(i)];
if (coin.visible && player.hitTestObject(coin)) {
coin.visible = false;
coinsCollected++;
soundChannel = coinSound.play();
}
}
如果您需要存储有关硬币的更多信息,您可以:
创建一个数组,其中coinX具有索引为X的信息
使用MovieClip并将信息设置为属性,因为MovieClip是动态的(coin.pickedUp = true
)
创建一个已将该信息作为属性