[33]: Таймер и альтернатива таймеру

Приветствую вас, друзья, сегодня расскажу о такой штуковине во флеш, как Таймер, которым я никогда не пользуюсь :D Мне удобнее пользоваться альтернативным способом. Привык :) А так, как вам будет удобнее, таким способом и будете пользоваться.

Для того чтобы создать таймер нужно создать переменную типа Timer, например так:
var timer:Timer = new Timer(5000, 3);
В скобках первое число “5000” – это задержка 5 секунд между срабатываниями таймера. Второе число “3” – это количество повторов.

Для таймера есть 2 события:
TimerEvent.TIMER – срабатывает при каждой итерации таймера (при каждом повторе)
TimerEvent.TimerEvent.TIMER_COMPLETE – срабатывает по завершению таймера.

так же для таймера есть различные методы, например:
timer_name.strat() – запускает таймер
timer_name.stop() – останавливает таймер
timer_name.reset() – обнуляет таймер.

Обо всём (почти) этом смотрите в видео ниже:

Исходник: yadi.sk/d/sySfwDELByiBL
Код ActionScript 3.0 из урока:

В данном примере сначала создается клип с именем “krug” и клип с названием “kvadrat“.

Всё подробно рассказано в видео :) Если будут какие-либо вопросы, пишите в комментариях к видео. Надеюсь, данный урок по реализации скорости в action script 3.0 в программе adobe flash, поможет вам в разработке игр. :)

Комментарии
  1. Егор

    слушай парень ,а ты можешь показать как надо делать игру с управляемым персонажем там например:человечек бегает по большой карте и стреляет в зомби и ещё как меню покажи пожалуйсто я очень сильно хочу этому научиться
    Вот я умею рисовать но хочу ещё научиться флешиграм и хочу применить свои знания в рисоываниии в разработках флеш игр
    Свернуть

    • admin

      да могу, и сделаю это, только ближе к середине января, надеюсь… На мне висело сейчас 3 проекта, поэтому уроков не было. Сейчас один закончил и оформляю статьи сюда и скоро выложу 3 урока по играм. На это тоже надо много времени.
      Кстати, какой вид игры про зомби?:) сверху или сбоку? на какую похожа?

      • Егор

        Ну не знаю наверно вид с боку.А там же во флеше можно вроде бы делать 3D игры.Если можно в 3D то вовще супер!

        • admin

          вид сбоку – это самоё моё :) сверху для меня рисовать проблемно.. 3D можно, но я врят ли буду делать такие… Как и изометрические. Не потому что сложные, а их нереально долго рисовать одному! а я ещё и не художник. :) хотя можно было бы простую изометрическую сделать. Но всё равно много рисования.

          • Егор

            Так можно скачать 3D модели,и у меня немного есть

  2. Егор

    Ну я взял за пример в интернете научиться первым делом во флеш играх мячику.

  3. Егор

    Сложной анимации я вроде бы как уже научился(марионеточной(там с символами) и костями тоже)Хочу флеш играм:)

    • admin

      молодец :) первой я разберу игру пинг-понг. как самую наипростейшую. :) с менюшкой наверно :) дальше карточную. косынку или пасьянс.. А потом дудл джамп хочу сделать :)

      • Егор

        дудл джамп самое то!

      • Егор

        а я вот,учусь пока что на шарике флеш игры делать,потом кину ссылку на видео как у меня там получается:).Может чем нибудь ты мне и поможешь.

        • admin

          ага) я думаю до середины января сделать 3-4 урока по играм а дальше буду делать игрулю на продажу. И как раз процесс разработки выложу после продажи :) вот такой мини-план :)

          • Егор

            Хороший план!).Ты правильно делаешь

    • admin

      не могу посмотреть. Это видео c ограниченным доступом.
      Поставь доступ для тех у кого есть ссылка. И ссылку на исходник тоже бы неплохо, чтобы я подправил код :)

      • Егор

        Всё,я сделал это видео с обшим доступом.

        • admin

          всё равно ограниченный доступ. может ссылка неправильная?

        • admin

          посмотрел.) сделать разные платформы можно внутри клипа с платформами. т.е. первый кадр – одни платформы, 2 – другие, 3 – третьи. и когда шар пересекает квадрат менять и кадр на сцене и кадр внутри платформы.
          потом почему второй скопированный не работает. А он и не должен. У тебя 2 клипа с одинаковым именем ground. Работать будет один из них.
          с ездившей платформой сложнее. так с лёту и не скажешь. Как вариант можешь платформу которая ездит обозвать именем и для неё сделать отдельное условие. допустим назвать rollplatform
          и в клипе с шаром прибавить условие
          if (ground.rollplatform.hitTest(….
          И если пересекает, то надо как-то перемещать шар со скоростью платформы. Это явно будет зависеть от координаты это платформы :)

  4. Егор

    вот посмотри!я тебе кинул ссылку на видео там где я показываю свою игру

  5. Егор

    Помоги мне пожалуйста сделать так,чтобы у меня в каждом уровне платформ было разное количество.И ещё когда шарик стоит на платформе которая движется то шарик почему-то стоит на месте не зависемо от платформы.Сделай так чтобы шарик двигался вместе с платформой.

    • admin

      у меня уже настроение на разработку появилось) поиграл сегодня в Сид Маер 5. Нуууудная какая-то… Borderlands самая веселая :) )))

  6. Егор

    ссылку на исходник кину потом!

  7. Ranex

    Салют! Объясни пожалуйста, что используют для появления противников на сцене в определенное время? К примеру вылетело 2 противника, через 20 секунд другие появятся, еще через 5 сек появится бос и т.д. Чем удобней всего пользоваться? Может запустить таймер и отслеживать его тики до конца игры или как то лучше можно?

    • admin

      Привет :) Что используют конкретно разные разработчики – я не знаю. Вариантов на самом деле не много. Нужно знать сколько прошло времени. Это либо таймер, либо счетчик кадров (мой альтернативный таймер), что вернее всего, т.к. не зависит от частоты кадров. И появление врагов можно делать по-разному. Как вариант сделать функцию, в которой будут добавляться враги. Типа если время == 8000 кадр, то добавить такого-то врага, если 115000, то другого. и т.д. Но условий на каждую миссию будет столько , сколько отдельно врагов надо добавить. Вариант простой и хороший :) Другой вариант – сделать одномерный архив. Номер ячейки – значениями время (в секундах пусть) а содержание – враг, который надо добавить на этой секунде. И при работе таймера, просто делим счетчик на частоту кадров – получаем секунды. пример 6000кадр/60фпс = 100-я секунда. И смотрим есть ли что-нибудь в такой ячейке массива, и вообще существует ли она. Если есть, то добавляем врага, по содержимому ячейки. Можно сделать и двухмерный массив, чтобы добавлять партиями. Можно в массивы и функции напихать, которые должны запускаться. Как-то так. Первое то пришло в голову. Как бы я делал не знаю. И с врагами тоже. Скорее они были бы замороженными объектами без изображения. А при нужном моменте активировались, и добавлялся им клип через addChild. Так не нужно было бы при добавлении врагов, писать им код ИИ, он просто неактивен. Но усложняет структуру. Почитай в интернете про появлении противников. Причем это мы сейчас говорим про игры типа Растения против зомби, кингдом раш, где враги точно появляются по времени. Статичные игры в общем. В динамичных играх, враги появляются по месту (координатам), и по триггерам (наступил на срабатыватель появления врага).

      • Ranex

        Наверно проще всего будет, реализовать один таймер от начала и до конца каждого уровня и создать условия для срабатывания на определенной секунде(5, 20, 100…) Вот как только с количеством быть… Думаю нужно будет для появления каждой пачки врагов сделать функцию и вней прописывать addChild и указывать координаты вражин?

        • admin

          не обязательно секунде, можно и кадры. Короче запускаешь таймер и при клике по сцене делаешь trace кадра. и там сам себе отмечаешь промежутки когда должны вылазить новые враги.
          Пачки врагов можно заилить как в уроке про снег появляется снег. Можно для соседних кадров добавлять разных врагов, чтобы не писать сложные функции. Можно добавить 60 врагов за 1 секунду при fps – 60. Это много :) А вот в плане оптимизации сложно сказать как лучше. Постепенная просадка частоты кадров, или разовая. Вообще, по книге Джоба Макара по as2.0, он говорил, что нужно загрузить всю инфу обо всё заранее в объекты. И при необходимости делать их активными и добавлять картинку, а когда не нужен, замораживать и убирать картинку. Чтобы постоянно не создавать заново. Например, есть объект хранящий ширину, высоту координаты, скорость, ИИ и т.д. врага. В нужный момент ты добавляешь картинку через addChild и активируешь его, когда он ушел из сцены или убит, просто убираешь картинку, но не удаляешь остальное. Когда потребуется опять, снова добавляешь картинку, и может быть, меняешь ему координаты. В плане оптимизации нужно стараться не лазить в библиотеку, а всё использовать много раз :)

    • admin

      Ещё, как вариант, с обнулением таймера, и добавление через пробелы времени. Т.е. у тебя есть порядок появления врагов, и разница между ними. “К примеру вылетело 2 противника, через 20 секунд другие появятся, еще через 5 сек появится бос”. Вылетело 2 противника на 5 секунде. Сбросили таймер в 0. 20 секунд – 5 противников других. Сбросили таймер. 5 секунд – босс, сбросили таймер. и т.д. :) И организацию для этого можно сделать интересную) Но это по игре делается. Бывает делаешь, как кажется правильно, а потом в ходе разработки, уже переделываешь на по-другому.

      • Ranex

        Думаю вариант с обнулением – самое оно ;) Вот только как сделать чтобы к примеру на каждой пятой секунде вылетали нужные враги после обнуления не очень понятно :) Если создать несколько функций на срабатывание таймера на 5-ой сек. они же сразу все запустятся :) )

        if(timer==5)
        {
        enemyMuve1();
        enemyMuve2();
        }

        • admin

          ты не совсем понял. “у тебя есть порядок появления врагов” т.е. твоё условие if(timer==5) не отслеживает порядок. Тут тоже можно через массив заделать. 1 партия врагов/промежуток времени от начала игры, 2 партия врагов/промежуток от первой партии врагов, 3 партия врагов/промежуток от второй, 4 – босс/промежуток от третьей партии. Номер партии может быть индексом массива. в нём содержится время и что-то ещё (функция на добавление врагов, куча разных функций, список врагов и т.п.). И при работе таймера сначала работаешь с элементом массива 1. и если время совпадает, то пускаешь 1 партию, обнуляешь таймер, повышаешь индекс массива на +1, и так далее.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">