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

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

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

Регистрация: Oct 2010
Адрес: Свердловск
Сообщений: 77
По умолчанию Аналог Key.isToggled И Key.isDown в AS 3.0

Поиск никаких реультатов не дал, поэтому создал эту тему.
Стало очень интересно, как данные свойства реализованы в AS 3.0.

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
А это свойства чего?
У визуальной кнопки - надо самому реализовывать.

А на клаве только две кнопки тогглед - нумлок и капслок. Смотрите Keyboard.capsLock и Keyboard.numLock.
isDown тоже самому отслеживать при нажатии. Можно еще отслеживать зажаты ли ктрл, альт, дел. см http://help.adobe.com/en_US/FlashPla...oardEvent.html
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

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

Регистрация: Oct 2010
Адрес: Свердловск
Сообщений: 77
это я уже читал всё.

Это свойства клавиатуры в AS 2.0. Мне нужно отслеживать зажата ли клавиша SHIFT. Можно, конечно, сделать слушатель и устанавливать в переменную shiftIsToggled значения истины или лжи, но, блин, неужели нельзя проще?

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
А смысл просто следить зажат ли шифт? Если нажимаем какие то кнопочки, что проверить можно. Если мышкой рисуем, то у MouseEvent тоже есть shiftKey
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 03.04.2013, 07:25
Dalass13 вне форума Посмотреть профиль Отправить личное сообщение для Dalass13 Найти все сообщения от Dalass13
  № 5  
Ответить с цитированием
Dalass13
 
Аватар для Dalass13

Регистрация: Oct 2010
Адрес: Свердловск
Сообщений: 77
Добавлено через 2 минуты
Ну, если я спрашиваю, значит смысл - таки есть. Задача стоит такая - движение по щелчку и удерживанию ЛКМ, а при удерживании Shift, объект стоит на месте. С мышью реализовал алгоритм, но, опять же, непонятно - можно ли сделать это проще?

Код AS3:
import flash.events.MouseEvent;
import flash.events.Event;
 
var toX,toY;
var characterSpeed = 5;
var mouseIsToggled = false; // зажата ЛКМ
var mouseIsClicked = false;  // клик мыши
 
function mouseClick(event:MouseEvent):void
{
	mouseIsClicked = true;
 
	if (event.target != mc)
	{
		mouseIsToggled = true;
 
		removeEventListener(MouseEvent.MOUSE_MOVE, mouseToggled);
 
		toX = event.stageX;
		toY = event.stageY;
		addEventListener(Event.ENTER_FRAME, onEnterFrame);
	}
}
 
function mouseUnclick(event:MouseEvent):void
{
	mouseIsToggled = false;
}
 
 
function mouseToggled(event:MouseEvent):void
{
	if ( mouseIsClicked && mouseIsToggled && event.target != mc)
	{
		toX = event.stageX;
		toY = event.stageY;
		addEventListener(Event.ENTER_FRAME, onEnterFrame);
	}
	else
	{
		stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseToggled);
	}
}
 
function onEnterFrame(e:Event)
{
	moveToCoordinates(toX, toY);
}
 
function moveToCoordinates(toX:Number, toY:Number)
{
	var theta = Math.atan2 (toY - mc.y, toX - mc.x);
	mc.x += Math.cos (theta) * (characterSpeed);
	mc.y += Math.sin (theta) * (characterSpeed);
 
	if (Math.abs(mc.y - toY) < 5 && Math.abs(mc.x - toX) < 5)
	{
		removeEventListener(Event.ENTER_FRAME, onEnterFrame);
		if (! mouseIsToggled)
		{
			mouseIsClicked = false;
		}
	}
}
 
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseClick);
stage.addEventListener(MouseEvent.MOUSE_UP, mouseUnclick);
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseToggled);


Последний раз редактировалось Dalass13; 03.04.2013 в 08:30.
Старый 03.04.2013, 14:59
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 6  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Есть для ас3 такой велосипед:
Код AS3:
package  {
 
	import flash.display.Stage;
	import flash.display.StageDisplayState;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
 
	public class Key {
 
		private static var initialized:Boolean = false;		
		private static var keysDown:Object = new Object();	
 
		public static function initialize(stage:Stage):void {
			if (!initialized) {
				stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
				stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
				stage.addEventListener(Event.DEACTIVATE, clearKeys);
				initialized = true;
			}
		}
 
		public static function isDown(keyCode:uint):Boolean {
			if (!initialized) {
				throw new Error("Key class has not yet been initialized.");
			}
			return Boolean(keyCode in keysDown);
		}
		private static function keyPressed(event:KeyboardEvent):void {
			keysDown[event.keyCode] = true;
		}
		private static function keyReleased(event:KeyboardEvent):void {
			if (event.keyCode in keysDown) {
				delete keysDown[event.keyCode];
			}
		}
		private static function clearKeys(event:Event):void {
			keysDown = new Object();
		}
	}
}
Работает именно так просто как в названии темы.

Сначала инициализируем
Код AS3:
Key.initialize(stage);
 
// а потом используем где угодно
trace(Key.isDown(Keyboard.SHIFT));

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

Регистрация: Jan 2009
Сообщений: 1,651
У меня, кстати, постоянно проподает фокус клавиатуры, даже когда stage подписана на него. я так понимаю, каждый раз, когда фокус клавиатуры был на мувике, который был убран со сцены. Кто как с этим борется? Я вот просто постоянно делаю setFocus.
__________________
мой пустой блог

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
У меня не пропадает. Соответственно никак не борюсь. Видимо где-то косяк в коде.

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

Регистрация: Oct 2010
Адрес: Свердловск
Сообщений: 77
Этот велосипед уже видел на просторах интернета, жаль. Думал, что можно всё-таки обойтись стандартными средствами. Огромное спасибо за помощь

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Думал, что можно всё-таки обойтись стандартными средствами.
Там все стандартное. Не вижу проблемы в использовании этого класса

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

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

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


 


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


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