[英]change direction of animation canvas element when it reaches the width of the canvas
I am animating a rectangle across a canvas element using js. 我使用js在canvas元素上设置一个矩形动画。 I want to change the direction of the the animation when the rectangle reaches the width of the canvas but cannot work out the logic as it turns once, but then goes to the right again, essentially sticking it to the width of the canvas.
我希望在矩形达到画布宽度时改变动画的方向,但是当它转动一次时无法计算出逻辑,但是再次向右移动,基本上将它固定在画布的宽度上。
Please see the code below to get a clearer understanding: 请参阅以下代码以获得更清晰的理解:
function startGame() {
game.start();
game.createSquare('red', 100, 10, 10, 10);
}
function updateGame() {
game.clear();
//lines below are causing issues
if(game.x < game.canvas.width){
game.x++;
} else {
game.x--;
}
game.update();
}
var game = {
//create the canvas element
canvas: document.createElement('canvas'),
//set up the canvas
start: function () {
this.context = this.canvas.getContext('2d');
this.canvas.height = 400;
this.canvas.width = 400;
document.body.insertBefore(this.canvas ,document.body.childNodes[0]);
},
//clear the canvas
clear: function() {
this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
},
//create Square
createSquare: function(color, height, width, x, y) {
this.height = height;
this.width = width;
this.color = color;
this.x = x;
this.y = y;
this.update = function(){
this.context.fillStyle = this.color;
this.context.fillRect(this.x , this.y , this.width, this.height);
}
}
}
startGame();
setInterval(updateGame,50);
Only a small change is needed to make it work. 只需要进行一些小的改动就可以使它发挥作用。 Explanation in code below.
以下代码中的说明。 Working example https://jsbin.com/gafetoxapu/edit?js,output
工作示例https://jsbin.com/gafetoxapu/edit?js,output
function startGame() {
game.start();
game.createSquare('red', 100, 10, 10, 10);
}
function updateGame() {
game.clear();
//lines below are causing issues
game.x += game.delta; // set new position
// if rectangle touches right side (remember about the width of rectangle),
// or touches left side of canvas, revert direction
if(game.x > game.canvas.width - game.width || game.x <= 0){
game.delta *= -1;
}
game.update();
}
var game = {
//create the canvas element
canvas: document.createElement('canvas'),
//set up the canvas
start: function () {
this.context = this.canvas.getContext('2d');
this.canvas.height = 400;
this.canvas.width = 400;
document.body.insertBefore(this.canvas ,document.body.childNodes[0]);
},
//clear the canvas
clear: function() {
this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
},
//create Square
createSquare: function(color, height, width, x, y) {
this.height = height;
this.width = width;
this.color = color;
this.x = x;
this.y = y;
this.delta = 1; // this is speed and direction of movement
this.update = function(){
this.context.fillStyle = this.color;
this.context.fillRect(this.x , this.y , this.width, this.height);
}
}
}
startGame();
setInterval(updateGame,50);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.