СТАТЕЙКИ.ORG.UA
электронный каталог статей

Советы начинающему флеш-программисту

комментариев: 0 / добавить комментарий

В этой статье я хотел бы дать немного советов начинающему программисту на флеше. Прежде всего, для начала работы нужно будет выучить Action Script 3.0. С этим самым скриптом и создается анимация на флеше. Так же на action script создаются и флеш баннеры, сайты, игры, анимация. Посмотрите пример флеш шапки на любом сайте. Вот такую шапочку можно получить, лишь написав  5 строк на AC3! Больше уверенности. Главное не останавливаться на полпути!

И так, приступим к делу. Для работы вам понадобится редактор Adobe Flash CS3. Давайте попробуем выполнить  один урок игры «змейка».

Начало.
Подготовим наш ролик для работы.

1. Создайте AS3 документ. Сохраните его под названием snakeAS3.Fla.

2. В основном кадре вставьте два текстовых поля, одно статическое (StaticText), второе динамическое с размером 20. В статическом напишите «Current Score». (Я в качестве стиля текста взял Brush Script Std), а динамическому задайте instance current_score. Расположите статический текст по координатам x=480, y=170, а динамическое x=480, y=220.

3. Создайте новый MovieClip (Ctrl+F8). Назовите его Block. Поставьте галочку в поле «Экспортировать для ActionScript» (см. Рис 1.). Затем войдите в созданный MovieClip и нарисуйте в нем квадрат с размерами 20x20, рамку нашего квадрата сделайте черного цвета, а заливку белым и задайте ему координаты x=-10, y=-10.
Вставьте новый кадр в том же MovieClip и создайте такой же квадрат с такими же координатами, только в отличии от первого, залейте его черным цветом. Создайте третий кадр, в нем сделайте все то что делали с предыдущими кадрами кроме заливки. (Залить можете любым цветом, в моем случае - это пурпурный цвет).

4. Выйдите в основной timeline, и создайте три новых MovieClip и назовите их Score, Resume, StartBtn. Это будут кнопки для показа очков, паузы и начало игры. Напишите в них соответствующие действию надписи. Только в MovieClip Score вставьте динамическое текстовое поле с instance view_score.

5. Теперь создайте файл класса ActionScript и назовите его snakeAS3. As. Положите его в ту же папку где и наш файл snakeAS3. Fla (Сходства имен не обязательно я так делаю для удобства). В файле snakeAS3. Fla пропишем наш новый класс документа.

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

CODE

package {

//Импортируем классы (У меня злая привычка я импортирую все сразу у определенного класса, вы можете импортировать то что вам надо)
import flash. Display. *;
import flash. Events. *;
import flash. Ui. *;
import flash. Utils. *;
import fl. Controls. *;
import flash. Text. *;

public class snakeAS3 extends Sprite {

//Создаем двумерный массив для создания мира. (Почему именно двумерный? Потому, что изменив всего то один массив, вы можете полностью изменить мир по которому бегает змейка)
private var world:Array=[[1, 1, 1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]];
//Массивы в которые мы будем сохранять координаты частей тела змейки
private var pos_x:Array=[];
private var pos_y:Array=[];
//Контейнеры в которых будут наши мувики (каждому элементу отдельный контейнер, так удобнее)
private var container_world:MovieClip;
private var container_snake:MovieClip;
private var container_snake_body:MovieClip;
private var container_bonus:MovieClip;
//Длина змейки (по умолчанию в начале игры их 3-и)
private var snake_count:Number
//Булевое значение существует ли бонус
private var vis:Boolean=false;
//Наш интервал который будет обновлять действие нашей змейки
private var interval:uint;
//Очки
private var score:Number;
//Булевое значение паузы
private var pauseStat:Boolean;

//Конструктор
public function snakeAS3() {
startBtn ();
}
//Кнопка старт
private function startBtn () {
//Добавляем и размещаем нашу кнопку начало игры и вешаем на нее слушатель
var btn:StartBtn=new StartBtn;
btn. X=300;
btn. Y=200;
addChild (btn);
btn. AddEventListener (MouseEvent. CLICK, initGameHandler);
}
//Функция паузы
private function pauseHandler () {
//Если была пауза стираем интервал и отображаем мувик с информацией о паузе
clearInterval (interval);
var res:Resume=new Resume;
res. X=300;
res. Y=200;
res. Name="Resume";
addChild (res);
}
//Функция возвращения в игру после паузы
private function resumeHandler () {
//Ищем мувик с именем Resume, а затем удаляем его
var target:MovieClip=getChildByName ("Resume");
removeChild (target);
//Запускаем интервал заново
interval=setInterval (refreshHandler, speed);
}
//Создание входных данных игры
private function initGameHandler (e:Event) {
//Удаляем мувик который предлагает нам войти в игру
removeChild (e. Target);
//Назначаем входные данные для игры
pauseStat=false;
snake_count=3;
speed=100;
score=0;
current_score. Text=score;
container_world=new MovieClip;
container_snake=new MovieClip;
container_snake_body=new MovieClip;
container_bonus=new MovieClip;
//Запускаем функции для создания мира и отображения нашей змейки
showWorld ();
snakeShow ();
addChild (container_bonus);
interval=setInterval (refreshHandler, speed);
}
//Метод обновления функций
private function refreshHandler () {
moveSnake ();
bonusShow ();
}
//Создаем плиточный мир
private function showWorld () {
addChild (container_world);
for (var i=0; i < World. length; I++) {
for (var j=0; j < World[i]. length; J++) {
var world_tail:Block=new Block;
world_tail. X=10 + i * 20;
world_tail. Y=10 + j * 20;
world_tail. GotoAndStop (world[i][j] + 1);
container_world. AddChild (world_tail);
}
}
}
//Показываем нашу змейку
private function snakeShow () {
//Создаем голову змейки
var head:Block=new Block;
head. X=210;
head. Y=190;
head. GotoAndStop (2);
addChild (container_snake);
container_snake. AddChild (head);
addChild (container_snake_body);

//Создаем оставшееся тело змейки
for (var i=0; i < Snake_count; i++) {
var body:Block=new Block;
body. X=head. x;
body. Y=head. y + i * 20;
body. GotoAndStop (2);
container_snake_body. AddChild (body);
}
}
//Движение производим методом записи предыдущих координат части змейки в массив
private function moveSnake () {
//Берем первый элемент контейнера (Это голова)
var head=container_snake. GetChildAt (0);
//Пишем в массивы координаты
pos_x[0]=head. X;
pos_y[0]=head. Y;
//Задаем движение змейке
head. X+= 20 * Math. Sin (head. Rotation * Math. PI / 180);
head. Y-= 20 * Math. Cos (head. Rotation * Math. PI / 180);
//Назначаем координатам тела значения массива
for (var i=0; i < Snake_count; i++) {
container_snake_body. GetChildAt (i). X=pos_x[i];
container_snake_body. GetChildAt (i). Y=pos_y[i];
}
//Вписываем в следующие массивы действующие координаты тела
for (var j=0; j < Snake_count; j++) {
pos_x[j + 1]=container_snake_body. GetChildAt (j). X;
pos_y[j + 1]=container_snake_body. GetChildAt (j). Y;
}
//Фокусируемся на ролике и вешаем на него слушатель
stage. Focus=this;
addEventListener (KeyboardEvent. KEY_DOWN, keyControl);
}
//Функция управление змейкой посредством клавиатуры
private function keyControl (e:KeyboardEvent) {
var body=container_snake. GetChildAt (0);
//Ниже я думаю все понятно меня угол в соотвествии с нажатой кнопкой
if (e. KeyCode == Keyboard. LEFT) {
body. Rotation=270;
}
if (e. KeyCode == Keyboard. RIGHT) {
body. Rotation=90;
}
if (e. KeyCode == Keyboard. DOWN) {
body. Rotation=180;
}
if (e. KeyCode == Keyboard. UP) {
body. Rotation=0;
}
if (e. KeyCode == Keyboard. SHIFT) {
//Если пауза не нажата то выполняем функцию паузы и переводим состояние паузы в true
if (! PauseStat) {
pauseHandler ();
pauseStat=true;
} else {
//Если же пауза уже нажата то переходим в метод возврата к игре и меняем состояние паузы false
resumeHandler ();
pauseStat=false;
}
}
}
//Функция генерации бонуса
private function bonusShow () {
//Если бонуса нету то создаем его, размещаем его в случайных координатах и меняем состояние в true (что означает что бонус существует)
if (vis == false) {
var bonus:Block=new Block;
bonus. X=Math. ceil (Math. Random () * 18) * 20 + 10;
bonus. Y=Math. ceil (Math. Random () * 18) * 20 + 10;
bonus. GotoAndStop (3);
container_bonus. AddChild (bonus);
vis=true;
}
hitDetect ();
}
//Следим было ли столкновение с частью тела, стеной или бонусом
private function hitDetect () {
//Ну здесь и так все ясно, проходим циклом и проверяем было ли столкновение, если столкновение с бонусом то плюс очко если с хвостом то проигрыш
var bonus_pic:MovieClip=container_bonus. GetChildAt (0)  as  MovieClip;
var head=container_snake. GetChildAt (0);
for (var i=0; i < Snake_count; i++) {
var body=container_snake_body. GetChildAt (i);
if (bonus_pic. HitTestPoint (head. X, head.y,true) || bonus_pic. HitTestPoint (body. X, body.y)) {
score++;
current_score. Text=score;
snake_count++;
bodyAdder ();
container_bonus. RemoveChildAt (0);
vis=false;
}
if (head. HitTestPoint (body. X, body.y)) {

gameOver ();
}
}
//Ну а за это простите, такой лентяй я стал в последнее время))) (Если выходит за границы массива проиграл)
if (head. x > = 380 || head. x < = 20 || head. y > = 380 || head. y < = 20) {
gameOver ();
}
}
//Добавляем часть тела, при съедении бонуса
private function bodyAdder () {
var body:Block=new Block;
body. GotoAndStop (2);
container_snake_body. AddChild (body);
}
//Если проиграл выводим мувик который после проигрыша отображает: сколько очков мы набрали
private function scoreBarShow () {
var scoreBord:Score=new Score;
scoreBord. X=300;
scoreBord. Y=200;
addChild (scoreBord);
scoreBord. AddEventListener (MouseEvent. CLICK, scoreClickHandler);
scoreBord. View_score. text=score;
}
//Удаляем табло с результатом и выводим табло начало игры
private function scoreClickHandler (e:Event) {
removeChild (e. Target);
startBtn ();
}
//Конец игры
private function gameOver () {
//Стираем массивы
pos_x=[];
pos_y=[];
//Удаляем контейнеры
removeChild (container_snake);
removeChild (container_snake_body);
removeChild (container_bonus);
//Стираем интервал
clearInterval (interval);
//Удаляем слушателя
removeEventListener (KeyboardEvent. KEY_DOWN, keyControl);
//Убираем бонус
vis=false;
//Выводим табло с результатом
scoreBarShow ();
}
}

}

---

7. Ctrl+ENTER.

Вот впринципе и все. =) Главное учите as3, и все у вас получится =) Всего доброго! И до новых встреч!

УРОК СОЗДАНИЯ ИГРЫ ЗМЕЙКА ВЗЯЛ С демиарт.ру!

автор: Я
комментариев: 0 | просмотров: 281 | 18/01/2010
Читайте также:
Создать сайт на системе uCoz
Сегодня многие мечтают иметь собственный сайт, для разного рода деятел ...
Навыки для создания веб-сайта
Давайте выясним, какие навыки, знания и умения нам в будущем понадобят ...
Правила создания идеального сайта
Обычно начинающие вебмастера при создании своего первого проекта изуча ...
Комментарии:
Администрация каталога не несет ответственности за информацию, размещенную посетителями сайта. Сообщения, оставленные на сайте, являются исключительно личным мнением их авторов, и могут не совпадать с мнением администрации каталога.
комментариев нет

ты можешь быть первым
* - поля, помеченные звездочкой, обязательны к заполнению.
Ваше имя*: (max 64 символа)
E-mail: (max 64 символа)
Комментарий*:
без HTML (min 20, max 1000 символов)


Ссылки на статью «Советы начинающему флеш-программисту»:
URL
http://www.stateyki.org.ua/articles/sovety-nachinayuschemu-flesh-programmistu/
Ссылка
<a href="http://www.stateyki.org.ua/articles/sovety-nachinayuschemu-flesh-programmistu/">Советы начинающему флеш-программисту</a>
BBCode
[url=http://www.stateyki.org.ua/articles/sovety-nachinayuschemu-flesh-programmistu/]Советы начинающему флеш-программисту[/url]


Інтернет реклама УБМ
Наши партнеры
Покер онлайн
Биржи
etxt.ru
 

 

Інтернет реклама УБМ


Інтернет реклама УБМ