Sto costruendo un gioco di tela. In questo voglio far scorrere l'immagine di sfondo in un loop. Non so come farlo usando javascript. Userò una singola immagine che scorrerà continuamente sullo sfondo. Grazie in anticipo.scrolling/sliding background in html5 canvas
risposta
Ci sono alcuni modi per raggiungere questo obiettivo, il primo subirà un calo di prestazioni utilizzando putImageData
, il secondo metodo utilizza solo drawImage
. Nota anche che il 2 ° metodo ha il codice per farlo andare da sinistra a destra, o da destra a sinistra.
http://www.somethinghitme.com/projects/bgscroll/
var ctx = document.getElementById("canvas").getContext("2d"),
canvasTemp = document.createElement("canvas"),
scrollImg = new Image(),
tempContext = canvasTemp.getContext("2d"),
imgWidth = 0,
imgHeight =0,
imageData = {},
canvasWidth = 600,
canvasHeight = 240,
scrollVal = 0,
speed =2;
scrollImg.src = "citybg.png";
scrollImg.onload = loadImage;
function loadImage(){
imgWidth = scrollImg.width,
imgHeight = scrollImg.height;
canvasTemp.width = imgWidth;
canvasTemp.height = imgHeight;
tempContext.drawImage(scrollImg, 0,0, imgWidth, imgHeight);
imageData = tempContext.getImageData(0,0,imgWidth,imgHeight);
render();
}
function render(){
ctx.clearRect(0,0,canvasWidth,canvasHeight);
if(scrollVal >= canvasWidth-speed){
scrollVal = 0;
}
scrollVal+=speed;
// This is the bread and butter, you have to make sure the imagedata isnt larger than the canvas your putting image data to.
imageData = tempContext.getImageData(canvasWidth-scrollVal,0,scrollVal,canvasHeight);
ctx.putImageData(imageData, 0,0,0,0,scrollVal, imgHeight);
imageData = tempContext.getImageData(0,0,canvasWidth-scrollVal,canvasHeight);
ctx.putImageData(imageData, scrollVal,0,0,0,canvasWidth-scrollVal, imgHeight);
setTimeout(function(){render();},10);
}
2a Metodo utilizza lo stesso codice come sopra, basta cambiare queste due funzioni di seguito.
http://www.somethinghitme.com/projects/bgscroll/scrolldrawimage.html
function loadImage(){
imgWidth = scrollImg.width,
imgHeight = scrollImg.height;
canvasTemp.width = imgWidth;
canvasTemp.height = imgHeight;
render();
}
function render(){
ctx.clearRect(0,0,canvasWidth,canvasHeight);
if(scrollVal >= canvasWidth){
scrollVal = 0;
}
scrollVal+=speed;
ctx.drawImage(scrollImg,canvasWidth-scrollVal,0,scrollVal,imgHeight, 0, 0, scrollVal,imgHeight);
ctx.drawImage(scrollImg,scrollVal,0,imgWidth, imgHeight);
// To go the other way instead
ctx.drawImage(scrollImg,-scrollVal,0,imgWidth, imgHeight);
ctx.drawImage(scrollImg,canvasWidth-scrollVal,0,imgWidth, imgHeight);
setTimeout(function(){render();},10);
}
Ciao Loktar, grazie per la risposta. Potresti dirmi come invertire la direzione (da destra a sinistra). L'ho provato ma senza successo. – rgolekar
@ user1451031 Ho modificato la mia risposta e l'ho aggiunta al secondo metodo sotto il commento '// Per andare dall'altra parte 'dal momento che il secondo metodo è quello che funziona meglio. – Loktar
@ Loktar, grazie mille. Mi hai salvato la giornata :) – rgolekar
- 1. HTML5 Canvas background image
- 2. Threejs canvas background black
- 3. GIF animato in HTML5 canvas
- 4. Motion jpeg in html5 canvas
- 5. Rendering PDF in HTML5 Canvas
- 6. Word Wrapping in HTML5 Canvas
- 7. HTML5 canvas to PDF
- 8. HTML5 Compositing canvas (origine)
- 9. HTML5 Gomma per canvas
- 10. Ispettore canvas HTML5?
- 11. HTML5 Canvas: Degree Symbol
- 12. Dart HTML5 Canvas Library?
- 13. HTML5 Canvas Transformation Matrix
- 14. Crea HTML5 Canvas programmazione
- 15. Limitazioni di Html5 Canvas
- 16. html5 canvas strokeStyle?
- 17. Somiglianze tra Canvas HTML5 e Canvas Android
- 18. Eventi oggetto canvas HTML5
- 19. HTML5 canvas "reset" fillStyle
- 20. HTML5 crea dinamicamente Canvas
- 21. Raphael canvas (background) onclick event
- 22. Canvas HTML5, converti canvas in PDF con jspdf.js
- 23. HTML5 Canvas alfa maschera mobile
- 24. Canvas e HTML5: browser supportati?
- 25. HTML5 canvas Evento di mouseover
- 26. Sito Screenshot (HTML5 Canvas/Servizi)
- 27. Nuovo supporto API HTML5 Canvas
- 28. ridisegnando canvas HTML5 senza sfarfallio
- 29. Immagine su Canvas/Conversione HTML5
- 30. HTML5 Canvas toDataURL restituisce vuoto
io non sono sicuro che si potrebbe far scorrere continuamente una sola immagine - si può far scorrere due metà che uniscono perfettamente ai bordi. – Widor
@Coulton non c'è motivo di usare jQuery non fa nulla con la tela. – Loktar
@Widor È possibile utilizzare definitivamente un'immagine, è sufficiente copiarne alcune parti sulla tela per creare l'effetto continuo. – Loktar