![]() |
|
Модераторы: SoWa |
![]()
|
|
| venziver |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 10.11.2011 Репутация: нет Всего: нет |
В моих программах игр написанных в ActionScript таймер практически не работает, так как сразу при запуске программы с таймером, время выполнения каждого обработчика событий начинает увеличиваться движение замедляется и программа зависает. Пример таймера в программе прилагается. Что мне делать? Помогите, кто знает, буду очень признательна
Присоединённый файл ( Кол-во скачиваний: 6 )
______.rtf 8,70 Kb |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: нет Всего: 315 |
возможно, таймер запускается в цикле или при новом инициализации метода. то есть действует лавинный эффект: первое срабатывание таймера приводит к запуску 10 методов и второму запуску того же таймера. два таймера на следующем ходу запускают 20 методов и ещё 2 таймера. на третьем ходу 40 методов и ещё 4 таймера. и т.д.
|
|||
|
||||
| venziver |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 10.11.2011 Репутация: нет Всего: нет |
Спасибо за ответ. У меня есть несколько игр написанных на C++Builder они все работают и везде задействован таймер. Когда я стала переводить эти игры на ActionScript 3 везде таймер стал зависать, хотя код тот же самый, так как С++ и ActionScript это один язык программирования и новый код я не создавала, а только переделывала под платформу Flash. Так что не знаю, что мне делать. Уже целый месяц бьюсь над этим.
|
|||
|
||||
| SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 1 Всего: 74 |
venziver, покажи каким кодом ты это дело запускаешь?
+в методе RISFON явно отсутствует некий счетчик i... Если ты где-то создаешь сотни экземпляров класса DomLab, то и это может быть причиной тормоза. -------------------- Всем добра |
|||
|
||||
| venziver |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 10.11.2011 Репутация: нет Всего: нет |
Спасибо всем, что заинтересовались моим вопросом. Высылаю файл Risdog.as.
Присоединённый файл ( Кол-во скачиваний: 12 )
Risdog.as 2,44 Kb |
|||
|
||||
| Simplifier |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 18.7.2011 Репутация: нет Всего: нет |
все дело в том, что твой код - это пи*ц, извиняюсь за выражение. и дело явно не в таймере. добавь хотя бы очистку холста в начало метода RISFON: rism.graphics.clear(); У as3 производительность явно пониже, чем у с++, поэтому ему трудно переварить такой неоптимизированный код((
|
|||
|
||||
| venziver |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 10.11.2011 Репутация: нет Всего: нет |
Спасибо за ответ Simplifier. Эту проблему я решила. Оказывается я не удаляла в таймере объект rism, который представляет собой синий фон с дождинками величиной с экран программы и каждое выполнение таймера рисовало новый объект rism с двигающимися дождинками. Получалось,что сколько было повторений таймеров столько и было объектов rism на которых двигались дождинки. Поэтому всё это с каждым разом работало всё медленнее пока не зависало. Для правильной работы необходимо в каждом таймере не только убирать объект rism из очереди высвечиваемых объектов но и удалять этот объект полностью: rism=null; removchild(rism); Правильный файл я прикрепила. Но у меня новая проблема. В таймере плохо двигаютя растовые изображения. В этот файл я добавила машинку-растовое изображение, так вот она не двигается плавно по экрану, а дёргается и мигает. Движение не получается. Пожалуйста помогите решить эту проблему. С уважением venziver поздравляю всех с новым годом. |
|||
|
||||
| Simplifier |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 18.7.2011 Репутация: нет Всего: нет |
Рад был помочь) Тебя тоже с новым годом
Не вижу никакого прикрепленного файла. Код в студию, в общем) Это сообщение отредактировал(а) Simplifier - 18.1.2012, 22:48 |
|||
|
||||
| venziver |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 10.11.2011 Репутация: нет Всего: нет |
||||
|
||||
| Simplifier |
|
||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 18.7.2011 Репутация: нет Всего: нет |
Это ты объявила переменные статическими, т.е. к ним можно обращаться через класс, а не через экземпляр класса; например так: trace(Risdog.COLDG); вместо trace(this.COLDG); Но тут это вроде бы не требуется, вероятно ты хотела объявить их константами (чтобы нельзя было изменять их значение после объявления). Константы объявляются так (декларацию типов заодно добавил):
Учитывая, что фон не анимируется, логично сделать его отдельным объектом, чтоб не приходилось его каждый раз перерисовывать: private var sky:Shape = new Shape;//небо В каждом кадре удалять и создавать новый холст для рисования дождя тоже вряд ли является оптимальным вариантом. Лучше использовать один и тот же объект, но в каждом кадре очищать его от старой графики. Делается это с помощью метода clear() класса Graphics: rism.graphics.clear();
Объект rism был один, просто новая графика в нем рисовалась поверх старой. А ее надо было удалять (графику, а не сам объект) Загружать картинку с твоей машинкой в каждом кадре я тоже смысла не вижу. Лучше вынести загрузку в конструктор. Еще, вместо 2х массивов для кординат х и у, мне было бы удобней использовать один, в котором будут храниться точки (экземпляры класса Point) Ну и имена переменных у тебя не очень человекопонятные. Всякие там xm, ym, dd, ti, aa, которые мало что говорят об их назначении. Код трудно читать( В общем, минимально правленный код будет выглядеть примерно так:
Это сообщение отредактировал(а) Simplifier - 27.1.2012, 14:02 |
||||||||||
|
|||||||||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | ActionScript 3 | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |