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

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

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

Регистрация: Mar 2009
Адрес: Из города на Ингуле
Сообщений: 116
Отправить сообщение для ndiezel с помощью ICQ
По умолчанию Глючит KeyboardEvent при совместной работе с MOUSE_DOWN

Всем привет.

Делаю игрушку.
В ней главный герой двигается и стреляет пульками. Двигается за счёт gameKeysDown и gameKeysUp, стреляет при помощи MouseEvent.MOUSE_DOWN.
В общем - обычные слушатели событий.

И вроде всё норм, но иногда, бывает что когда стреляешь - клавиши начинают "залипать". Т.е. стрелял ты, нажимал в это время, допустим, влево, отжимаешь - а герой всё так же едет влево. И пока там несколько раз не включишь/выключишь пушку (слушатель нажатия кнопки на мыши при этом добавляется/удаляется), то просто пока время не пройдёт - героя не попускает.
И в чём глюк - никак отловить не могу.

Может кто сталкивался, кто что подскажет? В чём может быть дело?

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

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
У меня слабо развитые экстрасенсорные способности. Покажите код обработчиков и какие лисенеры используете. Но вообще с залипанием нужно бороться подписываясь на KEY_DOWN и KEY_UP
__________________
return this...

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

Регистрация: Mar 2009
Адрес: Из города на Ингуле
Сообщений: 116
Отправить сообщение для ndiezel с помощью ICQ
Перемещение:
Код AS3:
		public function gameKeysDown(e:KeyboardEvent):void
		{
			if (! gameMenuPaused)
			{
				if (e.keyCode == 65 || e.keyCode == 37)
				{
					leftBln = true;
				}
				if (e.keyCode == 68 || e.keyCode == 39)
				{
					rightBln = true;
				}
				if (e.keyCode == 87 || e.keyCode == 38)
				{
					upBln = true;
				}
				if (e.keyCode == 83 || e.keyCode == 40)
				{
					downBln = true;
				}
			}
		}
		public function gameKeysUp(e:KeyboardEvent):void
		{
				if (e.keyCode == 65 || e.keyCode == 37)
				{
					leftBln = false;
				}
				if (e.keyCode == 68 || e.keyCode == 39)
				{
					rightBln = false;
				}
				if (e.keyCode == 87 || e.keyCode == 38)
				{
					upBln = false;
				}
				if (e.keyCode == 83 || e.keyCode == 40)
				{
					downBln = false;
				}
 
		}
Стрельба:
Код AS1/AS2:
        private function hw02mDown(event:Event):void
        {
            hw02Shoot = true;
            return;
        }
        private function hw02mUp(event:Event):void
        {
            hw02Shoot = false;
            return;
        }

Старый 12.07.2013, 04:39
belv вне форума Посмотреть профиль Отправить личное сообщение для belv Найти все сообщения от belv
  № 4  
Ответить с цитированием
belv
[+1 16.07.13]
[+4 16.07.13]

Регистрация: Oct 2005
Сообщений: 217
Функции, которые приводят в движение пули и персонажа , тоже покажите.

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

Регистрация: Mar 2009
Адрес: Из города на Ингуле
Сообщений: 116
Отправить сообщение для ndiezel с помощью ICQ
Обе запускаются в энтерфрейме.
Передвижение:
Код AS3:
private function movingHero():void
		{
			hero_movie.rotation = rot;
 
			if (GlobalVars.hWeaponVar==1)
			{
				hw01.rotation = weapon_rot;
			}
			if (GlobalVars.hsp>heroLevelSpeed)
			{
				heroLevelSpeed+=0.01;
			}
 
			if (downBln || upBln || rightBln || leftBln)
			{
				active_rotation = flyRotation + heroLevelSpeed / 2;
			}
			rot = rot - active_rotation;
			weapon_rot = (0 - rot) * 2;
 
			if (rot<=-360)
			{
				rot +=  360;
			}
			//Убираем последствия от столкновения
			if (flyRotation>3)
			{
				flyRotation-=1;
				active_rotation=flyRotation;
			}
			else
			{
				flyRotation=3;
			}
 
			if (active_rotation>=0.3)
			{
				active_rotation -=  0.03;
			}
			if (active_rotation<=0.3)
			{
				active_rotation = 0.3;
			}
 
			if (leftBln)
			{
				if (hero_movie.x > 17)
				{
					hero_movie.x -=  heroLevelSpeed;
				}
			}
			if (rightBln)
			{
				if (hero_movie.x < 783)
				{
					hero_movie.x +=  heroLevelSpeed;
				}
			}
			if (upBln)
			{
				if (hero_movie.y > 17)
				{
					hero_movie.y -=  heroLevelSpeed;
				}
			}
			if (downBln)
			{
				if (hero_movie.y < 583)
				{
					hero_movie.y +=  heroLevelSpeed;
				}
			}
 
			if (hero_movie.currentFrame == 40 || hero_movie.currentFrame == 80 || hero_movie.currentFrame == 120 || hero_movie.currentFrame == 160 || hero_movie.currentFrame == 200)
			{
				hero_movie.gotoAndStop(1);
			}
		}
Стрельба:
Код AS3:
private function hWeaponsFunc():void
		{
			if (GlobalVars.hWeaponVar==2)
			{
				hw02.x = hero_movie.x;
				hw02.y = hero_movie.y;
 
				WeaponBar.scaleX = WeaponLifeTime / levelWeaponLifeTime;
 
				if(hw02Shoot)
				{
					weapon02Shoot();
					WeaponLifeTime-=weaponsReduseTimer;
				}
			}
		}
 
		private function weapon02Shoot():void
		{
			if (weaponShootTimer > GlobalVars.weaponUpgrades[3]/2)
			{
				weaponShootTimer = 0;
				for(var shw02b:int=0;shw02b<2;shw02b++)
				{
					...
					//Размещаем пули на экране
				}
				hw02.y-=w01b.dy;
				hw02.x-=w01b.dx;
 
				if (GlobalVars.soundPlayed)
				{
					GlobalVars.w01_shoot.play(0,1);
				}
			}
			weaponShootTimer++;
		}
Энибари?

Вопрос ещё актуален.
Как выяснилось экспериментальным путём - "залипает" слушатель поднятия кнопки. Т.е. когда одновременно и зажата кнопка мыши и клавиши и много событий на сцене, видимо, не успевает слушатель услышать и что кнопка отжата.

Кто с таким может сталкивался?


Последний раз редактировалось iNils; 15.07.2013 в 13:49.
Создать новую тему Ответ Часовой пояс GMT +4, время: 23:50.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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