Показать сообщение отдельно
Старый 12.09.2010, 10:39
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;
}
 
// а здесь проверяются переменные, если соответствующая клавиша нажата - выполняется действие
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;
}
Эти логические переменные по сути и есть флаги.
Как пользователь нажал кнопку - ставим - нажато.
Как только отпустил - не нажато.
И при EnterFrame проверяем переменную - если нажато - движение.
И не будет никаких "заиканий", потомучто они возникают только если вешать движение на событие клавиатуры. В вашем коде причина именно в этом, т.к. он не может грузить процессор на 100+%
__________________
заткнись и делай