イメージを移動させようとしていますが、定義されていないと言ってvalue
というエラーが表示され続けます。私はこの正しいことをしているのかどうかは分かりません。キャンバスで画像を移動するにはどうすればよいですか?
window.requestAnimFrame = (function(callback) {
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback) {
window.setTimeout(callback, 1000/60);
};
})();
var blueCar = new Image();
var redCar = new Image();
// images
function image(){
blueCar.src = "http://worldartsme.com/images/car-top-view-clipart-1.jpg";
redCar.src = "http://images.clipartpanda.com/car-clipart-top-view-free-vector-red-racing-car-top-view_099252_Red_racing_car_top_view.png";
}
window.onload = function draw(){
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
ctx.globalCompositeOperation = 'destination-over';
window.requestAnimationFrame(draw);
// finish line
ctx.beginPath();
ctx.moveTo(1020, 150);
ctx.lineTo(1020, 0);
ctx.strokeStyle = "#FFEF0E";
ctx.stroke();
//blue car
ctx.save();
if (blueCar.complete) {
ctx.drawImage(blueCar, 10, 10, 100, 60);
}
// red car
if (redCar.complete) {
ctx.drawImage(redCar, 10, 80, 100, 60);
}
}
//animate on click
document.getElementById('canvas').addEventListener('click', function animate(lastTime, redCar, blueCar, runAnimation, canvas, ctx) {
if (runAnimation.value) {
// update
var time = (new Date()).getTime();
var timeDiff = time - lastTime;
var redSpeed = Math.floor((Math.random() * 400) + 1);
var blueSpeed = Math.floor((Math.random() * 400) + 1);
var linearDistEachFrameRed = redSpeed * timeDiff/1000;
var linearDistEachFrameBlue = blueSpeed * timeDiff/1000;
var currentX = redCar.x;
var currentZ = blueCar.x;
if (currentX < canvas.width - redCar.width - redCar.borderWidth/2) {
var newX = currentX + linearDistEachFrameRed;
redCar.x = newX;
}
if (currentZ < canvas.width - blueCar.width - blueCar.borderWidth/2) {
var newZ = currentZ + linearDistEachFrameBlue;
blueCar.x = newZ;
}
//clear
ctx.clearRect(0, 0, canvas.width, canvas.height);
image();
requestAnimFrame(function() {
animate(time, redCar, blueCar, runAnimation, canvas, ctx);
});
}
var runAnimation = {
value: false
};
});
image();
定義する前に 'runAnimation'を使用しようとしています。また、 'if-statement'の前に値を変更したり、それを再定義したりすることはないので、' true'にすることはできません。 –
また、window.requestAnimFrame関数を定義し、後でrequestAnimationFrameを呼び出します。また、描画操作を行う前にアニメーションフレームを要求しています。最初に更新と描画を行い、新しいアニメーションフレームを要求する必要があります。更新、描画、新しいフレームのリクエスト、すすぎ、繰り返し:) – ManoDestra
SOは、あなたのために人々がちょうど「働かせる」場所ではありません –