![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Всем привет.
Делаю игрушку. В ней главный герой двигается и стреляет пульками. Двигается за счёт gameKeysDown и gameKeysUp, стреляет при помощи MouseEvent.MOUSE_DOWN. В общем - обычные слушатели событий. И вроде всё норм, но иногда, бывает что когда стреляешь - клавиши начинают "залипать". Т.е. стрелял ты, нажимал в это время, допустим, влево, отжимаешь - а герой всё так же едет влево. И пока там несколько раз не включишь/выключишь пушку (слушатель нажатия кнопки на мыши при этом добавляется/удаляется), то просто пока время не пройдёт - героя не попускает. И в чём глюк - никак отловить не могу. Может кто сталкивался, кто что подскажет? В чём может быть дело? |
|
|||||
|
У меня слабо развитые экстрасенсорные способности. Покажите код обработчиков и какие лисенеры используете. Но вообще с залипанием нужно бороться подписываясь на KEY_DOWN и KEY_UP
__________________
return this... |
|
|||||
|
Перемещение:
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; } } |
|
|||||
|
Регистрация: Oct 2005
Сообщений: 217
|
Функции, которые приводят в движение пули и персонажа , тоже покажите.
|
|
|||||
|
Обе запускаются в энтерфрейме.
Передвижение: 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); } } 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, время: 20:56. |
|
|
« Предыдущая тема | Следующая тема » |
|
|