PDA

Просмотр полной версии : Listener


Vovchello
05.04.2004, 22:31
Kak sdelat' tak 4tob 2 (naprimer) objecta upravljalis' s klaviaturi nezavisimo?
Sdelal 2 Listenera 1 k kagdomu objectu, no dvigajutsja objecti vse ravno po otdelnosti. Est' li vozmognost raboti s bufferom klaviaturi?
MOget ja esche 4ego-to ne dogonjau i Listener voobsche ne nugen?
Pasibo vsem...

silin
05.04.2004, 22:48
Key.addListener(kl={});
kl.onKeyDown=function(){
switch(Key.getCode()){
case 49 : //действия по клавише('1') для mc1
mc1._x+=10;
break;
case 50 : //действия по другой клавише('2') для другого мувика
mc2._x+=10;
break;
//и так далее в том же духе
}
}

Vovchello
07.04.2004, 22:03
K sogaleniu ento ne rabotaet.... pri uderganii 2-x dlja raznix MC dvigaetsja tolko 1 object
Proboval delat dlja kagdogo objecta odelnii Listener no effect totge...vernne nikagogo effecta.
Moget ja туплю?

Flasham
08.04.2004, 12:11
Привет!

Для того что бы обрабатывались одновременное нажатие клавиш, сделай след. образом. При нажатии на клавишу устанавливай некий флаг в тру, а на мувике, напр. в ентерфрейм, стоит проверка на этот флаг и соотв. событие. Для обратного изменения делай листенер на кейУп.

удачи

silin
08.04.2004, 18:52
pri uderganii 2-x dlja raznix MC dvigaetsja tolko 1 object
для такого расклада придется либо как Flasham предлагает флаги отслеживать , либо назначать обработчики мувикам по нажатию определенных клавиш и удалять при отпускании
пример:
Key.addListener(kl={});
kl.onKeyDown=function(){
var k=Key.getCode();
if(k==49)mc1.onEnterFrame=function(){this._x+=10};
if(k==50)mc2.onEnterFrame=function(){this._x+=10};
}
kl.onKeyUp=function(){
var k=Key.getCode();
if(k==49)delete mc1.onEnterFrame;
if(k==50)delete mc2.onEnterFrame;
}

Vovchello
08.04.2004, 19:26
Rebjat, ja vot tut gljanul odin isxodnik (kak govoritsja ..vse poznaetsja v sravnenii) i tam prostoja function dlja ka*dogo objecta

function fKeyDown(){
if (Key.isDown(68)) {
_root.mc._x += d;
}
if (Key.isDown(65)) {
_root.mc._x -= d;
}
if (Key.isDown(87)) {
_root.mc._y -= d;
}
if (Key.isDown(83)) {
_root.mc._y += d;
}
}
i vse rulit kak v skaske. Ja delal function s switch() & case (po-moemu ento izjaschnee... i kone4no bistree) no objecti, padla, dvigalis' tolko po o4eredi:

function fKeyDown(){
switch (Key.getCode()){
case 68:
_root.mc._y -= d;
break;
case 65:
_root.mc._y += d;
break;
case 87:
_root.mc._x -= d;
break;
case 83:
_root.mc._x += d;
break;
}
}

Ne poimu v 4em delo... 2-oi variant i bistree i krasivshe, no sobaka ne rabotaet kak dol*no. Kto mo*et skazat v 4em xren'?

silin
08.04.2004, 20:01
потому что по break обработка switch прерывается и реакции на следующие клавиши нет

Dindin
09.04.2004, 10:24
Кстати, исключенние из порядка обработки switch'а команды break; один из вариантов условия or:

switch (Key.getCode()){
case 68:
_root.mc._y -= d;
case 65:
_root.mc._y += d;
case 87:
_root.mc._x -= d;
case 83:
_root.mc._x += d;

выполнит все проверки

silin
09.04.2004, 19:27
выполнит все проверки
а заодно и все действия после первой удачной проверки

Dindin
09.04.2004, 19:34
Так точно :)

Vovchello
15.04.2004, 22:27
Ni xrena ne polu4aetsja..... i voobsche ne dol*no ento po-moemu pomo4", ibo esli ubrat "break" to prosto-naprosto budut proverjatsja sledujuschie "case".. i vse.
A po4emu variant s "if" rabotaet korrektno, a s "case" net... ja is4o ne ponjal. Podska*ite 4e-nibud'.... a to u menja u*e golova bolit...