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

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

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

Руководство по созданию AS3 Flash игры – часть 4: очки
В Руководство по созданию AS3 Flash игры – часть 3: стены я рассказал о некоторых объектах, которые которые уничтожают шар, теперь я расскажу как создать функцию набора очков, когда собираются монеты.

Как обычно, я создаю новый клип, называемый score с классом score.as
Вот как выглядит score.as:
ACTIONSCRIPT:
  1. package {
  2.     import flash.display.Sprite;
  3.     // look! you need text.TextField in order to make it work
  4.     import flash.text.TextField;
  5.     public class score extends Sprite {
  6.         public function score() {
  7.             // this.scoretext.text = "0" works
  8.             // this.scoretext.text = 0; does not work
  9.             this.scoretext.text = String(0);
  10.         }
  11.         public function updatescore(score) {
  12.             // updating the score
  13.             this.scoretext.text = String(score);
  14.         }
  15.     }
  16. }

Посмотрите на строку 4, необходимо импортировать text.TextField, для того, чтобы получить рабочие текстовые поля (это свойство было у AS2) в 9 строке Вы увидите, что необходимо конвертировать  несколько строк, прежде чем выводить данные в текстовое поле (в AS2 делать этого было не нужно).

Кроме данной детали, в классе score нет больше ничего примечательного, но более интересно, как другие классы вызывают его:

Вот новый coin.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
  27.                 as3circle(root).add_score(1);
  28.                 place_coin();
  29.             }
  30.         }
  31.         private function place_coin() {
  32.             x = Math.floor(Math.random()*400)+50;
  33.             y = Math.floor(Math.random()*300)+50;
  34.         }
  35.     }
  36. }

Посмотрите на 27 строку, где я вызываю функцию add_score, добавляющую одно очко за каждую собранную монету. Где функция add_score?
Она в главном классе as3circle.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 my_score = 0;
  10.         public var number_of_coins = 4;
  11.         public function as3circle() {
  12.             for (var i=1; i<=number_of_coins; i++) {
  13.                 var ingame_coin = new coin;
  14.                 addChild(ingame_coin);
  15.             }
  16.             addChild(your_score);
  17.             addChild(circle_hero);
  18.             var keyboard_sprite = new Sprite();
  19.             keyboard_input = new keys(this);
  20.             addChild(level_wall);
  21.             stage.addEventListener(Event.ENTER_FRAME,on_enter_frame);
  22.         }
  23.         public function on_enter_frame(event:Event) {
  24.             if (keyboard_input.is_left()) {
  25.                 circle_hero.apply_force(-1,0);
  26.             }
  27.             if (keyboard_input.is_right()) {
  28.                 circle_hero.apply_force(1,0);
  29.             }
  30.             if (keyboard_input.is_up()) {
  31.                 circle_hero.apply_force(0,-1);
  32.             }
  33.             if (keyboard_input.is_down()) {
  34.                 circle_hero.apply_force(0,1);
  35.             }
  36.         }
  37.         public function add_score(points) {
  38.             my_score += points;
  39.             your_score.updatescore(my_score);
  40.         }
  41.     }
  42. }


Сперва, в строке 7 я создаю переменную score, называемую your_score, добавляю в ступень 16 строки, и, таким образом, функция, добавляющая очки, находится в строках 37-40.

Когда я использую клип score только для того, чтобы показывать очки, тогда я сохраняю это в главном классе, благодаря переменной my_score, заданной в строке 9.

После этого, add_score обновляет очки в 38 строке и вызывает функцию, показывая обновленные очки на экране в строке 39.

Маленькое уточнение: coins.as вызывает функцию в as3circle.as, которая обновляет очки и вызывает score.as, записывающую обновления очков.

Остальные классы остаются те же, и вот результат:

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

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