Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование игр на Flash/Flex Прежде чем создавать игры, немного подучим язык


Итак, приступим!

Урок 1. Пока еще не игра. Простой анимационный ролик: местное время в нескольких городах мира.  На этом примере научимся:

 

  1. Создавать пакеты;
  2. Работать с таймером, что совершенно необходимо для разработчика игр;
  3. Работать со списком видимости
  4. и еще нескольким полезным для разработчика игр приемам.

 Откройте прикрепленный файл, чтобы посмотреть что, примерно должно у Вас получиться.

Для всех наших проектов создайте отдельную папку, назовите ее, например, myGames. Внутри этой папки создайте еще одну: myGraphics.

Если Вы работаете с программой Adobe Flash, то отметьте первый (и единственный) ключевой кадр и откройте окно программного кода, нажав на клавишу F9.

Введите две строки:

 

import myGraphics.W_time;

new W_time(this);

Это весь текст, который нужно будет ввести в этой программе. Остальная часть кода будет в отдельном модуле, текст которого не зависит от того, работаете ли Вы во Flash, или во Flex.

Создайте модуль и W_time.as, в котором напишите следующий код:

 

package myGraphics{

import flash.display.Sprite;

import flash.utils.Timer;

import flash.events.TimerEvent;

import flash.text.TextField;

import flash.text.TextFormat;

import flash.text.TextFieldAutoSize;

public class W_time extends Sprite {

private var __parent:Object;

private var _cities:Array = ["Москва","Токио","Лондон","Париж","Нью-Йорк","Лос-Анжелес"];

private var _coTime:Array = [0,6,-3,-2,-8,-11];

private var _dayNm:Array = ["Вс","Пн","Вт","Ср","Чт","Пт","Сб"];

private var _moNames:Array = ["Янв","Фев","Мар","Апр","Мая","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"];

private var _dTimes:Array = new Array();

public var _xx = 40;

public var _yy = 20;

public const D_xx = 40;

private var _begSpr:int;

private var textFormat:TextFormat = new TextFormat("Arial",20,0,true);

private var _timer:Timer = new Timer(1000);

private var _spr:Sprite = new Sprite();

public function W_time(pa:Object) {

__parent = pa;

__parent.addChild(this);

_begSpr = _yy - 4;

for (var i:int=1; i<_coTime.length; i++) {

_coTime[i]*=3600000;

}

with (_spr) {

graphics.beginFill(0xFADDDC);

graphics.drawRect(0,_begSpr,550,D_xx-2);

graphics.endFill();

}

addChild(_spr);

_begSpr = y+D_xx-2;

for (i = 0; i < _cities.length; i++) {

var city:TextField = new TextField();

var dField:TextField = new TextField();

city.autoSize = dField.autoSize = TextFieldAutoSize.LEFT;

city.text = _cities[i];

city.setTextFormat(textFormat);

city.x = _xx;

dField.x = _xx+180;

city.y = dField.y = _yy;

city.height = 30;

addChild(city);

addChild(dField);

dField.text = "Секундочку!";

_dTimes[i] = dField;

_yy+= city.height+10;

}

_timer.addEventListener("timer",tick);

_timer.start();

}

private function correctStr(nstr:int):String {

if (nstr > 9) {

return String(nstr);

} else {

return "0" + String(nstr);

}

}

private function fDate(cHour:Number):String {

var dat:Date = new Date(cHour);

with (dat) {

var strDate:String = _dayNm[day] +","+date+" "+_moNames[month]+"::"+correctStr(hours)+"."+correctStr(minutes)+"."+correctStr(seconds);

}

return strDate;

}

private function tick(e:TimerEvent):void {

var ldate:Date = new Date();

var cHour = ldate.time;

for (var i:int=0; i<_coTime.length; i++) {

var str:Object = _dTimes[i];

str.text = fDate(cHour + _coTime[i]);

str.setTextFormat(textFormat);

}

if (_spr.y < (str.y - str.height)) {

_spr.y +=_spr.height;

} else {

_spr.y = _begSpr-D_xx+2;

}

}

}

}

 

Протестируйте полученный ролик, используя сочетание клавиш Ctrl+Enter.

В следующий раз я расскажу, как сделать то же самое на Adobe Flex Builder. Вы увидите, что код останется тем же!

Ну и, конечно, для лучшего понимания кода, мы его разберем, напишем комментарии. На этом же примере рассмотрим, что такое константы и переменные, как организуются циклы, как проверяются условия.

А первую игру, надеюсь, создадим уже примерно через два выпуска.

Хотел прикрепить файл с результатом данного упражнения, но оказывается  это невозможно. Задавайте вопросы по почте.

 



В избранное