Это первая часть большой статьи, которая расскажет обо всем процессе создания Flash игры, включая управление вводом, простую физику, обработку коллизий и многое другое. Это довольно длинное руководство, поэтому я решил разбить его на части. Все началось с дидактического пособия по созданию flash игры. Во первых, меня вдохновила Ball Revamped серия, но я добавил много новых возможностей, это более чем...
Давайте приступим к созданию главного действующего лица.
Герой.
Ок,я собираюсь сделать Болл, нашим героем. Итак, в данный момент наш герой будет красным кружком с желтым кружком внутри. Это выглядит хорошо. Думаю вам стоит распечатать и повесить его в спальне .
Для начала, давайте подумаем о взаимодействии нас с героем. В принципе, я хочу, чтобы герой двигался по нажатию клавиш. Он будет двигаться влево, если я нажимаю левую клавишу, вправо, если правую и тд. Итак, первый код героя будет:
onClipEvent (enterFrame) { if (Key.isDown(Key.LEFT)) { _x--; } if (Key.isDown(Key.RIGHT)) { _x++; if (Key.isDown(Key.UP)) { _y--; if (Key.isDown(Key.DOWN)) { _y++; }
Просто, не так ли? Обработчик события кадра просто проверяет, если клавиша нажата и инкрементирует или декрементирует x или y позицию в сообветствии с нажатой клавишей. Кликните на Flash и понажимайте стрелки для контроля над героем, нажмите Reset для сброса.
Энергия.
Отлично, вы заметили, что наш герой двигается с фиксированной скоростью? Я хочу установить переменною для хранения скорости, так чтобы если бы я захотел, чтобы герой двигался быстрее или медленнее мне надо было бы изменить всего одно значение. Это очень важно, так как я планирую разработать различные уровни, и скорость героя будет меняться в зависимости от уровня. Мне надо создать переменную "power", для того, чтобы управлять скоростью перемещения героя.
onClipEvent (load) { power = 3; } onClipEvent (enterFrame) { if (Key.isDown(Key.LEFT)) { _x -= power; } if (Key.isDown(Key.RIGHT)) { _x += power; } if (Key.isDown(Key.UP)) { _y -= power; } if (Key.isDown(Key.DOWN)) { _y += power; } }
Теперь вы можете изменять скорость вашего героя, только корректируя переменную "power". Чем выше значение power, тем быстрее герой двигается.
Скорость.
Это немного лучше чем раньше, но наш герой движется с одинаковой скоростью, и всегда стартует без движения. Теперь мне нужно чтото вроде ускорения и в конечном счете какаято начальная скорость.
Заметьте я уменьшил power из предыдущего примера - было 3, теперь 0.2. Теперь power прибавляется к скорости, с этим надо играть осторожно, иначе наш герой будет двигаться слишком быстро. Начальные значения yspeed и xspeed инициализируются 0, но я могу изменять их, чтобы придать герою движения. Теперь чем больше вы давите на клавишу, тем больше скорость вашего героя и тем труднее ему изменить направление.
Отлично.
Трение.
Теперь я хочу задействовать трение, потому что я не хочу чтобы герой двигался вечно, если я не нажимаю клавиш. Я хочу чтобы герой замедлял движение, если клавиши не нажаты.
Итак, я задействовал коэфициент трения меньше 1, чтобы воздействовать на скорость героя. Теперь, когда я нажму на клавишу, герой начнет движение, но когда я отпущу клавишу, герой постепенно остановится. Насколько медленно? Чем выше коэфициент трения (всегда меньше 1, запомните), тем медленней наш герой будет терять скорость.
Гравитация.
Я говорил, что я хочу сделать чтото похожее на Ball Revamped, поэтому мне нужна гравитация. Герой будет падать под воздействием силы тяжести.
Ветер влияет на сторону движения, положительно влияет на движение вправо и отрицательно влево. Поиграйте со всеми переменными и найдите идеальное сочетание реализма и играбельности.
Поворот.
Теперь последнее прикосновение. Так же как в Ball Revamped, я хочу чтобы герой вращался по часовой стрелке при движении вправо, а против часовой при движении влево
onClipEvent (load) { power = 0.65; yspeed = 0; xspeed = 0; friction = 0.99; gravity = 0.1; thrust = 0.75; wind = 0.05; } onClipEvent (enterFrame) { if (Key.isDown(Key.LEFT)) { xspeed -= power; } if (Key.isDown(Key.RIGHT)) { xspeed += power; } if (Key.isDown(Key.UP)) { yspeed -= power*thrust; } if (Key.isDown(Key.DOWN)) { yspeed += power*thrust; } xspeed += wind; xspeed *= friction; yspeed += gravity; _y += yspeed; _x += xspeed; _rotation += xspeed; } Это просто я просто приравнял rotation героя его xspeed.