Nunja, sich ne Variable bauen die das ganze steuert.
PHP Code:
var keepMoving = true;
var move = function() {
if(keepMoving) {
move();
}
};
Normalerweise wäre das eine Möglichkeit, allerdings glaube ich das dadurch keine flüssige Animation ensteht bzw sie zu schnell ausgeführt wird. Und mit einem Sleep Befehl würde sich ein anderer Teil des Skriptes verzögern was ich vermeiden möchte.
"Sleep" gibt es in Javascript nicht. Du kannst nur asynchron programmieren.
Ja, das würde zu schnell ausgeführt - es führte (in der ersten Form) zu einem Stapelüberlauf, da es in Javascript kein gleichzeitiges Ausführen gibt: alle Funktionen und Rückrufe werden schön nacheinander ausgeführt.
function Player (x, y, speed) {
this.x = x;
this.y = y;
this.speed = speed;
}
Player.prototype.move = function (x, y) {
if (x != this.x && y != this.y) {
var dx = x - this.x;
var dy = y - this.y;
var distance = Math.sqrt (dx * dx + dy * dy);
if (distance <= this.speed) {
this.x = x;
this.y = y;
clearInterval (this.interval);
delete this.interval;
} else {
this.x += this.speed * dx / distance;
this.y += this.speed * dy / distance;
}
if (this.move_callback)
this.move_callback (this);
} else {
clearInterval (this.interval);
delete this.interval;
}
};
Player.prototype.moveTo = function (x, y) {
this.interval = setInterval (this.move.bind (this), 300 /*ms*/, x, y);
};
Player.prototype.onMoved = function (callback) {
this.move_callback = callback;
};
var player = new Player (0, 0, 1);
player.onMoved (function (player) {
console.log (new Date ().toGMTString () + " - player moved to (" + player.x + "," + player.y + ")");
});
player.moveTo (10, -5);
Es könnte auch setTimeout statt setInterval verwendet werden, dann müsste entsprechend in move erneut setTimeout aufgerufen werden, wie Synatex schrieb.
Ein sleep zu programmieren ist aber wirklich nicht schwer.
Einfach aktuelle Zeit in ne Variable und in ner while Schleife gegen die aktuelle Zeit testen, bis die aktuelle Zeit größer oder gleich der gespeicherten Zeit plus der time2wait ist.
Aber nur, falls dir der sequentielle Ansatz lieber ist.
Wem es Spaß macht, die Oberfläche einzufrieren, kann das gerne tun (sofern es im Kontext einer Seite ausgeführt wird, wie es normalerweise der Fall ist). In Javascript gibt es kaum eine synchrone Operation, nur new XMLHttpRequest ().open ("GET", url, false), alert und ein paar andere Funktionen (welche aus genau diesem Grund nicht genutzt werden sollten), sowie eine synchrone API für IndexedDB und FileSystem - aber diese beiden nur in einem WorkerGlobalScope (Thread oder Prozess). Für WebSockets etwa gibt es keine synchrone API (auch in einem WorkerGlobalScope), weil es dabei durchaus mehrere Sekunden bis zu einer Antwort brauchen kann, im Gegensatz zu einigen Millisekunden.
wenn er nur eine Verzögerung im Millisekundenbereich braucht, dann wäre diese Lösung durchaus nutzbar. Bzw. es kommt auch darauf an, wie der Rest programmiert ist...
Ich selbst habe noch nie einen solchen Sleep benötigt, kenn also die genauen Auswirkungen nicht.
[AUFRUF] An alle, die von "[Aimee]", "Blck-Sellerx" & ".Ava" betrogen worden sind! 03/23/2010 - Last Chaos - 34 Replies Hallo libe ehrlichen Member von e*PvPers!
Im LastChaos und Metin Bereich im TBM Forum soll ".Ava" mehrere Leute abgezogen haben. Nun kommen aber plötzlich Gegenstimmen in der iTrader Bewertung die positiv ausfallen von "Black-SellerX" und "" bei genauerem Hinsehen bemerkt man, dass diese 3 Forenuser sich gegenseitig immer wieder positiv bewerten, dennnoch werden diese von vielen Usern negativ bewertet. Von "" wurde ich selber betrogen, daher mein Interesse.
Deshalb vermute ich, dass hinter...