Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Организация перемещений персонажей (http://www.flasher.ru/forum/showthread.php?t=169905)

Vansimar 14.10.2011 12:23

Организация перемещений персонажей
 
Вот смотрите ,у меня есть класс врага ,допустим Enemy_per, в нем я добавляю слушатель событий ENTER_FRAME и там прописываю код на перемещение персонажа,те постоянное движение,от одного края до другого ,разворачивается и обратно и так все время.. Потом я наследую от него еще класса 4, и добавляю на сцену их, да,персонажи ходят,но это вешает производительность , все тормозит еле двигается, есть ли какая нибудь альтернатива ENTER_FRAM'у чтоб не так вешало..

Genzo 14.10.2011 12:29

1 - Enemy_per , не по принятым стандартам лучше EnemyPer
2 - используйте tweener для таких вещей , есть много реализаций (родную лучше не используйте) поищите информацию на тему TweenerLite ,например.

Vansimar 14.10.2011 12:32

это http://www.greensock.com/tweenlite/ ?

Inet_PC 14.10.2011 12:34

Да он.

Vansimar 14.10.2011 12:35

ну ладно посмотрю)спасибо

Добавлено через 8 минут
а вот допустим у меня главный игрок постоянно перемещается(управление с клавиатуры) а у нему идут противники, у твинера есть метод TweenMax.to(mc, 1, {x:65, y:117}); те он двигает к определенной точке,а персонаж то постоянно ходит,получается чтоб противник постоянно следовал за игроком нужно это опять же в ENTER_FRAME все делать?

Genzo 14.10.2011 12:48

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

stweet 14.10.2011 12:53

Цитата:

Сообщение от Genzo (Сообщение 1039098)
используйте tweener для таких вещей , есть много реализаций (родную лучше не используйте) поищите информацию на тему TweenerLite ,например.

Как правило, если бороться за производительность, то и greensock не поможет. Причина в том что на каждый твин он так же использует по своему таймеру.

выход из вашей ситуации:
не использовать на каждого перса по индивидуальному двигателю!
значит получается: Пишем у каждого перса (и во всей игре целиком - желательно) общие методы к примеру "moveObject();" а в основном классе игры регистрируем таймер и в цикле пробегаем по всем динамическим объектам. К примеру обходим в цикле объекты враги:
Код AS3:

private function allMoveObject (e:TimerEvent):void
{
    for (var i:int = 0; i < allEnemyNum; i ++)
    {
        if (allEnemy[i] != kill)
        {
            // всякие проверки на столкновение и т.п. манипуляции с объектом
            allEnemy[i].x ++;
        }
    }
}
 
// такой манёвр значительно ускорит приложение и снизит загрузку памяти.

Добавлено через 4 минуты
Цитата:

Сообщение от Vansimar (Сообщение 1039102)
а персонаж то постоянно ходит,получается чтоб противник постоянно следовал за игроком нужно это опять же в ENTER_FRAME все делать?

так же в приведённом выше примере можно проверять какая клавиша зажата для движения героем, проверять дистанцию от героя до врага и в случае попадания в область видимости, врагу сообщать новое движение по напровлению к герою, ох, столько всего замутить можно =)))

Vansimar 14.10.2011 13:03

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

stweet 14.10.2011 13:04

ессессеенноо)))

Genzo 14.10.2011 13:10

тогда уже лучше иметь 2 контроллера : персонажа и скопа врагов , а то получается что-то сродни :
Код:

while(true) readln


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

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