![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Здравствуйте.
пишу(точнее уже почти доделал) игру скролер(типа марио). Игра придназначаеться для web. для управления с клавиатуры след код: var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
switch (Key.getCode()) {
case Key.RIGHT :
_root.main.game.move(1);
break;
case Key.LEFT :
_root.main.game.move(-1);
break;
case Key.SPACE :
_root.main.game.jump_char();
break;
}
};
keyListener.onKeyUp = function() {
switch (Key.getCode()) {
case Key.RIGHT :
_root.main.game.shar_stop();
break;
case Key.LEFT :
_root.main.game.shar_stop();
break;
}
};
Key.addListener(keyListener);
что если бежать, потом прыгнуть, а потом отпустить влево(или право), то персонаж бежит дальше. Вроде как пробел вызывает onKeyUp, и после этого, отпускание другой клавиши - onKeyUp уже не работает. сама игра: http://ya-zvezda.ru/turtle/main.html 200кб |
|
|||||
|
Регистрация: Jun 2005
Адрес: Moscow - immigrate from Volgodonsk
Сообщений: 2,534
|
а че так тормозит бешенно?
|
|
|||||
|
а какой комп?
З.Ы. на 1.2 ГГерца и 256 оперативки - идет так как надо. =) З.Ы.Ы. пожалуста, игра не для обсуждения, она не доделана, хотелось бы решить вопрос по коду. |
|
|||||
|
Регистрация: Nov 2003
Адрес: Север
Сообщений: 244
|
А не пробовал 2 Listener'a для движения и прыжка создавать?
__________________
Scio me, nihil scire. |
|
|||||
|
Регистрация: Jun 2005
Адрес: Moscow - immigrate from Volgodonsk
Сообщений: 2,534
|
ну да я тоже думаю что эта проблема не так сложна...просто нужно подумать...:=)
|
|
|||||
|
да
пробывал. проблема осталась |
|
|||||
|
по ходу получается, что onKeyUp генерится когда все клавиши отпущены, т.е. отследить с его помощбю последовательное отжатие не судьба..
как вариант: заставить мувик следить за нажатием/отжатием, ну и сообщать об изменениях: import mx.events.EventDispatcher;
//сщздаем мувик, который будет следить за клавишами RIGHT, LEFT & SPACE
this.createEmptyMovieClip('keyDispatcher',this.getNextHighestDepth());
keyDispatcher.keys={r:false,l:false,s:false};//для контроля
EventDispatcher.initialize(keyDispatcher);//копируем в него методы диспатчера
keyDispatcher.onEnterFrame=function(){
var k=this.keys;
//если состояние клавиши меняется, то рапортуем (вещаем событие 'key')
if(k.r!=Key.isDown(Key.RIGHT)){
this.dispatchEvent({type:'key',what:k.r ? 'up' : 'down',key:'right',time:getTimer()});
}
if(k.l!=Key.isDown(Key.LEFT)){
this.dispatchEvent({type:'key',what:k.l ? 'up' : 'down',key:'left',time:getTimer()});
}
if(k.s!=Key.isDown(Key.SPACE)){
this.dispatchEvent({type:'key',what:k.s ? 'up' : 'down',key:'space',time:getTimer()});
}
this.keys={r:Key.isDown(Key.RIGHT),l:Key.isDown(Key.LEFT),s:Key.isDown(Key.SPACE)};
}
//подписываем функцию onKey, на прослушку события 'key'
keyDispatcher.addEventListener('key',onKey);
//теперь всегда знаем когда, какую и что сделали(нажали/отпустили)...
function onKey(e){
trace('________');
trace('when :'+e.time);
trace('key :'+e.key+' ('+e.what+')');
}
|
|
|||||
|
в догонку: как отследить тоже самое для всех клавиш
import mx.events.EventDispatcher;
this.createEmptyMovieClip('keyDispatcher',this.getNextHighestDepth());
//пихаем в массив все коды (вообще-то это лишнее: зачем перебирать то, что не нужно..
for(var i=0,k=keyDispatcher.keys=[];i<255;i++)k.push(false);
EventDispatcher.initialize(keyDispatcher);//копируем в него методы диспатчера
keyDispatcher.onEnterFrame=function(){
var k=this.keys;
for(var i in k){
//если состояние клавиши меняется, то рапортуем (вещаем событие 'key')
if(k[i]!=Key.isDown(i)) this.dispatchEvent({type:'key',what:k[i] ? 'up' : 'down',key:i,time:getTimer()});
k[i]=Key.isDown(i);
}
}
keyDispatcher.addEventListener('key',onKey);
function onKey(e){
trace('________');
trace('when :'+e.time);
trace('key# :'+e.key+' ('+e.what+')');
}
|
|
|||||
|
Это тоже хороший код.
но у него есть проблема - во первых какието странные баги =) а во вторых, что очень важно, в Броузере он не работает(в дебагере рабоатет, а вот в броузере ну ни как) =((( или я что то забыл сделать еще? |
|
|||||
|
какие баги ? ,ну кроме того, что странные..
в браузере там и нечему работать.., собственно это только способ решения твоей проблемы, как ты его применишь вопрос другой.. зы: еще, не пиши так switch (Key.getCode()) {
case Key.RIGHT :
_root.main.game.shar_stop();
break;
case Key.LEFT :
_root.main.game.shar_stop();
break;
}
![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 05:16. |
|
|
« Предыдущая тема | Следующая тема » |
|
|