Приветствую Вас Гость | RSS

Flash. Обо всем по маленьку

Пятница, 27.12.2024, 22:07
Главная » Статьи » Разработка игр » Руководство создания Flash игры AS 3

Руководство по созданию AS3 Flash игры – часть 5: геймплей
После того, как я объяснил механизм создания очков в Руководстве по созданию AS3 Flash игры – часть 4: очки, самое время создавать геймплей.

Идея – создать игру типа Collectabubble, только более отшлифованную и с большим количеством деталей.
Первое, о чем нужно поговорить – вращающаяся панель, видеоклип к которому называется bar  с классом bar.as
Вот код для bar.as
ACTIONSCRIPT:
  1. package {
  2.     import flash.display.Sprite;
  3.     import flash.events.Event;
  4.     public class bar extends Sprite {
  5.         // variables used in this class
  6.         private var point_x:int;
  7.         private var point_y:int;
  8.         // precision is the number of points I am going to calculate
  9.         // on hero's circumference
  10.         private var precision:int = 36;
  11.         // calculating once for all 2*PI
  12.         private var twopi: Number = Math.PI*2;
  13.         // bar rotation speed
  14.         public var rotspeed = 0.2;
  15.         // main function
  16.         public function bar() {
  17.             // checking for collisions at every frame
  18.             this.x = 250;
  19.             this.y = 250;
  20.             addEventListener(Event.ENTER_FRAME, check_collisions);
  21.         }
  22.         private function check_collisions(e:Event) {
  23.             rotation += rotspeed;
  24.             for (var i=0; i<precision; i++) {
  25.                 // checking for collisions between the hero and the bar
  26.                 point_x = as3circle(root).circle_hero.x + 25 * Math.cos(twopi*i/precision);
  27.                 point_y = as3circle(root).circle_hero.y - 25 * Math.sin(twopi*i/precision);
  28.                 if (this.hitTestPoint(point_x, point_y, true)) {
  29.                     // in case of collision, reset the hero, subtract 2 points to the score and slow down the bar
  30.                     as3circle(root).circle_hero.init();
  31.                     as3circle(root).add_score(-2);
  32.                     adjust_speed(-0.1);
  33.                 }
  34.             }
  35.         }
  36.         public function adjust_speed(val) {
  37.             rotspeed+=val;
  38.             if (rotspeed<0.2) {
  39.                 rotspeed = 0.2;
  40.             }
  41.         }
  42.     }
  43. }
Как Вы видите, она аналогична кодировке для coins.as, так как функции их схожи: реагировать на столкновения самой панели и героя.
Единственное отличие вращающейся панели в том, что она…вращается. =)
В строке 14 Вы видите переменную, которая отвечает за скорость вращения, в строке 23 – за обновление.
Как только обнаружено столкновение, я не просто сразу сбрасываю героя (строка 30), но также вычитаю 2 очка со счета (строка 31) и замедляю панель (строка 32).
Как замедлить панель? С помощью добавления функции регулирования скоростей в строках 36-41.
Если панель замедляется, когда герой с ней сталкивается, следовательно, она должна и ускоряться, когда герой подбирает монету.

coins.as

ACTIONSCRIPT:
  1. package {
  2.     import flash.display.Sprite;
  3.     import flash.events.Event;
  4.     public class coin extends Sprite {
  5.         // variables used in this class
  6.         private var dist_x:int;
  7.         private var dist_y:int;
  8.         private var distance:int;
  9.         // main function
  10.         public function coin() {
  11.             // calling place_coin function.
  12.             // this function randomly places the coin in the field
  13.             place_coin();
  14.             // checking for collisions at every frame
  15.             addEventListener(Event.ENTER_FRAME, check_collisions);
  16.         }
  17.         private function check_collisions(e:Event) {
  18.             // determining the distance between the hero and the coin
  19.             // notice how do I refer the hero
  20.             dist_x = x - as3circle(root).circle_hero.x;
  21.             dist_y = y - as3circle(root).circle_hero.y;
  22.             distance = dist_x*dist_x+dist_y*dist_y;
  23.             // 1809 = (hero radius + coin radius)^2
  24.             // this way I don't have to perform a square root to distance
  25.             if (distance <1089) {
  26.                 // if the hero picks up a coin, then move it elsewhere, add one point to the score and speed up the bar
  27.                 as3circle(root).add_score(1);
  28.                 as3circle(root).rotating_bar.adjust_speed(0.2);
  29.                 place_coin();
  30.             }
  31.         }
  32.         private function place_coin() {
  33.             x = Math.floor(Math.random()*400)+50;
  34.             y = Math.floor(Math.random()*400)+50;
  35.         }
  36.     }
  37. }
В 28 строке я увеличиваю скорость вращения панели по мере набора монет.
В конце концов, бесполезно описывать, как панель добавляется в главный класс ascircle.as:
ACTIONSCRIPT:
  1. package {
  2.     import flash.display.Sprite;
  3.     import flash.events.Event;
  4.     public class as3circle extends Sprite {
  5.         public var keyboard_input:keys;
  6.         public var circle_hero = new circle;
  7.         public var your_score = new score;
  8.         public var level_wall = new wall;
  9.         public var rotating_bar = new bar;
  10.         public var my_score = 0;
  11.         public var number_of_coins = 4;
  12.         public function as3circle() {
  13.             for (var i=1; i<=number_of_coins; i++) {
  14.                 var ingame_coin = new coin;
  15.                 addChild(ingame_coin);
  16.             }
  17.             addChild(your_score);
  18.             addChild(circle_hero);
  19.             addChild(rotating_bar);
  20.             keyboard_input = new keys(this);
  21.             addChild(level_wall);
  22.             stage.addEventListener(Event.ENTER_FRAME,on_enter_frame);
  23.         }
  24.         public function on_enter_frame(event:Event) {
  25.             if (keyboard_input.is_left()) {
  26.                 circle_hero.apply_force(-1,0);
  27.             }
  28.             if (keyboard_input.is_right()) {
  29.                 circle_hero.apply_force(1,0);
  30.             }
  31.             if (keyboard_input.is_up()) {
  32.                 circle_hero.apply_force(0,-1);
  33.             }
  34.             if (keyboard_input.is_down()) {
  35.                 circle_hero.apply_force(0,1);
  36.             }
  37.         }
  38.         public function add_score(points) {
  39.             my_score += points;
  40.             if (my_score<0) {
  41.                 my_score = 0;
  42.             }
  43.             your_score.updatescore(my_score);
  44.         }
  45.     }
  46. }
Остальные классы остаются без изменений.

Вот результат…

скачать исходники



Категория: Руководство создания Flash игры AS 3 | Добавил: anti_k (27.02.2010)
Просмотров: 2937 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]