我是使用javascript和canvas的相對初學者。我會盡力解釋我迄今爲止所做的。我有一個外部樣式表,並且我已經設置了canvas元素的背景(它是一條延伸到地平線中的道路的背景圖像)。然後,我創建了這個第一個函數(drawRoad()),在道路中心畫出一條細白色的白色條紋,並將其與道路一起拖入地平線。然後我創建了另一個函數(roadLines()),它在這個白色條中插入空格。我很高興看到它到目前爲止的樣子。使用.clearRect(x,y,w,h)的canvas動畫
我現在要做的就是運行一個循環... drawRoad(),然後roadLines(),然後清空畫布,然後再次繪製路徑(),然後更改roadLines()的位置和再次調用該函數。我想要垂直向下移動roadline()的位置,以便它能夠沿着道路行駛。 (我希望這是有道理的?)我正在以正確的方式去做這件事嗎?還是有一種更簡單的方式來做到這一點,我完全忽略了?
任何建議將不勝感激。以下是我迄今爲止所做的。另外,函數animate()在底部,但它所做的只是調用drawRoad(),然後調用roadLines()。
window.requestAnimFrame = (function (callback) {
return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||
function (callback) {
window.setTimeout(callback, 1);
};})();
// set function that draws in the canvas
function drawRoad() {
var myCanvas = document.getElementById("myCanvas");
var ctx = myCanvas.getContext("2d");
ctx.clearRect(0, 0, myCanvas.width, myCanvas.height);
ctx.beginPath();
ctx.moveTo(471, 199);
ctx.lineTo(467, 600);
ctx.lineTo(475, 600);
ctx.closePath();
ctx.fillStyle = "rgb(255, 255, 255)";
ctx.fill();
ctx.lineWidth = 1;
ctx.strokeStyle = "rgb(255, 255, 255)";
}
//set variables and function/for loop that creates the spacing/intervals for road markings and movement
function roadLines() {
var interval = 1;
var space = 1;
var myCanvas = document.getElementById("myCanvas");
var ctx = myCanvas.getContext("2d");
for (var roadLine = 199; roadLine < 600; roadLine = roadLine + interval) {
interval = (interval * 1.1);
space = (space * 1.05);
ctx.clearRect(450, roadLine, 40, space);
}
}
function animate() {
drawRoad();
roadLines();
}
您必須更改兩次通話之間的「某事」。我會說在你的路線圖中增加一個偏移量,你在每個遊戲步驟中增加一個,然後你調用roadLines(偏移量)。 – GameAlchemist