Autor Zpráva
Geo
Profil *
Dobrý den,
Mám zde takový problém, tlačítka nereagují na stisk klávesy. Prosím porad'te.
děkuji.

btn = function (who:String) {
var red = "Key."+who;
if (Key.isDown(red)) {
this.gotoAndStop(2);
} else {
this.gotoAndStop(1);
}
this.onPress = function() {
this.gotoAndStop(2);
};
};
btn_r.onEnterFrame = btn("RIGHT");
btn_l.onEnterFrame = btn("LEFT");
btn_u.onEnterFrame = btn("UP");
btn_d.onEnterFrame = btn("DOWN");
Geo
Profil *
Opravdu nevíte co stím ?
niky
Profil
Pořádně jsem se nad tim nezamýšlel, ale podle mě tam dělá bordel to this (this.gotoAndStop...) a taky ta promněnná red, která je globální...
Geo
Profil *
Takže pomocí var se označují globální proměnné?
Děkuji za radu, hned to vyzkouším.
niky
Profil
Timhle způsebom jo...
Globální promněnná red
function btn() {

var red = ...
}

Lokální promněnná red
function btn() {

var red:String = ...
}
Geo
Profil *
Když to udělám, tak to napíše:
if (Key.isDown(red)) { = mišmaš
niky
Profil
Jo a tenhle zápis ti nebude správně fungovat: btn_r.onEnterFrame = btn("RIGHT");

Musíš to zapsat takhle:
btn_r.onEnterFrame = function() {

btn("RIGHT");
};

adt.

Taky mě napadlo, že jak tam předáváš hodnotu pomocí red, tak to je docela blbost... Ale nedokážu ti poradit, jak to předělat... :P
Geo
Profil *
Bohužel to taky nefunguje, ale děkuji za onEnterFrame, to funguje.
Geo
Profil *
Asi bude něco stím red.
embee
Profil
Geo
pokud das do funce pred promennou keyword var, jedna se lokalni promennou - takova promenna existuje jenom v ramci funkce a po jejim skonceni je z pameti smazana. Pokud deklarujes promennou mimo funkci se slovickem var, je to standartni promenna. Glogalni promenne se pak definuji pomoci slova global (nebo _global, ted presne nevim)
niky
Profil
Koukám že tady šířim bludy... :( Nevim jak to, ale nějak se mi zafixovalo, že když tam je ve funkci jen samotný var, tak to je globální. Nevim jak jsem na to přišel... embee to napsal správně.
Promiňte za tuhle mistifikaci :( Bohužel už ty příspěvky nemůžu změnit, takže v mé první a druhé radě, jak mluvim o globální promněnné to je špatně. Všechny jsou lokální.
embee
Profil
niky
f poho se stane kazdemu :)
Geo
Profil *
Tenhle kus kódu funguje:

btn = function () {
if (Key.isDown(Key.RIGHT)) {
this.swapDepths(50);
this.gotoAndStop(2);
} else {
this.gotoAndStop(1);
}
this.onPress = function() {
this.swapDepths(50);
this.gotoAndStop(2);
};
};
btn_r.onEnterFrame = btn;

Tenhle už ne:

btn = function () {
var red = "Key.RIGHT";
if (Key.isDown(red))
{
this.swapDepths(50);
this.gotoAndStop(2);
} else {
this.gotoAndStop(1);
}
this.onPress = function() {
this.swapDepths(50);
this.gotoAndStop(2);
};
};
btn_r.onEnterFrame = btn;


Myslím, že tady je ten problém, ale nevím jak ho spravit, proto prosím prorad'te.
Děkuji.
embee
Profil
Ja myslim ze cela logika kodu je spatna - proc proboha pri kazde udalosti on enter frame se musi znovu nastavovat cela sada akci pro stisk jednotlivych klaves? Je to zbytecne a zbytecne to zere vykon. Cela situace se da mnohem lepe zvladnout pomoci modelu event - listener. Listener je genericky objekt, ktery nasloucha udalostem klavesnice - tudiz skript se spousti pouze v pripade, ze je nejaka klavesa stisknuta a ne pri kazde udalosti onEnterFrame. To, jak kod napsat je rozebrane tady http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=21&topic=5 3161 - je tam sice par preklepu, ale ty se daji hrave odstranit. Hlavne jde o to, ze kod je tam napsany sice pro konkretni situaci, ale korektne a da se z nej odvodit celkem bez problemu kod pro tvou konkretni potrebu.
Geo
Profil *
Děkuji.
Někde jsem slyšel že listener má delší odezvu a proto není vhodný třebo pro pohyb letounu , který se opakuje často.
Je to pravda ?
embee
Profil
Geo
tak o tom slysim prvne, tudiz nemuzu slouzit. Zkus si to vygooglit.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: