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

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

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

блогер
Регистрация: Apr 2009
Адрес: НиНо
Сообщений: 185
Записей в блоге: 12
Attention Непонятные особенности KeyboardEvent

Во всех нормальных флэш играх одновременное нажатие кнопки вверх и кнопки влево обрабатывается нормально. Но у меня увы это не выходит.. Буду премного благодарен, если кто-нибудь мне объяснит причину..

Как я делаю:
Код AS3:
package gerich {
	import flash.display.MovieClip;
	import flash.events.*;
	import flash.ui.Keyboard;
 
	dynamic public class Spaceship extends MovieClip {
		var speed:Number=1;
 
		public function Spaceship() {
			rotation=0;
			stage.addEventListener(KeyboardEvent.KEY_DOWN,   KeyDown);
			addEventListener(Event.ENTER_FRAME,        Update);
 
		}
 
		public function Update(e : Event):void {
			y-=Math.cos(rotation/180*3.14)*speed;
			x+=Math.sin(rotation/180*3.14)*speed;
 
		} 
 
                //по идее должны отлавливаться все нажатия по очереди
		public function KeyDown(e : KeyboardEvent):void {
			if(e.keyCode == Keyboard.LEFT){trace("left"); rotation-=1;}
			if(e.keyCode == Keyboard.RIGHT){trace("right"); rotation+=1;}
			if(e.keyCode == Keyboard.UP){trace("up"); speed+=0.05;}
			if(e.keyCode == Keyboard.DOWN) 
			{
				trace("down");
				speed-=0.05;
				if(speed<0) speed=0;
			}
 
		}
 
	}
}
при нажатии кнопки вправо на консоль идёт последовательность:
Код:
right
right
right
right
right
...
потом, не отпуская зажимаю вверх, и кнопка вправо начинает игнорироваться:
Код:
right
right              //была нажата вправо
right
up                 //нажал вверх
up
up
up
up
up
..
а хотелось бы, чтобы я с примерно равными пеиодами времени получал бы и вверх и вправо. как-то так:
Код:
up
right
right
up
right
up
up
right
..
Объясните, если знаете.. спасибо

Старый 24.04.2009, 13:15
cleptoman вне форума Посмотреть профиль Отправить личное сообщение для cleptoman Найти все сообщения от cleptoman
  № 2  
Ответить с цитированием
cleptoman
 
Аватар для cleptoman

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
попробуйте опереться на флаги..на кейдаун флаг = тру, на кейап - фэлс
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

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

Регистрация: May 2006
Адрес: Москва
Сообщений: 2,978
Отправить сообщение для DarkLight с помощью ICQ Отправить сообщение для DarkLight с помощью Skype™
Это особенности обработки клавиатурных событий.
И аккуратнее со множественными нажатиями стрелок, существуют комбинации, которые не работают. Было где-то хорошее исследование на эту тему, выяснилось что на разных компьютерах могут не работать разные комбинации. С этим продолжают сталкиваться:
http://board.flashkit.com/board/showthread.php?t=793134
__________________
4am is time to rock

Старый 24.04.2009, 22:09
Герыч вне форума Посмотреть профиль Отправить личное сообщение для Герыч Найти все сообщения от Герыч
  № 4  
Ответить с цитированием
Герыч
 
Аватар для Герыч

блогер
Регистрация: Apr 2009
Адрес: НиНо
Сообщений: 185
Записей в блоге: 12
Цитата:
Сообщение от cleptoman Посмотреть сообщение
попробуйте опереться на флаги..на кейдаун флаг = тру, на кейап - фэлс
как я понимаю, вы имеете ввиду Key.isDown() ? поискал это в AS3-такого нет. Если есть способ использовать классы младших версий в 3-ей, скажите, пожалуйста

Добавлено через 15 минут
Вот нашёл нечто похожее на Key в AS2 (KeyObject):
Код AS3:
package com.senocular.utils {
 
	import flash.display.Stage;
	import flash.events.KeyboardEvent;
	import flash.ui.Keyboard;
	import flash.utils.Proxy;
	import flash.utils.flash_proxy;
 
	/**
	 * The KeyObject class recreates functionality of
	 * Key.isDown of ActionScript 1 and 2
	 *
	 * Usage:
	 * var key:KeyObject = new KeyObject(stage);
	 * if (key.isDown(key.LEFT)) { ... }
	 */
	dynamic public class KeyObject extends Proxy {
 
		private static var stage:Stage;
		private static var keysDown:Object;
 
		public function KeyObject(stage:Stage) {
			construct(stage);
		}
 
		public function construct(stage:Stage):void {
			KeyObject.stage = stage;
			keysDown = new Object();
			stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
			stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
		}
 
		flash_proxy override function getProperty(name:*):* {
			return (name in Keyboard) ? Keyboard[name] : -1;
		}
 
		public function isDown(keyCode:uint):Boolean {
			return Boolean(keyCode in keysDown);
		}
 
		public function deconstruct():void {
			stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
			stage.removeEventListener(KeyboardEvent.KEY_UP, keyReleased);
			keysDown = new Object();
			KeyObject.stage = null;
		}
 
		private function keyPressed(evt:KeyboardEvent):void {
			keysDown[evt.keyCode] = true;
		}
 
		private function keyReleased(evt:KeyboardEvent):void {
			delete keysDown[evt.keyCode];
		}
	}
}

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

Регистрация: May 2006
Адрес: Москва
Сообщений: 2,978
Отправить сообщение для DarkLight с помощью ICQ Отправить сообщение для DarkLight с помощью Skype™
Цитата:
поискал это в AS3-такого нет.
Это такая проблема? Вешаем на stage например обработчик keyDown/keyUp, по нажатию добавляем в массив код нажатой клавиши, по отжатию убираем, и Key.isDown реализуем как keys.indexOf(код) != -1 , где keys - вышеназванный массив
__________________
4am is time to rock

Старый 25.04.2009, 21:58
Vektor вне форума Посмотреть профиль Отправить личное сообщение для Vektor Найти все сообщения от Vektor
  № 6  
Ответить с цитированием
Vektor
 
Аватар для Vektor

Регистрация: May 2008
Адрес: Новокузнецк
Сообщений: 219
Записей в блоге: 1
Попробовал сделать как советовали, получилось, что-то вроде этого.
главное что работает.
Код AS3:
package {
	import flash.display.MovieClip;
	import flash.events.*;
	import flash.ui.Keyboard;
 
	dynamic public class Key extends MovieClip {;
	var aKey:Array = [];
 
	public function Key() {
		stage.addEventListener(KeyboardEvent.KEY_DOWN,   KeyDown);
		stage.addEventListener(KeyboardEvent.KEY_UP,   KeyUp);
	}
	public function KeyDown(e : KeyboardEvent):void {
		if (e.keyCode == Keyboard.RIGHT) {
			aKey[0] = "RIGHT";
		}
		if (e.keyCode == Keyboard.UP) {
			aKey[1] = "UP";
		}
		if (aKey.indexOf("RIGHT") > -1) {
			trace("RIGHT");
		}
		if (aKey.indexOf("UP") > -1) {
			trace("UP");
		}
	}
	public function KeyUp(event : KeyboardEvent):void {
		if (event.keyCode == Keyboard.RIGHT) {
			aKey[0] = "";
		}
		if (event.keyCode == Keyboard.UP) {
			aKey[1] = "";
		}
	}
}
}
__________________
Книги и желание лучшие учителя.

Старый 25.04.2009, 22:04
AL.exe вне форума Посмотреть профиль Отправить личное сообщение для AL.exe Посетить домашнюю страницу AL.exe Найти все сообщения от AL.exe
  № 7  
Ответить с цитированием
AL.exe
 
Аватар для AL.exe

Регистрация: Jan 2004
Адрес: Net
Сообщений: 1,049
Отправить сообщение для AL.exe с помощью ICQ
Цитата:
Было где-то хорошее исследование на эту тему, выяснилось что на разных компьютерах могут не работать разные комбинации.
Дело чаще в самой клавиатуре, похоже.
__________________
Дело не в тебе

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

Теги
KeyboardEvent , клавиатура

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

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


 


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


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