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

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

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

Регистрация: Jan 2013
Сообщений: 12
По умолчанию Обработка нажатия клавиш, мультитачинг

Всем привет!

Столкнулся с проблемой -не работает одновременное нажатие клавиш. Никак не могу ее решить. Может ктото подсказать?
класс Hero
Код AS3:
public class Hero extends MovieClip{
 
  public var heroPosX:int = 0;//текущее положение игрока
  public var heroPosY:int = 0;//текущее положение игрока
  private var _hurt:Boolean = false;//повреждение
  private var controlsEnabled:Boolean = true;//доступность управления
  private var _hero:MovieClip;//скин персонажа
  private var moveKeyPressed = false;//нажата ли кнопка перемещения героя
  private var _playerMovingHero = false;//движется ли герой
 
 
  public var heroAcselerationX:Number = 300;//скорость героя
  public var heroAcselerationY:Number = 100;//скорость героя
  public var acceleration:Number = 1;//стартовая скорость
  public var maxVelocity:Number = 5;//макс скорость
 
  public function Hero(){
   //constructor
   addEventListener(Event.ADDED_TO_STAGE, init);
 
  }
 
  public function init(e:Event):void {
   //создаем героя
   _hero = new HeroSkin();
   addChild(_hero);
   //останавливаем анимацию героя
   _hero.stop();
 
 
   // Listeners
   stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressedDown);
   stage.addEventListener(KeyboardEvent.KEY_UP, keyPressedUp);
   addEventListener(Event.ENTER_FRAME, update);
 
  }
  // обработка нажатия клавиш  
  public function keyPressedDown (e:KeyboardEvent):void {
 
 
    if (e.keyCode == 37){
     heroAcselerationX += -acceleration;
     moveKeyPressed = true;
    }
    if (e.keyCode == 38){
     heroAcselerationY += -acceleration;
     moveKeyPressed = true;
    }
    if (e.keyCode == 39){
     heroAcselerationX += acceleration;
     moveKeyPressed = true;
    }
    if (e.keyCode == 40){
     heroAcselerationY += acceleration;
     moveKeyPressed = true;
    }
 
 
    //торможение
    else if (!moveKeyPressed && _playerMovingHero)
    {
     _playerMovingHero = false;
     //acceleration -=1; //увеличиваем трение
    }
 
    /*if (e.keyCode == 37 && e.keyCode == 38){
     _hero.x += -acceleration;
     _hero.y += -acceleration;
    }*/
 
  }
 
  public function update(e:Event):void {
   _hero.x = heroAcselerationX;
   _hero.y = heroAcselerationY;
 
    //ускорение 
    if (moveKeyPressed && !_playerMovingHero)
    {
     _playerMovingHero = true;
     acceleration += 1; //уменьшаем трение.
    }
  }
 
  // трение
  public function friction(accel) {
   acceleration += 1;
   if (acceleration > 5) {
    acceleration = 5;
   }
   return acceleration;
  }
 
  //отпускание кнопки
  public function keyPressedUp(e:KeyboardEvent) {
   moveKeyPressed = false;
  }
 
  //анимация движения
  public function updateAnimation() {
   if (currentFrame == 5) {
    gotoAndPlay(1);
   }
   else {
    play();
   }
  }
 
  //получаем кординаты игрока
  public function updateHeroPos(heroX:int, heroY:int):void {
   heroPosX = heroX;
   heroPosY = heroY;
  }

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

Регистрация: Oct 2005
Сообщений: 217
точно не помню как делать , но тут есть решение http://easyflash.org/flashlearn/flas...-knopkami.html
P.S. на курс есть торрент

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

Регистрация: Feb 2012
Сообщений: 1,540
Код AS3:
package {
	import flash.display.*;
	import flash.events.*;
 
	public class Hero extends Sprite {
 
		private var _keys:Object;
 
		//- CONSTRUCTOR -------------------------------------------------------------------------------------------
 
		public function Hero() {
			init();
		}
 
		//- INIT --------------------------------------------------------------------------------------------------
 
		//- STATIC METHODS ----------------------------------------------------------------------------------------
 
		//- PUBLIC & INTERNAL METHODS -----------------------------------------------------------------------------
 
		private function init():void {
			_keys = {};
 
			addEventListener(Event.ADDED_TO_STAGE, onAdded);
		}
 
		//- PRIVATE &PROTECTED METHODS ---------------------------------------------------------------------------
 
		//- EVENT HANDLERS ----------------------------------------------------------------------------------------
 
		private function onUpdatePosition(e:Event):void {
			if (_keys[37] == true) {
				//heroAcselerationX += -acceleration;
				//moveKeyPressed = true;
			}
			if (_keys[38] == true) {
				//heroAcselerationY += -acceleration;
				//moveKeyPressed = true;
			}
			if (_keys[39] == true) {
				//heroAcselerationX += acceleration;
				//moveKeyPressed = true;
			}
			if (_keys[40] == true) {
				//heroAcselerationY += acceleration;
				//moveKeyPressed = true;
			}
 
			//... ТУТ ТВОЙ КОД
		}
 
		private function onKeyUp(e:KeyboardEvent):void {
			_keys[e.keyCode] = false;
		}
 
		private function onKeyDown(e:KeyboardEvent):void {
			_keys[e.keyCode] = true;
		}
 
		private function onAdded(e:Event):void {
			removeEventListener(Event.ADDED_TO_STAGE, onAdded);
			stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
			stage.addEventListener(Event.ENTER_FRAME, onUpdatePosition);
			stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
		}
 
		//- ACCESSORS ---------------------------------------------------------------------------------------------
 
		//- END ---------------------------------------------------------------------------------------------------
	}
}

Старый 09.06.2013, 02:36
Serya вне форума Посмотреть профиль Отправить личное сообщение для Serya Найти все сообщения от Serya
  № 4  
Ответить с цитированием
Serya

Регистрация: Jan 2013
Сообщений: 12
Спасибо, уже нашел решение

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

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

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


 


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


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