Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Принцип игры-стрелялки - как убивать? (http://www.flasher.ru/forum/showthread.php?t=73967)

baron27 08.01.2006 13:28

Принцип игры-стрелялки - как убивать?
 
Всем привет!
Есть грубо говоря сто мувиков с именами mc1..mc100. Также при нажатии на левую кнопку мыши к курсору аттачится так называемый мувик пулька, который летит вертикально и должен при попадании в один из этих ста мувиков их "убивать".
Никак не могу понять, как зафиксировать событие столкновения моих пулек и этих мувиков-мишеней. Ведь пульки аттачатся под разными именами.

serzhman 08.01.2006 14:45

Вложений: 1
Для большего количества клипов наверное тормозить будет.
enterFrame всётаки да и циклов куча. Потом удаляйте пули которые за экран вышли.

baron27 08.01.2006 15:05

Unexpected file format :(( - может версия старая флеша у меня стоит (у меня MX Prof 2004). Может еще скинешь в другой версии?
Да, EnterFrame удаляться будет при столкновении с клипом-мишенью.
А каков сам принцип? Как-нибудь хитро hitTest применить?

serzhman 08.01.2006 15:28

Вложений: 1
Смотри.

Antares 08.01.2006 15:47

Перебирать на предмет коллизии со всеми. Ты угадал, с помощью hitTest

K.A.T.A.F.A.L.K.E.R 08.01.2006 15:48

ОДИН РАЗ при создании пульки пробегайся по всем шарикам (или что там у тебя) и смотри, для какого _y лежит в пределах попадания твоей пульки (для какого _y пульки равен его _y плюс/минус (в зависимости от того где ноль) его высота), и запихивай пульке как какой-нить "таргет" сцылу на этот шарик... А уж потом - дело техники :) Либо по _x проверяй, либо через хитТест, но уже не у всех, а только у таргетов (либо у таргета, если пулька разрывается после первого же столкновения)

Antares 08.01.2006 15:55

А не проще сразу хит-тест?

baron27 08.01.2006 17:17

Код:

but.onPress = function() {
        if (Key.isDown(1)) { 
// если нажата левая кнопка мыши
                if (fire) {       
//если активизирован огонь
                        k++;   
                        attachMovie("bullet", "bullet"+k, k);  //аттачим пульку
                        _root["bullet"+k]._y = plo._y;         
                        _root["bullet"+k]._x = plo._x;   
// координаты пульки соответствуют координатам "дула пистолета"
                        _root["bullet"+k].onEnterFrame = function() {
                                this._y -= 5;  // запускаем пульку вверх

// а вот тут хз как, если через хиттест, то его надо прогнать через цикл
// из 100 итераций
                          for (i=0;i<100;i++) {
                                if (this.hitTest("kv"+i)) {
                                        _root["kv"+i]._visible = false;
                                }
                              }
                        };
                }
        }
};

В примере game.rar данная проблема решена из-за того, что там 3 мувика-мишени, а у меня их сотня. Очень уж тормозит все, если прогонять через этот цикл:((

baron27 08.01.2006 18:01

Вариант K.A.T.A.F.A.L.K.E.R'а лучше так как сразу уменьшается количество итераций цикла. Сейчас так и делаю. Правда гемора стока с этими if'ами ;)))

K.A.T.A.F.A.L.K.E.R 08.01.2006 18:39

Цитата:

Сообщение от Antares
А не проще сразу хит-тест?

Проще - не спорю. Но насчет производительности я не уверен... Когда летит десяток пуль и лежит сотня мувов - пробегать по всем - ух как не здорово... Разве что всунуть все "мишени" внутрь большого мува "targets" и делать targets.hitTest(bullet._x,bullet._y,true); - хм... Как вариант... Должно сработать :)


Часовой пояс GMT +4, время: 08:49.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.