Spiel funktioniert nicht in Opera/NN 7/Mozilla
Marek
- javascript
Hallo! Ich glaub das SelfHTML Forum ist meine letzte Hoffnung. Probier jetzt schon seit Stunden herum und finde den Fehler einfach nicht. Vielleicht weiß jemand Rat. Im NN7/Mozilla geht nur die Bewegung in y Richtung, nicht aber in X Richtung.
Was ich zusätzlich zu diesem kleinen Spiel einbauen würde ist, dass das Objekt nicht zu den nächsten Koordinaten springt, sondern hinfährt. Das Problem dabei ist, dass diese Koordinaten zufällig sind, sprich man sich nicht per Zahl oder so ansprechen kann. Anbei der Quelltext.
<script type="text/javascript">
function bewegung() {
var xpos = (Math.random() * (screen.availWidth - 144));
var ypos = (Math.random() * (screen.availHeight - 170));
if (document.layers) {
document.layers["box5"].left=xpos;
document.layers["box5"].top=ypos;
}
else if (document.all) {
document.all["box5"].style.posLeft=xpos;
document.all["box5"].style.posTop=ypos;
}
else if (document.getElementByName) {
document.getElementByID("box5").style.left=String(xpos);
document.getElementByID("box5").style.top=String(ypos);
}
else if (document.getElementById) {
document.getElementById("box5").setAttribute("style","left:"+xpos);
document.getElementById("box5").setAttribute("style","top:"+ypos);
}
}
function stop() {
alert("Stop");
}
</script>
hi,
zuerst mal: "funktioniert nicht" war noch nie eine ausreichende fehlerbeschreibung, und ist es auch hier nicht.
wie reagieren denn die browser darauf, fehlermeldungen ...?
else if (document.getElementByName) {
document.getElementByID("box5").style.left=String(xpos);
wozu die überprüfung auf ByName, wenn dann doch ById zum zugriff verwendet wird?
darüber hinaus darf ein name mehrmals vergeben werden, deshalb heisst es auch getElementsByName (mehrzahl bei element_s_).
else if (document.getElementById) {
darauf zu prüfen und es anschliessend zum zugriff zu verwenden, sollte m.E. ausreichend sein. dass ein browser byId versteht, ByName aber nicht, halte ich für äusserst unwahrscheinlich.
gruss,
wahsaga
Erstmal danke für die rasche Antwort. Gut dein Vorschlag brachte keine Änderung.
Zu den Fehlermeldungen: Im Opera bewegt sich nicht, das Element bleibt links oben stehen.
Im Mozilla läuft das Element rauf und runter (senkrecht) aber nicht nach links und rechts (waagrecht). IE läuft alles wie es laufen soll.
hi,
Zu den Fehlermeldungen: Im Opera bewegt sich nicht, das Element bleibt links oben stehen.
Im Mozilla läuft das Element rauf und runter (senkrecht) aber nicht nach links und rechts (waagrecht).
deine variablem xpos und ypos werden mit zahlen gefüllt - eine style-angabe erwartet aber zusätzlich die angabe einer längeneinheit.
ob der mozilla das beim einen mal durchgehen lässt, beim anderen aber nicht, weil er sich zu sehr darüber ärgert, dass du diesen fehler wiederholst - wer weiss ...?
IE läuft alles wie es laufen soll.
daran siehst du, wie "blöd" der browser ist.
er lässt dich offensichtliche fehler machen, ohne sich zu beschweren. u.a. _das_ macht ihn als entwicklungswerkzeug vollkommen untauglich.
rufe mal im mozilla mit javascript: in der adresszeile die javascript-konsole auf, oder schalte sie im opera explizit ein, würde mich wundern, wenn da nicht doch fehlermeldungen kämen ...
gruss,
wahsaga
Mozilla sagt überhaupt nix und beim Opera zeigt er einen Fehler in der ersten Zeile (ihm passt die Endung .htm nicht. Da soll jemand sagen der IE wäre schlecht. Wenigstens zeigt er die Fehler richtig an.
hi,
Mozilla sagt überhaupt nix und beim Opera zeigt er einen Fehler in der ersten Zeile (ihm passt die Endung .htm nicht. Da soll jemand sagen der IE wäre schlecht.
dann stelle bitte mal ein online-beispiel bereit, an hand dessen man das nachprüfen und genauer beurteilen kann.
Wenigstens zeigt er die Fehler richtig an.
wenn du dich mal ein bisschen öfters mit dem debuggen von javascript beschäftigt hast, wirst du, wie viele andere hier im forum auch, über _die_ aussage nur noch lächeln können.
gruss,
wahsaga
Hallo!
Unter http://www.marekknopp.com/projekt/spiel.htm findest du das Spiel.
hi,
Unter http://www.marekknopp.com/projekt/spiel.htm findest du das Spiel.
ok, hab's mir mal angesehen.
zuerst einmal: Math.random() ergibt kommazahlen, könnte ungünstig sein, sowas als px-wert einer style-eigenschaft zuordnen zu wollen.
also: noch Math.round() drumrumpacken, um ganze zahlen zu erhalten.
damit funktioniert's bei mir dann auch im firebird.
aber im opera kriege ich es auch nicht ans laufen, das bild bleibt immer an der selben stelle.
und das, obwohl eine kontrollausgabe mit alert() für
document.getElementById("box5").style.left
immer wieder den veränderten, beim vorherigen funktionsaufruf mit
document.getElementById("box5").style.left=xpos+"px";
gesetzten wert anzeigt :-/
bin jetzt auch überfragt, vielleicht weiss ja einer der anderen mitleser was? (hab mal den titel geändert, vielleicht schaut dann noch jemand anderes rein ...)
btw: fehlermeldungen bekomme ich im opera auch keine, aber wie gesagt, die zuweisung des wertes scheint ja auch zu funktionieren ...
gruss,
wahsaga
Wie würde das mit dem math.round() im fertigen Quelltext aussehen?
Moin!
else if (document.getElementByName) {
document.getElementByID("box5").style.left=String(xpos);wozu die überprüfung auf ByName, wenn dann doch ById zum zugriff verwendet wird?
Insbesondere heißt es "Id" und nicht "ID". Auf "getElementByName" abzufragen, wird immer fehlschlagen, weil es "getElementsByName" (mit "s") heißt. Außerdem ist eine Abfrage auf "getElementById" sinnvoll, wenn man hinterher diese Methode für den Zugriff nutzt.
Und noch etwas: Die Styleangaben immer mit "px" (oder sonst einer Längeneinheit) versehen hilft Wunder.
Insgesamt also: Den vierten elseif-Block wegwerfen, und den dritten ändern in
else if (document.getElementById) {
document.getElementById("box5").style.left=xpos+"px";
document.getElementById("box5").style.top=ypos+"px";
}
Und dann funktioniert das ganze auch in Opera, sogar in Version 6.
PS: Es von Marek sinnvoll gewesen, wenn er die eingearbeiteten Änderungen auch mal online gestellt hätte. Es sieht so aus, als ob er die hilfreichen Hinweise ignoriert hätte.
- Sven Rautenberg
hi,
Insgesamt also: [...]
Und dann funktioniert das ganze auch in Opera, sogar in Version 6.
das hatte ich m.E. auch so probiert, hatte aber im opera 7.23 trotzdem keinen erfolg damit.
habe ById zum zugriff verwendet, random-werte gerundet und auch px drangehängt. mit kontroll-alert konnte ich dann die geänderten px-werte sogar wieder aus der style-eigenschaft left auslesen - aber bewegt hat es sich nicht. (und auch keine fehlermeldung.)
werd mir das heute abend nochmal in ruhe ansehen ...
gruss,
wahsaga