Ich habe ein einfaches 2D-Spiel mit reinem JavaScript erstellt. Mein Problem ist, wenn das Sprite aufhört sich zu bewegen, ist es manchmal verschwommen, manchmal nicht. Ich verwende requestAnimationFrame
, um die Sprite- und keydown/keyup
Ereignisse zu verschieben. Wenn die Tastenbetätigung ausgelöst wird, hört das Sprite auf, sich zu bewegen, und die Standardkachel wird gesetzt, manchmal wird sie jedoch unscharf angezeigt. Warum ist mein Sprite verschwommen, wenn Sie requestAnimationFrame verwenden, um es zu verschieben?
Warum ist mein Sprite verschwommen, wenn Sie requestAnimationFrame verwenden, um es zu verschieben?
Antwort
Da Sie kein minimales Codebeispiel gepostet haben und ich nicht den rohen Code durchgehen möchte, den Sie verlinkt haben, bleibt dies eine Vermutung (ein gebildeter).
Dies passiert im Allgemeinen, wenn Sie Ihre Sprites auf schwebenden Koordinaten zeichnen.
Da es keine Möglichkeit gibt, auf einem halben Pixel zu zeichnen, ist das Pixel die kleinste Einheit in der Leinwand, um Zeichnungen zu glätten. Der Browser wird standardmäßig Antialias-Artefakte erzeugen, wodurch einige Pixel weniger opak werden, sodass Ihre Augen denken, dass es halbiert ist ein Pixel. Während das bei realistischen Fotos meistens gut funktioniert, geht es bei Pixel-Art überhaupt nicht.
Die Lösung ist dann entweder um alle Ihre Koordinaten zu runden, oder wenn Sie faul sind, um die imageSmoothingEnabled Eigenschaft Ihres Kontexts festzulegen.
var img = new Image();
img.onload = draw;
function draw(){
i = .316252;
blurred.width = round.width = noAntiAlias.width = img.width +20;
blurred.height = round.height = noAntiAlias.height = img.height +20;
blurred.getContext('2d').drawImage(img, 10+i, 20+i);
round.getContext('2d').drawImage(img, 10, 20);
var nA = noAntiAlias.getContext('2d');
nA.mozImageSmoothingEnabled = nA.msImageSmoothingEnabled = nA.webkitImageSmoothingEnabled = nA.imageSmoothingEnabled = false;
noAntiAlias.getContext('2d').drawImage(img, 10+i, 20+i);
};
img.src = "https://dl.dropboxusercontent.com/s/4e90e48s5vtmfbd/aaa.png";
<canvas id="blurred"></canvas>
<canvas id="round"></canvas>
<canvas id="noAntiAlias"></canvas>
Ps: das machte mir klar, dass irgendwie mein FF nicht dieses besondere Bild ist glatt ich verwenden ... Wenn jemand in den Kommentaren bestätigen kann, würde ich mich freuen, zu graben dies bei Bedarf weiter.
Ich fand tatsächlich, dass FF imageSmoothing auf Leinwand kleiner als 128 * 128px, seltsam deaktiviert. – Kaiido
- 1. Warum ist mein UIImageView verschwommen?
- 2. SVG-Bild wird verschwommen und flackert, wenn Sie css-Transformation verwenden, um zu verschieben
- 3. Warum springt mein Sprite?
- 4. Animation - Text verschwommen, wenn es zu scrollen
- 5. Verwenden Sie SHAppBarMessage, um Taskleiste zu verschieben
- 6. Reagiert requestAnimationFrame? Wenn ja, wie benutzt es es?
- 7. So verschieben Sie ein Sprite in Pygame
- 8. Übergroßes Bild ist verschwommen, wenn es reduziert wird
- 9. Warum beschleunigt sich mein Sprite, ohne Variablen zu ändern?
- 10. Verwenden Sie Try und Catch, um vergangene Fehler zu verschieben
- 11. Wann sollte requestAnimationFrame verwendet werden? und warum brauchen wir requestAnimationFrame, wenn wir einen css-Übergang hatten?
- 12. Ist es möglich, eine Binärdatei zu verschieben?
- 13. Warum ist es nicht erforderlich, Schließung zu verwenden, wenn Sie (ES6) verwenden?
- 14. Ist es sicher, size_t zu verwenden, um den Vektorindex zu verschieben?
- 15. Verwenden Sie die Spring-Integration, um das Dateiobjekt zu verschieben
- 16. Change Sprite Anchorpoint ohne es zu bewegen?
- 17. Warum ist es nicht möglich, mein Azure Dashboard zu veröffentlichen?
- 18. Verwenden von setInterval mit requestAnimationFrame
- 19. Warum ist alles in WPF verschwommen?
- 20. Warum ist mein Sprite-Bild kaputt [x], aber es wird auch das Bild angezeigt?
- 21. Warum funktioniert mein PHP-Skript, wenn es offline ist, aber nicht, wenn es online ist?
- 22. Ausgewählten Text ziehen, um es zu verschieben?
- 23. Ist es möglich, eine Goroutine zu verschieben?
- 24. SDL2: Ist es schlecht, alles zu verschieben, anstatt den View-Port zu verwenden?
- 25. SQL: Ist es effizient, tinyint anstelle von Integer zu verwenden, wenn mein Maximalwert 255 ist?
- 26. Warum App.config verwenden, um Konfigurationsdaten zu speichern?
- 27. Smooth requestAnimationFrame mit Jquery.animate?
- 28. Warum Chinesisch verstümmelt, wenn Webpy verwenden, aber es ist normal, wenn MySQLdb verwenden?
- 29. Warum ist mein Präzisionsweblayout ungenau?
- 30. Ist es möglich, ein Icon zu verschieben?
welcher Browser? funktioniert gut in firefox Windows 64bit –
Es ist vielleicht Ihr Monitor grau zu grau Übergang –
Können Sie Screenshots des Problems? – qxz