as3 hitTestObject с циклом for - PullRequest
       7

as3 hitTestObject с циклом for

0 голосов
/ 09 февраля 2012

Я создаю игру в стиле 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();
        }
    }
}

Спасибо за любую помощь!

1 Ответ

3 голосов
/ 09 февраля 2012

Рассмотрите возможность хранения своей еды в 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));
}

Я настоятельно рекомендую вам изучить Объектно-ориентированное программирование (ООП) для ActionScript-3 .Используя ООП, вы сможете создать class для ваших Food и инкапсулированных всего, что должен делать кусок еды.

Это также позволит вам иметь намного чищеи читаемый код, особенно в приведенном выше цикле for each, который может выглядеть следующим образом:

for each(var i:Food in food)
{
    // i is an instance of Food
}

В качестве эстетического преимущества использование приложения, такого как FlashDevelop , обеспечит чрезвычайно полезные подсказки на основена то, что вы добавляете в свой класс еды, например:

enter image description here

...