我正在构建一个pacman风格的游戏,我希望缩短我的代码。 该阶段包含92个实例名称为food1,food2等的实例。 当玩家(pacman)击中其中一个想要召唤函数的实例时。
我开始像这样写出来...它有效,但我不想复制这92次!
if( player.hitTestObject(food1) ) {
updateScore();
}
if( player.hitTestObject(food2) ) {
updateScore();
}
现在我正在尝试这些方面,但还没有成功。
function collectFood() {
var i:Number;
var pGroup:String
for (i=0; i<92; i++) {
pGroup= "food" + i;
if( player.hitTestObject( MovieClip(pGroup) ) ) {
pCount+= 1;
MovieClip(pGroup).y=-300;
updateScore();
}
}
}
感谢您的帮助!
答案 0 :(得分:3)
考虑将食物存放在Array
。
设置数组:
var food:Array = [];
将食物添加到此数组中(如果适用):
food.push(myFood);
然后您可以使用for each
来浏览此数组中的项目:
for each(var i:MovieClip in food)
{
// do stuff with i
// i represents an instance of your food
if(player.hitTestObject(i))
{
pCount ++;
pGroup.y -= 300;
updateScore();
}
}
如果您在舞台上有食物并希望将它们全部添加到此阵列中,请执行以下操作:
for(var i:int = 0; i<92; i++)
{
food.push(MovieClip(this["food"] + i));
}
我强烈建议您查看Object-oriented programming (OOP) for ActionScript-3。使用OOP,您将能够为class
和encapsulate为食物应该做的所有事情创建Food
。
它还允许您拥有更清晰,更易读的代码,特别是在上面的for each
循环中,它可能如下所示:
for each(var i:Food in food)
{
// i is an instance of Food
}
作为美学上的好处,使用像FlashDevelop这样的应用程序将根据您添加到Food类的内容提供非常有用的工具提示,例如: