2Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
9
9
ZUGRIFFE
282
282
EMPFEHLEN
-
Hallo,
ich habe derzeit folgendes Problem. Mein Script sieht aktuell wie folgt aus:
Das funktioniert schon ganz gut, nur leider sieht es nicht so aus, als würde sich die Spielfigur auch wirklich bewegen. Ich müsste es also irgendwie realisieren, dass sich der Hintergrund (bzw. dessen Position, weil ich Sprites verwende) ändert. Also wieder zurück auf den Ursprungswert (-19px) stellt. Nur weiss ich beim Besten Willen nicht wie ich es anstellen soll.HTML-Code:function gameplay_start(event) { var current_position_x = document.getElementById('user').offsetTop; var current_position_y = document.getElementById('user').offsetLeft; /** Spielfigur nach rechts bewegen, solange die Taste gedrückt wird */ if(event.keyCode == 39) { document.getElementById('user').style.width = '20px'; var new_position = current_position_y + 10; document.getElementById('user').style.left = new_position + 'px'; document.getElementById('user').style.backgroundPosition = '-36px 0'; } } function gameplay_stop(event) { /** Spielfigur anhalten, wenn Taste (nach rechts) losgelassen wird */ if(event.keyCode == 39) { document.getElementById('user').style.width = '17px'; document.getElementById('user').style.backgroundPosition = '-19px 0'; } }
Folgender Ablauf soll also dargestellt werden:
- wenn Taste (nach rechts, ID:39) gedrückt wird, dann wechsle die Hintergrundbild-Position auf -19px (denn an dieser Stelle schaut die Spielfigur nach rechts)
- solange wie die Taste (39) gedrückt wird, soll sich die Hintergrundbild-Position zwischen -19px und -36px immmerwieder wechseln
Ich hoffe ihr könnt mir helfen. Würde mich darüber sehr freuen! Vielen Dank schonmal im voraus.Geändert von ricounltd (30.10.11 um 18:41 Uhr)
-
Mach folgendes:
Wenn die 39 gedrückt wurde (keydown), starte einen Timer mittel setInterval. Bei jedem Auslösen wechselst du die Hintergrund position.
Wenn eine Taste losgelassen wird (keyup), stoppst du den Timer mittels clearInterval.
-
...ok, danke. Aber wie mache ich das denn? So etwa:
Wie kommt der dann aber wieder auf den Wert "-19px" zurück? Bin ein echter Anfänger in diesem Bereich.HTML-Code:setInterval(document.getElementById('user').style.backgroundPosition = '-36px 0',500);
-
Ungetesteter Code
Code javascript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
var userElem = document.getElementById('user'), animate = false, pos = -19, timer = null; document.onkeydown = function(e) { e = e || window.event; if((e.which || e.keyCode) === 19) { timer = setInterval('animate()', 500); } } document.onkeyup = function() { clearInterval(timer); } function animate() { pos = (pos === -19) ? -36 : -19; userElem.backgroundPosition = pos + 'px 0px'; }
-
Oh man, da seh ich ja nicht durch - was soll der Code bedeuten? Funktioniert auch nicht so wie du ihn gepostet hast. Aber sag mal wo wir gerade dabei sind... ist es eigentlich möglich in einem externen Script zu prüfen, ob eine Taste gedrückt wird/wurde und welche es ist oder funktioniert das nur in dem ich im Body-Tag mit dem Event-Handler "onkeydown" eine Funktion aufrufe und diese dann nur prüfen kann, welche Taste gedrückt wurde?
~edit: ich hab das mal mit dem "document.getElementById" als "var" getestet und das funktioniert nicht, das Element kann ich so in Funktionen nicht nutzen, keine Ahnung was ich falsch mache -.-Geändert von ricounltd (30.10.11 um 20:26 Uhr)
-
Meinen Code kannst du so in eine externe Datei kopieren.
Es gibt drei Möglichkeiten einen Event-Handler zu definieren
1. Im Dokument als Attribut. Wie du beschrieben hast, man gibt z.B. beim body-Element dem Attribut "onkeydown" den Namen einer JavaScript Funktion.
2. Im Code, in dem man dem DOM Element die entsprechende Eigenschaft gibt. Das habe ich in meinem Code gemacht (document.onkeydown = ...). Das würde z.B. auch mit dem "user" Element funktionieren.
3. Im Code, in dem man beliebig viele Event Handler mittels "addEventListener" an ein DOM Element hängt. Das Funktion z.B. nicht im IE, da muss man "attachEvent" benutzen.
Ich habe meinen Code jetzt mal getestet und er war leicht fehlerhaft. Habe ihn geändert.
Code javascript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
var userElem = document.getElementById('user'), animate = false, pos = -19, timer = null; document.onkeydown = onKeyDown; document.onkeyup = onKeyUp; function onKeyDown(e) { e = e || window.event; if((e.which || e.keyCode) === 39) { timer = setInterval('onTimer()', 500); } //Funktion entfernen, weil wir weitere Tastendrucke ignorieren document.onkeydown = null; } function onKeyUp(e) { clearInterval(timer); //Funktion wieder dran hängen document.onkeydown = onKeyDown; } function onTimer() { pos = (pos === -19) ? -36 : -19; userElem.style.backgroundPosition = pos + 'px 0px'; }
Und den Code habe ich in diese HTML Datei eingebunden.
HTML-Code:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> <title>Animation</title> <style type="text/css"> #user { width:100px; height:100px; background:url(img.jpg) left top no-repeat; } </style> </head> <body> <div id="user"></div> <script type="text/javascript" src="anim.js"></script> </body> </html>
-
Tut mir echt leid, aber das ganze funktioniert so nicht. Ich kann diesen Code in eine externe Javascript-Datei packen:
und es funktioniert nicht einmal!HTML-Code:document.onkeydown = meine_funktion(); function meine_function() { alert('hallo welt!'); }
Ich muss es immer im Body-Tag angeben:
Ich versteh das nicht?!HTML-Code:<body onkeydown="meine_function();">
Wenn ich den JS-Code von oben in die HTML-Datei schreibe (also nicht extern auslagere) funktioniert es jedoch. Meine externe JS-Datei binde ich wie folgt ein:
~edit: Habe soeben bemerkt, dass wenn ich den Code mit "onkeydown" und der Funktion an den Anfang der Datei setze führt er es aus, aber sobald ich Variablen davor definiere, dann tut es er dies nicht mehr.HTML-Code:<script type="text/javascript" src="rsrc/js/script.js"></script>
Geändert von ricounltd (30.10.11 um 23:15 Uhr)
-
Vergleiche mal die beiden Zeilen, eine von mir und eine von dir.
Code javascript:1 2 3
document.onkeydown = onKeyDown; document.onkeydown = meine_funktion();
Fällt dir was auf?
JavaScript wird gestoppt, sobald ein Fehler auftritt. Also hast du vermutlich bei der Variablen Deklaration einen Fehler. Zeig mal den Code.
-
Hey,
also ich hab den Fehler gefunden. Die Klammern () waren überflüssig und ich musste das Einbinden des externen JS-Codes vor dem schliessenden </body>-Tag verschieben.
-
Also funktioniert jetzt alles wie du wolltest?
Der Browser geht von oben nach unten vor und parst das HTML. Sobald er auf ein Script Tag stößt, führt er es aus. Wenn du das Script vor dem "#user" Element einbindest, wurde dieses noch gar nicht geparst und es wird deshalb nicht gefunden.
Anstatt das Skript ans Ende des Dokumentes zu setzen, könnten du z.B. auch den ganzen Code in eine body-onload Funktion stecken. Denn wenn diese ausgeführt wird, sind auf jeden Fall alle Element geparst worden.
Ähnliche Themen
-
Beim Klick Hintergrund wechseln
Von h4dhunTer im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 27.12.07, 01:50 -
Augenpaar-bewegung animieren
Von bastiman im Forum Cinema 4DAntworten: 2Letzter Beitrag: 25.08.07, 11:22 -
mausrad bewegung simulieren
Von BIG_Muzzy im Forum Visual Basic 6.0Antworten: 12Letzter Beitrag: 02.08.05, 19:20 -
Bewegung von Wasser-Map animieren
Von tganter im Forum 3D Studio MaxAntworten: 6Letzter Beitrag: 01.10.04, 07:59 -
Desktop Hintergrund wechseln
Von gRaf-eny im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 20.09.04, 17:06





Zitieren


Login





