Buduję grę na płótnie. W tym chcę przesunąć obraz tła w pętli. Nie wiem, jak to zrobić za pomocą javascript. Będę używał pojedynczego obrazu, który będzie przesuwał się ciągle w tle. Z góry dzięki.przewijanie/przesuwanie tła w płótnie html5
Odpowiedz
Istnieje kilka sposobów, aby to osiągnąć, pierwszy z nich osiągnie wydajność za pomocą putImageData
, druga metoda po prostu używa drawImage
. Zauważ również, że druga metoda ma kod, który umożliwia przejście od lewej do prawej lub od prawej do lewej.
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);
}
2-ta Metoda wykorzystuje ten sam kod jak wyżej, tylko zmienić te dwie funkcje poniżej.
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);
}
Cześć Loktar, dzięki za odpowiedź. Czy możesz mi powiedzieć, jak odwrócić kierunek (od prawej do lewej). Próbowałem, ale bez powodzenia. – rgolekar
@ user1451031 Edytowałem swoją odpowiedź i dodałem ją do drugiej metody pod komentarzem "// Aby przejść w drugą stronę", ponieważ druga metoda to ta, która działa lepiej. – Loktar
@ Loktar wielkie dzięki. Uratowałeś mi dzień :) – rgolekar
- 1. HTML5 generowanie obrazu tła na płótnie
- 2. Zawijanie słów w płótnie HTML5
- 3. wyraźna linia na płótnie HTML5
- 4. Zdarzenie kliknięcia obrazu w płótnie HTML5
- 5. Kompozycja HTML5 na płótnie (źródło-w)
- 6. Przewijanie w poziomie na płótnie. HTML5
- 7. Rysowanie krzywych strzałek w płótnie HTML5
- 8. Obraz tła w tle HTML5
- 9. Powtórzenie obrazu tła HTML5
- 10. Wyświetlanie obrazu tła na płótnie atramentowym UWP
- 11. Rysuj tabelę/tabelę na płótnie HTML5
- 12. Efekt rozmycia tła z plamami na płótnie
- 13. Nice Przeciągnij i upuść na płótnie HTML5
- 14. Jak dodać obramowanie na płótnie HTML5 "Tekst?
- 15. HTML5 jak narysować przezroczysty obraz piksela na płótnie
- 16. Rysowanie strzałki na płótnie HTML5 między dwoma obiektami
- 17. Wydajność w grach na płótnie HTML5 a alternatywy
- 18. Niechciane linie pojawiające się w płótnie html5 przy użyciu kafelków
- 19. JavaScript HTML5 Capture keyCode i pisać na płótnie
- 20. Zrzut ekranu z filmem HTML5 na płótnie za pomocą CORS
- 21. HTML5, JavaScript i rysowanie wielu prostokątów na płótnie
- 22. Nie można rysować na płótnie HTML5 za pomocą Phonegap 2.7
- 23. przeciąganie i zmienianie rozmiaru obrazu na płótnie html5
- 24. Zmiana kursora na płótnie HTML5 podczas przeciągania myszą
- 25. Kontynuuj odtwarzanie dźwięku z odtwarzacza html5 w trybie tła iOS.
- 26. różne strony w grze płótnie
- 27. Układanie bitmapy na płótnie
- 28. jak edytować piksele i usunąć białe tło w obrazie na płótnie w html5 i javascript
- 29. Obrysuj kolor tła na płótnie w Raphael za pomocą papieru o zmiennej wartości
- 30. Stwórz prostą grę 2D w HTML5/na płótnie. Zalecany jest silnik gry?
Nie jestem pewien, można stale przesuwać jeden obraz - można przesunąć dwie połówki które łączą bezproblemowo na krawędziach. – Widor
@Coulton nie ma powodu, aby używać jQuery nie robi nic z płótnem. – Loktar
@Widor Z całą pewnością możesz użyć jednego obrazu, po prostu skopiuj jego fragmenty na płótno, tworząc płynny efekt. – Loktar