Estoy construyendo un juego de lienzo. En esto quiero deslizar la imagen de fondo en un bucle. No sé cómo hacer esto usando javascript. Usaré una sola imagen que se deslizará continuamente en el fondo. Gracias de antemano.desplazamiento/deslizamiento de fondo en lienzo html5
Respuesta
Hay algunas maneras de lograr esto: el primero tendrá un golpe de rendimiento usando putImageData
, el segundo método solo usa drawImage
. También tenga en cuenta que el segundo método tiene el código para hacer que vaya de izquierda a derecha o de derecha a izquierda.
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);
}
segundo método utiliza el mismo código que el anterior, sólo cambia estas dos funciones a la siguiente.
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);
}
Hola Loktar, gracias por la respuesta. ¿Podría decirme cómo invertir la dirección (de derecha a izquierda)? Lo intenté pero no tuve éxito. – rgolekar
@ user1451031 Edité mi respuesta y la agregué al segundo método bajo el comentario '// Para ir hacia el otro lado' ya que el segundo método es el que funciona mejor. – Loktar
@ Loktar muchas gracias. Me salvaste el día :) – rgolekar
- 1. ¿Desgarro en el lienzo HTML5?
- 2. "Borrado" en el lienzo html5
- 3. Lienzo dentro de lienzo de html5
- 4. unidades de lienzo html5
- 5. inspector de lienzo HTML5?
- 6. Traducir un lienzo html5
- 7. HTML5 getImageData sin lienzo
- 8. HTML5 círculo lienzo texto
- 9. html5 - arrastre un lienzo
- 10. HTML5 Crear dinámicamente lienzo
- 11. Impresión de un lienzo html5?
- 12. cómo editar píxeles y eliminar fondo blanco en una imagen de lienzo en html5 y javascript
- 13. ¿Un elemento de lienzo html5 en el fondo de mi página?
- 14. Agregar elementos al lienzo html5
- 15. "googlemaps" arrastrando con lienzo html5
- 16. Similitudes entre el lienzo HTML5 y el lienzo de Android
- 17. Desplazamiento personalizado en el lienzo html5
- 18. Rectángulo en HTML5 El lienzo está estirado
- 19. Cómo centrar el lienzo en html5
- 20. Dibujar texto girado en un lienzo HTML5
- 21. Curvas rotas en Html5 Lienzo Bezier
- 22. Cómo dibujar polígonos en un lienzo HTML5?
- 23. Raphael lienzo (fondo) onclick evento
- 24. Dibujar cuadrícula/tabla en lienzo HTML5
- 25. ¿Cómo hago un lienzo transparente en html5?
- 26. Eventos de objeto de lienzo HTML5
- 27. Base PNG de datos al lienzo HTML5
- 28. html5 - elemento de lienzo - Varias capas
- 29. Cómo deshabilitar seleccionar elemento de lienzo html5
- 30. HTML5 drawimage de video a lienzo
no estoy seguro de que podría deslizarse de forma continua una imagen - se puede deslizar dos mitades que se unen a la perfección en los bordes. – Widor
@Coulton no hay ninguna razón para usar jQuery no hace nada con el lienzo. – Loktar
@Widor Definitivamente puede usar una sola imagen, solo copia partes de ella en el lienzo creando el efecto perfecto. – Loktar