Форум 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 13:12

У меня вот есть класс для каждого уровня, Level_1,Level_2...Level_n , и так же классы для персонажей и так далее.. получается в конструкторе например класса Level_1 нужно добавить объекты, и там же в конструкторе зарегистрировать таймер ,и в этом классе создать функцию private function allMoveObject (e:TimerEvent):void ?

stweet 14.10.2011 13:35

Код AS3:

public function moveAllObject (e:TimerEvent):void
{
        var killEnemy:Array = [];
 
        var i:int;
 
        for (i = 0; i < counterEnemy; i ++)
        {
                // типа проверили дистанцию между врагом и героем
                if (needDistancion < maxDistancion)
                {
                        // допустим герой убивает в ближнем бою врага
                        killEnemy.push(i);
                } else {
 
                        allEnemy[i].x += vx;
                        allEnemy[i].y += vy;
 
                        // далее можно проверить достиг ли враг
                        // припятствия и стоит ли ему сменить вектор движения
 
                        // ...
                }
        }
 
        // проверяем есть ли мёртвые враги?
        if (killEnemy.length > 0) {
 
                for (i = 0; i < killEnemy.length; i ++)
                {
                        // удаляем объекты из массива врагов.
                        removeChild(allEnemy[killEnemy[i]]);
                        allEnemy.splice(killEnemy[i], 1);
                }
        }
 
        // Двигаем героя.
        if (onLeftDown) hero.x --;
        if (onRightDown) hero.x ++;
 
        if (onTopDown) hero.y --;
        if (onBottomDown) hero.y ++;
 
        // Проверяем путь героя.
        if (hero.distancion < warDistancion)
        {
                // меняем направление гироя или запрещаем идти.
                // ...
        }
 
        // и так далее ...
 
        // дале ...
        detectPositionNext01();
 
        // можно даже продолжать выполнять статические методы из абстрактных классов.
        if (globalMethod != null) globalMethod.call();
 
        // Перерисовываем экран после всех манипуляций ...
        e.updateAfterEvent();
}

все выше приведенные переменные вымышленные, любое сходство в реальной жизни случайное совпадение! Удачи =)

Vansimar 14.10.2011 15:44

А не будет ли это все тормозить?и какой лучше шаг времени указать?

Inet_PC 14.10.2011 15:52

Цитата:

А не будет ли это все тормозить?
Вот заодно и проверьте. Тем более точно сказать трудно, ибо производительность зависит от многих факторов, и тормоза могут быть в другом участке кода.

2Sun 14.10.2011 17:54

Тормозить скорее всего будут сами мувики персонажей , если не оптимизированы или сделаны вектором.

stweet 14.10.2011 18:18

Цитата:

Сообщение от Vansimar (Сообщение 1039180)
А не будет ли это все тормозить?и какой лучше шаг времени указать?

1. проц Е5200, оперативы 3.5 г. смело держит до 300 объектов с просчётами на столкновение друг с другом с разрешением рендера 1024х768. Тут правильно подметили, всё зависит от оптимизации кода и формат используемой графики. Плюсом будит если объекты выходящие за рамки рендера станут не активными что тоже снизит потребляемость памяти, т.е. не надейтесь что объекты которых вы не видите на экране но добавленные на стейдж исключены из просчётов, желательно рисовать и просчитывать только то что попадает в видимую область.

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

вывод, делая игры думать надо как "сишник" о памяти, т.е. взял-отдал. И если знать все тонкости машинного кода, то можно огогого как творить))) Помни, машине твоей легче умножить а не разделить!

Vansimar 14.10.2011 23:03

А можно когда добавляю их на сцену прежде делать cacheAsBitmap , это поможет?

2Sun 14.10.2011 23:28

Цитата:

Сообщение от Vansimar (Сообщение 1039270)
А можно когда добавляю их на сцену прежде делать cacheAsBitmap , это поможет?

Если изначально графика векторная и не будет вращения или маштабирования - то да. В противном случае станет еще хуже. Если у вас при 4 моделях начинает тормозить - это явно проблема в моделях. Расчетная часть, хоть там сто проверок будет стоять не нагрузит так. Копайте с сторону моделей.

Vansimar 14.10.2011 23:42

Вот помоему решение производительности анимации http://blog.touchmypixel.com/2008/04...ed-animations/ и еще спросить хотел cacheAsBitmap лучше использовать для фона например и вобще статических картинок?

Inet_PC 15.10.2011 00:06

Цитата:

Вот помоему решение производительности анимации
Я бы так не сказал, простая небольшая (по времени) анимация легко может сожрать 500 метров и больше оперативы, и вот тут тормоза то точно будут.


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

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