Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.08.2010, 21:33
mamtn вне форума Посмотреть профиль Отправить личное сообщение для mamtn Найти все сообщения от mamtn
  № 1  
Ответить с цитированием
mamtn

Регистрация: Jul 2009
Адрес: C-Петербург
Сообщений: 37
По умолчанию перевод простой игры с AS2 на AS3

Я преподаю детям в компьютерном центре (дополнительное образование детей) курс
"Создание игр". Делали мы с ними простые игры на AS2. Но вот подумала я, что надо переходить на AS3.
Попробовала перевести одну из игр- лабиринт на AS3 - ничего не получается.
Вот фрагмент кода игры на AS2:

Код AS3:
stop();
moveSpeed = 5;// Скорость движения человечка
_root.onEnterFrame = function() {// Внутри этой функции основной код игры 
	//------- Управление клипом man с помощью клавиатуры---------------
	if (Key.isDown(Key.RIGHT)) {
		man._x += moveSpeed;
	} else if (Key.isDown(Key.UP)) {
		man._y -= moveSpeed;
	} else if (Key.isDown(Key.DOWN)) {
		man._y += moveSpeed;
	} else if (Key.isDown(Key.LEFT)) {
		man._x -= moveSpeed;
	}
};
Здесь человечек быстро реагирует на нажатие клавиш

Создала код управления человечком на AS3:
(c помощью подсказок Фрагменты кода)

Код AS3:
stage.addEventListener(KeyboardEvent.KEY_DOWN, fl_PressKeyToMove);
function fl_PressKeyToMove(event:KeyboardEvent):void
{
	switch (event.keyCode)
	{
		case Keyboard.UP:
		{
			man.y -= 5;
			break;
		}
		case Keyboard.DOWN:
		{
			man.y += 5;
			break;
		}
		case Keyboard.LEFT:
		{
			man.x -= 5;
			break;
		}
		case Keyboard.RIGHT:
		{
			man.x += 5;
			break;
		}
	}
}
Здесь человечек "тормозит" - при смене направления движения возникает пауза.
Такое движение не подходит для игры.

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

Вот код, т.е. попытка...
Код AS3:
stage.addEventListener(KeyboardEvent.KEY_DOWN, fl_PressKeyToMove);
 
function fl_PressKeyToMove(event:KeyboardEvent):void
{
	switch (event.keyCode)
	{
		case Keyboard.UP :
	{
	stage.addEventListener(Event.ENTER_FRAME, enterFrameToMoveUp);
		function enterFrameToMoveUp(e:Event):void
		{
					kl.y -=  5;
		}
 
	stage.addEventListener(KeyboardEvent.KEY_UP,removeEnterFrameUp);
	  function removeEnterFrameUp(e:KeyboardEvent):void
	 {
	stage.removeEventListener(Event.ENTER_FRAME, enterFrameToMoveUp);
	}
		break;
	};
	case Keyboard.DOWN :
	{
	stage.addEventListener(Event.ENTER_FRAME, enterFrameToMoveDown);
	 function enterFrameToMoveDown(e:Event):void
	 {
					kl.y +=  5;
	}
	stage.addEventListener(KeyboardEvent.KEY_UP, removeEnterFrameDown);
	function removeEnterFrameDown(e:KeyboardEvent):void
	{
	stage.removeEventListener(Event.ENTER_FRAME, enterFrameToMoveDown);
	}
	 break;
	};
	case Keyboard.LEFT :// Здесь по старому, с паузами
	{
		kl.x -=  5;
	break;
	};
	case Keyboard.RIGHT :
	{
	 kl.x +=  5;
	break;
	}
	}
};
Если интересно, вот адрес сайта, посвященного нашему курсу:
http:www.flashkursmt.narod.ru


Последний раз редактировалось udaaff; 07.08.2010 в 21:47.
Старый 07.08.2010, 21:44
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 2  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Для оформления своего кода надо использовать теги [code][/code]

Старый 07.08.2010, 22:48
gr_crd вне форума Посмотреть профиль Отправить личное сообщение для gr_crd Посетить домашнюю страницу gr_crd Найти все сообщения от gr_crd
  № 3  
Ответить с цитированием
gr_crd
 
Аватар для gr_crd

Регистрация: Mar 2009
Адрес: Kazakhstan, Almaty
Сообщений: 121
я обычно использую такой подход:

Код AS3:
// эти 4 логические переменные укажут, нажата ли сейчас определенная клавиша
// влево, вправо, вверх, вниз
var leftIsDown:Boolean=false;
var rightIsDown:Boolean=false;
var upIsDown:Boolean=false;
var downIsDown:Boolean=false;
 
// три слушателя событий
// когда клавишу нажимают keyDown
// когда клавишу отпускают keyUp
// старый добрый enterFrame
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUp);
stage.addEventListener(Event.ENTER_FRAME, enterFrame);
 
 
// функции keyDown и keyUp установят соответствующие значения логических переменных
// например - нажали клавишу влево - leftIsDown=true; - клавиша влево нажата = true
function keyDown(e:KeyboardEvent):void{
	if(e.keyCode==Keyboard.UP) upIsDown=true;
	if(e.keyCode==Keyboard.DOWN) downIsDown=true;
	if(e.keyCode==Keyboard.LEFT) leftIsDown=true;
	if(e.keyCode==Keyboard.RIGHT) rightIsDown=true;
}
// а когда отпустят leftIsDown=false; - клавиша влево нажата = false
function keyUp(e:KeyboardEvent):void{
	if(e.keyCode==Keyboard.UP) upIsDown=false;
	if(e.keyCode==Keyboard.DOWN) downIsDown=false;
	if(e.keyCode==Keyboard.LEFT) leftIsDown=false;
	if(e.keyCode==Keyboard.RIGHT) rightIsDown=false;
}
 
// а здесь проверяются переменные, если соответствующая клавиша нажата - выполняется действие
// похоже на запись на AS2 - различие: вместо if (Key.isDown(Key.RIGHT)) мы проверяем if(rightIsDown)
function enterFrame(e:Event):void
{
		if(upIsDown)man.y -= 5;
		if(downIsDown)man.y += 5;
		if(leftIsDown)man.x -= 5;
		if(rightIsDown)man.x += 5;
}
__________________
заткнись и делай


Последний раз редактировалось gr_crd; 07.08.2010 в 22:52. Причина: опечатка в коде
Старый 07.08.2010, 23:29
VVall вне форума Посмотреть профиль Отправить личное сообщение для VVall Найти все сообщения от VVall
  № 4  
Ответить с цитированием
VVall

Регистрация: Feb 2009
Сообщений: 1,195
"Тормозит" - это действие автоповтора клавиатуры. По нажатию клавиши приходит событие нажатия, и через паузу оно начинает повторяться с одинаковыми, более короткими паузами. Правильное решение этой проблемы указано в предыдущем сообщении.

Старый 08.08.2010, 16:54
mamtn вне форума Посмотреть профиль Отправить личное сообщение для mamtn Найти все сообщения от mamtn
  № 5  
Ответить с цитированием
mamtn

Регистрация: Jul 2009
Адрес: C-Петербург
Сообщений: 37
По умолчанию cпасибо за ответ!

Всем спасибо за ответ, особенно gr cdr!
Все получилось, продолжаю переводить игру с AS2 на AS3

Создать новую тему Ответ Часовой пояс GMT +4, время: 15:22.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 15:22.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.