Форум 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)
-   -   space invaders (http://www.flasher.ru/forum/showthread.php?t=133463)

23an0mal1a1989 06.12.2009 12:43

space invaders
 
Здравствуйте...прошу помощи вот в таком деле - надо написать игрушку по типу space invaders...
я сделала передвижение корабля внизу экрана кнопками -> <-, корабль умеет стрелять пробелом (там использую мувик летящей пули) + сделала чтоб пришельцы из стороны в сторону шатались...

теперь у меня никак не получается сделать чтоб умирали пришельцы...
Я вот тут пробую вот так...но не получается (((
Код AS1/AS2:

for (i=1; i<=45; i++)
{
    if (_root["newclip"+level].hitTest(_root["vrag"+i]))
    {
        removeMovieClip(_root["vrag"+i]);
    }
}

это цикл по пришельцам, он написан там, где события нажатия пробела...т.е когда добавляется новая пуля _root["newclip"+level]...

может я не там пишу это все...или не так понимаю смысл фукции hitTest?

та же самая проблема у меня теперь с кораблем...я сделала чтоб пришельцы в него стреляли...а вот сделать чтоб он исчезал при попадании не получается(((
там у меня если пришло время пришельцу стрелять - он стреляет и дальше проверяется перекрывает ли пуля корабль... и если да, то корабль скрывается...пока так...хотя там должно быть чтобы корабль взрывался _root.korabl.gotoAndPlay(2);
но все равно не работает....очень прошу помощи

NoCD 06.12.2009 13:28

Зачем вам сцены в такой игре???
Сцены в flash8 криво работают. Да и не нужны они особо.

В играх, где требуется быстрый обсчет позиций мувиков, особенно пересечение двух мувиков лучше использовать математику.

hitTest в основном годится для mouse и для медленных событий
вкратце:

Код AS1/AS2:

 
 
Пуля.onEnterFrame = ПолётПули;
 
function ПолётПули(){
Пуля._x += скорость пули относительно x;
Пуля._y += скорость пули относительно y;
 
var dx = Пуля._x - Враг._x;
var dy = Пуля._y - Враг._y;
var dist = Math.sqrt(dx*dy+dy*dy);
 
if(dist < 10) {
trace("Есть контакт");
Обсчёт_Здорровья_врага();
или сразу
removeMovieClip(Удалить врага);
//--------
removeMovieClip(Удалить пулю);
delete this.onEnterFrame;
}
}


23an0mal1a1989 06.12.2009 15:20

NoCD, спасибо огромное за помощь и советы...уже очень долго с этим бьюсь и как выяснилось не так действую(((
что-то начало получатся когда я как Вы сказалт написала
все у меня написано во втором фрейме летящей пули, т.е в том месте где она только начинает лететь...у меня там вставлен твин...т.е. во втором фрейме пуля стоит внизу, а в 33 вверху...я вот думаю может это лишнее...ведь в том скрипте, который вы написали пуля и так летит...вот я попробовала просто символ сделать и в нем в первом и последнем его фрейме написала этот код...и вообще все перестало стрелять(((
работает странно пуля почемуто убивает только одного пришельца...пришем он не удаляется со сцены...а если срабатывает трэйс, то удаляются безвозвратно сразу несколько....ничего словом не понимаю(((((

Добавлено через 24 минуты
забыла сказать пришельцы в моей игрушке непрерывно двигаются туда-сюда...может из-за этого пуля летит в одном месте, а пришелец умирает совершенно в другом?
попробовала сделать чтоб пришельцы убивали корабль...работает...только не хорошо:
1. корабль почемуто не умирает до конца, не удаляется со сцены(((
2. пуля никак не хочет попадать в корабль...я уже дистанцию до 30 увеличила...а всеравно работает через раз(((

очень прошу, помогите разобраться...

NoCD 06.12.2009 17:31

Вложений: 1
У меня в том коде были ошибки.
сделал набросок, может не то что вы делаете, но думаю это поможет.

управление: кнопки left / right , mouse, fire - левая кнопка мыши

23an0mal1a1989 07.12.2009 00:20

NoCD, спасибо Вам огромнейшее...Вы просто не представляете как Вы меня выручили и как мне помогли...я очень Вам благодарна...я даже не ожидала такой глобальной помощи...
я начала переделывать под то, что мне нужно и образовалось 2 небольших вопроса...(извиняюсь за наглость)
не нашла как прикрепить файл...вопросы такие...
у меня почему-то не стреляют пришельцы...точнее они пытаются стрелять...но у меня там какая-то ошибка (может с depth?) и совсем не вызывается функция, двигающая пулю прищельца eng_bullet_vr() (это я трейсом проверила)...

а второе - я нарисовала динамический текст на поле, а он у меня не хочет выводиться...счет в программе прибавляется как надо, но не выводится(((


еще раз огромное спасибо Вам за помощь...Вы так много для меня сделали....

Добавлено через 12 минут
извините извините извините извините....я редиска....просмотрела очевидную ошибку...вот так стреляет...только попадание очень плохо отслеживается...пришлось увеличить там dist<60....это нормально?...а то меня это немного смущает...

но определился еще вопрос глупый наверно...а как закончить игру, если корабль убили?...удалить весь основной клип и прикрепить надпись?
Добавлено через 23 минуты
еще раз извиняюсь)...и счет у меня выводится...и все хорошо...только вот с дистанцией<60...скажите, пожалуйста...это нормально?

NoCD 07.12.2009 02:00

Ну раз на все вопросы вы сами ответили:), то отвечу только на этот.
Цитата:

еще раз извиняюсь)...и счет у меня выводится...и все хорошо...только вот с дистанцией<60...скажите, пожалуйста...это нормально?
дистанция 60 пикселей, это радиус окружности, вокруг вашего объекта или вокруг мувика врага. Если в радиус 60 пикселей вмещается весь объект, это нормально, да если даже радиус чуть больше чем сам мувик, ничего страшного нет. Если радиус меньше, а мувик больше, то просто не во всех местах мувика будут фиксироваться попадания.

Chuck607 07.12.2009 11:32

А у меня такой вопрос, что больше кушает ресурсы hitTest () или просчитывание дистанции?

VVall 07.12.2009 13:55

По уму, hitTest внутри должен работать так, что сначала проверяется пересечение по координатам, а потом по содержимому. Как сделано во Flash на самом деле - не знаю.

Просчитывание дистанции в любом случае быстрее, без вариантов.

Chuck607 07.12.2009 15:06

хм... так выходит в играх, например на пересечение объекта с пулей всяко лучше прописать дистанцией чем hitTest`ом ?

VVall 07.12.2009 15:22

Да. Hittest нужен только для очень точного определения попадания в объект очень сложной формы. Для остальных случаев достаточно проверки с попаданием координат пули в один или несколько прямоугольников или кругов, которые грубо повторяют форму объекта.


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

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