Keresés

Részletes keresés

halaloszto Creative Commons License 2019.07.23 0 0 5283

http://jsfiddle.net/zG9MF/2/

 

stackoverflowrol van.

 

midenképpen megkapod a sok keypress meg keydown -t, ignoralnod kell, amig a keyup meg nem jön.

Előzmény: Emberlight (5282)
Emberlight Creative Commons License 2019.07.23 0 0 5282


Sziasztok.

Azt szeretném megoldani, hogy a keydown event ne érzékelje a space többszöri lenyomását, csak a nyomva tartását.
A kódrészletem:

$("body").on('keydown', function(event) {
switch (event.keyCode) {
case 32:
console.log("space");
}
})
egy hazafi Creative Commons License 2019.01.10 0 0 5281

Úgy tapasztaltam, hogy nem fut le az addEventListener  egerfelette függvénye sehogy sem...

Egyébként úgy van a program felépítve, hogy gombnyomásra jön létre néhány objektum (ikonok), és azokon hajtódna végre ez az ellenőrzés, hogy felette van-e az egérmutató. Erre a gombnyomásra lesz az aktívfelület 2-es értékű, és ekkor jönnek létre az ikonok is.

Vajon jól használom az addEventListener-t ezen logika alapján?

Előzmény: _szergej_ (5279)
egy hazafi Creative Commons License 2019.01.09 0 0 5280

Igen, az alert-et kíváncsiságból raktam be, hogy egyáltalán lefut-e az az ág. De nem jelenik meg az üzenet, tehát nem. Hibaüzenetet nem tapasztaltam. Akkor megpróbálom még a tanácsod alapján azt az if-et vizsgálni.

Előzmény: _szergej_ (5279)
_szergej_ Creative Commons License 2019.01.09 0 0 5279

Szvsz ideje lenne megismerkedned bizonyos (js) debuggolasi technikakkal, bar gondolom az alert() is ezt szolgalja. A kodod alapjan

- ha az alert(1) lefut, akkor ujra kellene rajzolnod a canvast vagy amire a tabortuzikon ki van rajzolva, mert gyanithatoan a tabortuzikon.kepe = tabortuz2kep; nem indukal ui frissitest

- ha az alert nem fut le, akkor passz. Van egy rakat valtozod az egerfelette fuggvenyben, vizsgald meg mindegyik tartalmat, hogy hol akad el/merre megy a vezerles (belemegy-e a fuggvenybe, a case 2-be, az ifbe stb)

- js konzolban nincs semmi hibauzenet?

Előzmény: egy hazafi (5278)
egy hazafi Creative Commons License 2019.01.08 0 0 5278

Az utóbbi kérdést már sikerült megoldanom, ezzel viszont egyáltalán nem boldogulok: azt szeretném elérni, hogy ha az egérmutató egy bizonyos objektum felett van éppen, akkor történjen valami, most pl. változtassa meg a képét. Ez a (valamiért nem működő) kódom:

 

vaszon.addEventListener("mouseover", egerfelette);
function egerfelette(eger) {
switch (aktivfelulet) {
case 2:
if (eger.clientX >= tabortuzikon.xhely && eger.clientX <= tabortuzikon.xhely+tabortuzikon.kepe.width && eger.clientY >= tabortuzikon.yhely && eger.clientY <= tabortuzikon.yhely+tabortuzikon.kepe.height) {
tabortuzikon.kepe = tabortuz2kep;
alert("1");
}

...

egy hazafi Creative Commons License 2018.12.29 0 0 5277

Sziasztok ismét!

Valaki meg tudná nekem mondani (illetve leírni), hogy a vászonra kirajzolt képre hogyan lehet kiírni egy változó értékét? Van a képeknek is külön canvas-uk, vagy  hogy lehet pontosan rájuk helyezni szöveget?

Látens Inszinuáció Creative Commons License 2018.12.08 0 0 5276

Azt a k@[;>}@ életbe!

 

Megvan a hiba.

Pedig vagy több tucatszor is átnéztem.

Ezért rühellem a paste funkciót, mert tuti, hogy valamilyen karakter lemarad.

 

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

 

A sorból kimaradt a "min" ami még nem lenne gond, hanem a végén a "script" előtti zárókapocs hiányzott.

Látens Inszinuáció Creative Commons License 2018.12.08 0 0 5275

Sziasztok!

 

Egy ki segítség kellene, mert elakadtam.

Az Online Tutorials oldalon találtam egy responsive navbart.

Az a lényege, hogy mobiltelefonon ha rányomsz az ikonra, akkor balról behozza a menüt.

Meg ahogy a Móricka elképzeli!

 

Addig simán ment minden, amíg a javascript írásához nem értem.

Pedig betűről betűre begépeltem, minden újabb szekciónál teszteltem, minden sort többször is átnéztem.

Szintaktikai hibát nem találtam benne. Itt a rövid kód:

 

 

<script src="https://code.jquery.com/jquery-3.3.1.js"</script>
        <script type="text/javascript">
            $(document).ready(function(){
                $('.menu-toggle').click(function(){
                    $('nav').toggleClass('active')
                })
            })

 

 Ám az Istennek sem működik!

 

Valami ötlet?

egy hazafi Creative Commons License 2018.11.15 0 0 5274

Az a nyilak konstruktora. Valóban nem lehet rá kattintani, de még a 4 példányára (felnyil, lenyil, stb.) sem. :-/

Előzmény: NevemTeve (5273)
NevemTeve Creative Commons License 2018.11.15 0 0 5273

És mit jelent az 'Irnyil.' az 'addEventListener' előtt? Az 'Irnyil' egy függvény, nem lehet rákattintani.

Előzmény: egy hazafi (5272)
egy hazafi Creative Commons License 2018.11.15 0 0 5272

Igen, megnéztem a Google-nak a Vizsgálat lehetőségével (jobb kattintás), és ki is írt hibákat, hogy pl. "Irnyil.addEventListener is not a function" - tehát hogy ez nem egy függvény. Dehát akkor mi?

Egyébként itt a kódom: https://pastebin.com/dl/04WYv93H

Előzmény: NevemTeve (5271)
NevemTeve Creative Commons License 2018.11.15 0 0 5271

A hibaüzenetek a WebConsole vagy DeveloperTools/JavascriptLog vagy ilyesmi helyen láthatók, ez böngészőgüggő. Pl Firefox: https://developer.mozilla.org/en-US/docs/Mozilla/Debugging/Debugging_JavaScript

Előzmény: egy hazafi (5268)
egy hazafi Creative Commons License 2018.11.14 0 0 5270

Ezt a pastebin.com-os lehetőséget még nem is ismertem, de megfogadom ezt a tanácsodat és ki fogom használni, mert tényleg olvashatatlan az így beillesztett kód.

Az Irnyil egy, a function kulcsszóval megadott konstruktor. Maguk az iránynyilak egy addEventListener-es gombnyomás után jönnek létre 4 példányban. Majd ezeket egy setInterval-os ciklusban rajzolom ki. És akárhonnan hívnám az egérkezelést, az nem működik.

De majd holnap bélelőtt beillesztek a formázott kódomból is.

Előzmény: _szergej_ (5269)
_szergej_ Creative Commons License 2018.11.14 0 0 5269

0. javasolnam valamelyik codepaste szolgaltatast (pl. http://pastebin.com), mert igy a beillesztett kodreszleteid szinte kibogozhatatlanok. Oda feltoltod, ott van kodformazas, syntax highlighting, ide meg a kapott linket.

 

Nem derul ki, hogy az IrNyil pontosan milyen "osztaly" akarna lenni, de az addEventListener nem letezik csak ugy barmilyen "osztalyban" a nagyvilagbol (https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener).

Olyat csinalhatsz pl, hogy feliratkozol a "click" eventre, azt feldolgozod valamilyen fuggvenyben, ahol ellenorzod, hogy a kattintas koordinatai benne vannak-e valamelyik nyil bounding boxaban (hittest: https://en.wikipedia.org/wiki/Hit-testing), bongeszod js konzoljaban le is tesztelheted (pl: window.addEventListener("click", function(e) { console.log(e); }, false); )

Előzmény: egy hazafi (5268)
egy hazafi Creative Commons License 2018.11.14 0 0 5268

Azt el tudná valaki magyarázni nekem, hogy JavaScript-ben pontosan hová helyezhető el a

addEventListener("click", kattirnyilon, false);

utasítás?

Az a helyzet, hogy ezt rendelném hozzá 4 darab olyan objektumhoz, aminek van egy képe. Ezek a képek egy kiindulópontból mutatnak 4 irány felé, eképpen:

 |

-o-

 |

Tehát 4 darab nyílról van szó. Ezeknek van egy konstruktora, az IrNyil(). Van egy függvény, ami az objektumra kattintást kezeli, a kattirnyilon(). És már van egy addEventListener-em, ami a gombnyomást figyeli, és ha ez érzékeli a szóköz gomb lenyomását, akkor létrehozza a kiindulópontot, meg a 4 irányobjektumot köré:

 

window.addEventListener("keydown", gombnyomas, false);
function gombnyomas (gomb) {
 switch ( gomb.keyCode ) {
  case 32: if (jatekallapot == 0) {
  jatekallapot = 1;
  a_bunker = new Bunker();
  felnyil = new Irnyil(a_bunker.xhely+(bunkerkep.width/2)-(felnyilkep.width/2),a_bunker.yhely-felnyilkep.height,90);
  lenyil = new Irnyil(a_bunker.xhely+(bunkerkep.width/2)-(felnyilkep.width/2),a_bunker.yhely+bunkerkep.height,270);
  balnyil = new Irnyil(a_bunker.xhely-balranyilkep.width,a_bunker.yhely+(bunkerkep.height/2)-(balranyilkep.height/2),180);
  jobbnyil = new Irnyil(a_bunker.xhely+bunkerkep.width,a_bunker.yhely+(bunkerkep.height/2)-(jobbranyilkep.height/2),0);
  jatekoscsinalo(ennyijatekosdb);
  tereptargyak = [];
  jatekciklus();
};
break;
case 27: if (jatekallapot != 0) {
  jatekallapot = 0;
  while ( jatekostomb.length > 1 ) {
  jatekostomb.pop();
};
delete a_bunker;
jatekciklus();
};
break;
};
};

 

Tehát a kérdésem a teljes idegösszeomlás előtt az, hogy hova lehet elhelyezni ezt az említett kattintásos addEventListener-t? Addig rendben, hogy miután létrejöttek a nyíl objektumok, de ha odateszem utánuk, hogy: IrNyil.addEventListener... vagy: felnyil.addEventListener..., akkor nem is indul el a program. Akkor mégis hol kell figyelni az egéreseményt a programon belül?

egy hazafi Creative Commons License 2018.10.28 0 0 5267

Működött; még egyszer köszönöm a segítséget! A setInterval()-ra viszont mindenképpen szükség volt, anélkül nem mutatott semmit a Chrome-ban a program.

De adódott még egy probléma: a játékban a képernyő tetején egymással szemben jönnének be az ellenséges objektumok sorban, majd ha középen találkoznak, megállnának, megfordulnának másik sprite-ot kapva, és úgy támadnának a játékosra.

Namost ez működött is, egészen addig, míg be nem illesztettem ütközésérzékelést nekik, ami a megállást vezérelné, mikor szembetalálkoznak egymással. Ugyanis ha nem kommentelem ki ezt az ütközésérzékelő függvényt, akkor nem is mutatja őket a böngésző, hanem a hibakeresőjében a következő hibaüzenet olvasható:

Uncaught TypeError: Cannot read property 'kepe' of undefined

Tehát a kirajzoló függvényben nem találja a kirajzolandó példányt - legalábbis én így gondolom.

A játék fő ciklusában van az ellenségeket kirajzoló függvény, és elmozduláskor az hívja ezt a bizonyos ütközésérzékelést. Az ellenségeket kirajzoló függvény egy for ciklussal végigmegy az összes ellenségen, elmozdítja őket egy sebességértékkel, majd jön az ütközésérzékelő függvényem, ami így néz ki:

 

for (i = 0; i < ellensegtomb.length; i++) {
 if (ittx < ellensegtomb[i].xhely + (ellensegtomb[i].kepe).width &&
 ittx + (ellensegtomb[ez].kepe).width > ellensegtomb[i].xhely &&
 itty < ellensegtomb[i].yhely + (ellensegtomb[i].kepe).height &&
 (ellensegtomb[ez].kepe).height + itty > ellensegtomb[i].yhely &&
 ((ellensegtomb[ez].iranya != ellensegtomb[i].iranya) || (ellensegtomb[ez].mitcsinal != ellensegtomb[i].mitcsinal))) {
 return 1;
 }
};
return 0;

 

Ha innen eltávolítom valahogy az összes ellenségen végigpörgő for ciklust, akkor jó lesz minden, jönnek az ellenségek, csak éppen nem állnak meg, mert ugyebár nincs ütközésvizsgálat.

Most akkor mi lehet a baj és mi a megoldás rá? Egy objektum példányait végigvizsgáló cikluson belül nem lehet még egy ugyanolyan, vagy mi van?

Előzmény: _szergej_ (5265)
egy hazafi Creative Commons License 2018.10.26 0 0 5266

Köszönöm szépen; átírom a javaslatod mintájára; remélem, működni fog.

NevemTeve, sajnálom, hogy a behúzásokat kiszedte a fórum szövegszerkesztője; így valóban nehéz átlátni még a viszonylag rövid kódokat is. Ha legközelebb kódot kell beírnom, megpróbálom szóközökkel szebbé tenni.

Előzmény: _szergej_ (5265)
_szergej_ Creative Commons License 2018.10.26 0 1 5265

Ez nem a js logikaja, hanem altalanos "algoritmus-logika" (tehat js fuggetlen), azaz:

- a setInterval() fuggveny teljesen felesleges

- ugyancsak felesleges mindahanyszor beregisztralni a keyeventekre, a window.addEventListener("keydown", gombnyomas, false);-t boven eleg 1x meghivni (igaz nem tortenik baj amugy)

- a lenyeg, hogy a kepfrissitest nem idoziteshez kell kotni, hanem allapotvaltozashoz

 

Tehat a kododnak valahogy igy kene kineznie (nem felkeszitve bizonyos hulyegyerekek kotozkodesere):

 

...

var jatekallapot = 0; //címképernyő mutatása

window.addEventListener("keydown", gombnyomas, false);

 

function frissites() {
    rv.clearRect(0,0,vaszon.width,vaszon.height);
    switch ( jatekallapot ) {
      case 0:
        rv.drawImage(cimhatter,0,0,vaszon.width,vaszon.height);
        break;
      case 1:
        rv.drawImage(urhatter,0,0,vaszon.width,vaszon.height);
        break;
    }
}

function gombnyomas (gomb) {
   if ( gomb.keyCode == 32 ) {
      jatekallapot = 1;
       frissites();
   }
  if ( gomb.keyCode == 27 ) { //Esc gomb
     jatekallapot = 0;
     frissites();
  }
}

...

Előzmény: egy hazafi (5263)
NevemTeve Creative Commons License 2018.10.26 0 0 5264

Te most az egyik függvény belsejébe tettél bele két másik függvényt (bár azonos néven), vagy az indentálás elveszte miatt én nem látom át a programot?

Előzmény: egy hazafi (5263)
egy hazafi Creative Commons License 2018.10.26 0 0 5263

Ennél viszont tényleg megállt a tudományom: azt szeretném elérni, hogy kirajzolódjon egy háttérkép, aztán ha lenyomjuk a szóközt, akkor váltson állapotot a program és rajzoljon ki egy másik hátteret. Innen az Escape lenyomására lehessen visszatérni az eredeti képhez. De csak az első képet rajzolja ki, szóköz lenyomására semmit nem csinál. Mi lehet a baj a kódomban? Nem értem a JS logikáját netán?

 

<html>
<head>
<title>Hátteres</title>
</head>
<body>
<canvas id="rajzvaszon" width="640" height="480"></canvas>
<script>
var vaszon = document.getElementById('rajzvaszon');
var rv = vaszon.getContext('2d');
if (vaszon.width < window.innerWidth) {
vaszon.width = window.innerWidth;
};
if (vaszon.height < window.innerHeight) {
vaszon.height = window.innerHeight;
};
var cimhatter = new Image();
cimhatter.src = 'kepek/cimkep.png';
var urhatter = new Image();
urhatter.src = 'kepek/urhatter.png';
var jatekallapot = 0; //címképernyő mutatása
setInterval(frissites, 60);
function frissites() {
window.addEventListener("keydown", gombnyomas, false);
rv.clearRect(0,0,vaszon.width,vaszon.height);
switch ( jatekallapot ) {
case 0:
function gombnyomas (gomb) {
if ( gomb.keyCode == 32 ) {
jatekallapot = 1;
};
};
rv.drawImage(cimhatter,0,0,vaszon.width,vaszon.height);
break;
case 1:
function gombnyomas (gomb) {
if ( gomb.keyCode == 27 ) { //Esc gomb
jatekallapot = 0;
};
};
rv.drawImage(urhatter,0,0,vaszon.width,vaszon.height);
break;
};
};
</script>
</body>
</html>

egy hazafi Creative Commons License 2018.10.23 0 1 5262

Most már jó lett! A kód legvégén levő képkirajzoló ciklust a képernyőtörléssel együtt beraktam egy setInterval() közé, és most már működik minden. Azt hittem, a gombnyomás lekérdezést is így le kell ellenőrizni ciklusosan, és előzőleg azt is belevontam, de az nem kellett.

Előzmény: NevemTeve (5261)
NevemTeve Creative Commons License 2018.10.23 0 0 5261

Ezt most mégkevésbé értem: az előbb ott tartottunk, hogy hol az a programrész, ami kirajzolná a képet az új helyen, most pedig valahogy átváltottál erre a setInterval-ra.

Előzmény: egy hazafi (5260)
egy hazafi Creative Commons License 2018.10.23 0 0 5260

Kapisgálom, hogy mit akarsz: a setInterval() függvényt kéne használnom?

Megpróbáltam azt is, de így meg nem rajzol ki semmit.

Használtam így:

 

var ido = setInterval(mozgat,1000);
function mozgat() {
window.addEventListener("keydown", gombnyomas, false);

//a kód többi része

};

 

és így is:

 

setInterval (function() {

window.addEventListener("keydown", gombnyomas, false);

//a kód többi része

}, 1000);

 

de sehogy sem jó valamiért. :-(

Előzmény: NevemTeve (5259)
NevemTeve Creative Commons License 2018.10.22 0 0 5259

Milyen értelemben utána? A 'gombnyomás' függvényen belül? Mert akkor nem látom át a programodat, valószínűleg azért, mert a fórum eldobja az indentálást.

Előzmény: egy hazafi (5258)
egy hazafi Creative Commons License 2018.10.22 0 0 5258

Ezt most nem értem, hiszen utána ott van egy "for" ciklus, ami végigmegy az összes példányon - köztük aminek változtattuk a koordinátáit - , és lefut a rajzolás.

Vagy tegyem az egészet egy ciklusba? Próbáltam úgy is, hogy egy hátultesztelősbe raktam, de nem változott semmi.

Előzmény: NevemTeve (5257)
NevemTeve Creative Commons License 2018.10.22 0 0 5257

> Azt hittem, a koordináták megváltoztatása egyben új helyre való kirakást is eredményez.

 

De csak akkor, ha valaki meghívja a drawImage-t. Az teljeskep.onload-ra tett névtelen függvényed nem fog újra meg újra meghívódni.

Előzmény: egy hazafi (5256)
egy hazafi Creative Commons License 2018.10.22 0 0 5256

Pontosan mire gondolsz? Rakjak bele képernyőtörlést is? Azt hittem, a koordináták megváltoztatása egyben új helyre való kirakást is eredményez, legfeljebb megmarad az előző helyén is, ha nem törlöm a képernyőt.

Előzmény: NevemTeve (5255)
NevemTeve Creative Commons License 2018.10.22 0 0 5255

De hol van az a rész, amelyik leszedi a régi helyről, és kirakja az új helyre?

Előzmény: egy hazafi (5254)
egy hazafi Creative Commons License 2018.10.22 0 0 5254

Sziasztok!

Tudnátok segítséget adni a következő problémám megoldásához?

Egy tömbben egy objektum példányait tárolom. Ezeket véletlenszerű koordinátákra rajzolom ki a képernyőn. Eddig rendben van. De azt szeretném, ha a tömb 0. elemét alkotó példány koordinátáit lehessen a nyíl gombokkal változtatni. Na, ez viszont nem sikerül nekem, és nem tudom, hogy mi a baj; talán nem tudok értéket adni egy objektumpéldánynak tömbben? A kódrészletet mellékeltem alább:

function Kep() { //A konstruktor
this.xhely=Math.round(Math.random()*400);
this.yhely=Math.round(Math.random()*400);
};
var kiskeptomb = [];
for (i = 0; i < 5; i++) { //egy példány létrehozása a Kep objektumból
kiskeptomb.push(new Kep());
};
window.addEventListener("keydown", gombnyomas, false);
function gombnyomas (gomb) {
switch ( gomb.keyCode ) {
case 38: kiskeptomb[0].yhely -= 4; break;
case 37: kiskeptomb[0].xhely -= 4; break;
case 39: kiskeptomb[0].xhely += 4; break;
case 40: kiskeptomb[0].yhely += 4; break;
};
};
teljeskep.onload = function() {
for (i = 0; i < kiskeptomb.length; i++) {
ctx.drawImage(teljeskep,kiskeptomb[i].xhely,kiskeptomb[i].yhely,50,50);
};
};

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!