Меню сайта
Категории раздела
Мои статьи [0]
Игры [2]
Уроки по созданию различных игр.
Анимация [1]
Уроки по созданию анимации
ActionScript(программирование) [14]
Уроки с использованием as
Наш опрос
Быстро ли загружается сайт?
Всего ответов: 93
Статистика


Онлайн всего: 1
Гостей: 1
Пользователей: 0

Главная » Статьи » Action Script 2.0 » Игры

Начало создания flash-игры. Управление героем, создание простой физики.

Герой.

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

Для начала, давайте подумаем о взаимодействии нас с героем. В принципе, я хочу, чтобы герой двигался по нажатию клавиш. Он будет двигаться влево, если я нажимаю левую клавишу, вправо, если правую и тд.
Итак, первый код героя будет:


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, тем быстрее герой двигается.

Скорость.

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

onClipEvent (load) {
power = 0.2;
yspeed = 0;
xspeed = 0;
}
onClipEvent (enterFrame) {
if (Key.isDown(Key.LEFT)) {
xspeed -= power;
}
if (Key.isDown(Key.RIGHT)) {
xspeed += power;
}
if (Key.isDown(Key.UP)) {
yspeed -= power;
}
if (Key.isDown(Key.DOWN)) {
yspeed += power;
}
_y += yspeed;
_x += xspeed;
}


Заметьте я уменьшил power из предыдущего примера - было 3, теперь 0.2. Теперь power прибавляется к скорости, с этим надо играть осторожно, иначе наш герой будет двигаться слишком быстро. Начальные значения yspeed и xspeed инициализируются 0, но я могу изменять их, чтобы придать герою движения.
Теперь чем больше вы давите на клавишу, тем больше скорость вашего героя и тем труднее ему изменить направление.

Отлично.

 

Трение.

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

onClipEvent (enterFrame) {
if (Key.isDown(Key.LEFT)) {
xspeed -= power;
}
if (Key.isDown(Key.RIGHT)) {
xspeed += power;
}
if (Key.isDown(Key.UP)) {
yspeed -= power;
}
if (Key.isDown(Key.DOWN)) {
yspeed += power;
}
xspeed *= friction;
yspeed *= friction;
_y += yspeed;
_x += xspeed;
}


Итак, я задействовал коэфициент трения меньше 1, чтобы воздействовать на скорость героя. Теперь, когда я нажму на клавишу, герой начнет движение, но когда я отпущу клавишу, герой постепенно остановится. Насколько медленно? Чем выше коэфициент трения (всегда меньше 1, запомните), тем медленней наш герой будет терять скорость.

Гравитация.

Я говорил, что я хочу сделать чтото похожее на Ball Revamped, поэтому мне нужна гравитация. Герой будет падать под воздействием силы тяжести.

onClipEvent (load) {
power = 0.3;
yspeed = 0;
xspeed = 0;
friction = 0.95;
gravity = 0.1
}

onClipEvent (enterFrame) {
if (Key.isDown(Key.LEFT)) {
xspeed -= power;
}
if (Key.isDown(Key.RIGHT)) {
xspeed += power;
}
if (Key.isDown(Key.UP)) {
yspeed -= power;
}
if (Key.isDown(Key.DOWN)) {
yspeed += power;
}
xspeed *= friction;
yspeed += gravity;
_y += yspeed;
_x += xspeed;
}

 

Тяга.

Если есть сила тяжести, нужна и тяга. Я хочу более сложное перемещение вверх, так как герой живет в мире, где существует сила тяжести.

onClipEvent (load) {
power = 0.3;
yspeed = 0;
xspeed = 0;
friction = 0.95;
gravity = 0.1;
thrust = 0.75;
}

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 *= friction;
yspeed += gravity;
_y += yspeed;
_x += xspeed;
}


Как вы видите коэфициент тяги "thrust" (меньше чем 1), воздействует на движение вверх, ослабляя его и делая более сложным.

Ветер.

Ну и что теперь? Конечно ветер! Я хочу чтобы эта сцена выглядела ветренной, жизнь героев сложна, так то.

onClipEvent (load) {
power = 0.3;
yspeed = 0;
xspeed = 0;
friction = 0.95;
gravity = 0.1;
thrust = 0.75;
wind = 0.09;
}
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;
}


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

Поворот.

Теперь последнее прикосновение. Так же как в 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.


Скачать исходники вы можете по этой ссылке.br /> }

Категория: Игры | Добавил: Администратор (17.04.2012)
Просмотров: 4844 | Комментарии: 2 | Теги: физика flash, создание flash-игры, управление героем | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
7flash.ucoz.ru. 2009-2012.
Сайт управляется системой uCoz