使用 canvas 进行无限图像移动
Infinite image movement using canvas
class Obstacle {
constructor(image, x, y, w, h) {
this.image = image;
this.x = x;
this.y = y;
this.w = w;
this.h = h;
this.dx = gameSpeed;
}
animate() {
this.x += this.dx;
this.draw();
this.dx = gameSpeed;
}
draw() {
//////1
var pat = ctx.createPattern(landImage, "repeat-x");
ctx.fillStyle = pat;
ctx.fillRect(this.x, this.y, this.w, this.h);
//////2
ctx.drawImage(pat, this.x, this.y, this.w, this.h);
}
}
function update() {
requestAnimationFrame(update);
ctx.clearRect(0, 0, canvas.width, canvas.height);
... etc code...
terrain.animate();
}
function start() {
...etc code...
terrain = new Obstacle(landImage, 0, canvas.height - 20, 20000, 20);
update();
}
start();
地形图
问题
我正在尝试制作霸王龙游戏。我想让Dino(跑步者)移动时地面不断移动。
在我的代码中移动图像的不是ctx.translate()函数,而是使用requestAnimationframe()函数移动Class的'this.dx'坐标值。
写为'/////2'的第一个代码不会无限期地移动地面。
一个解决方案代码写成'/////1',但是没有用。
如何实现无限移动的土地?
我自己找到了答案。希望这个问题对阅读的人有所帮助
Reference : https://jongbeom-dev.tistory.com/109
将背景图片消失的部分存储到偏移变量中并绘制相应的坐标值,这是一个问题。
//left //right分成两部分画了背景图
animate() {
this.x += this.dx;
this.draw();
this.dx = gameSpeed;
//그림의 최대길이는 2380 * 23 (px)
if (offset > 2300) offset = 0;
else offset += this.dx;
}
draw() {
// left
ctx.drawImage(
this.image,
2380 - offset,
0,
offset,
23,
0,
canvas.height - this.h,
offset,
this.h
);
// right
ctx.drawImage(
this.image,
0,
0,
2380 - offset,
23,
offset,
canvas.height - this.h,
2380 - offset,
this.h
);
}
class Obstacle {
constructor(image, x, y, w, h) {
this.image = image;
this.x = x;
this.y = y;
this.w = w;
this.h = h;
this.dx = gameSpeed;
}
animate() {
this.x += this.dx;
this.draw();
this.dx = gameSpeed;
}
draw() {
//////1
var pat = ctx.createPattern(landImage, "repeat-x");
ctx.fillStyle = pat;
ctx.fillRect(this.x, this.y, this.w, this.h);
//////2
ctx.drawImage(pat, this.x, this.y, this.w, this.h);
}
}
function update() {
requestAnimationFrame(update);
ctx.clearRect(0, 0, canvas.width, canvas.height);
... etc code...
terrain.animate();
}
function start() {
...etc code...
terrain = new Obstacle(landImage, 0, canvas.height - 20, 20000, 20);
update();
}
start();
地形图
问题
我正在尝试制作霸王龙游戏。我想让Dino(跑步者)移动时地面不断移动。
在我的代码中移动图像的不是ctx.translate()函数,而是使用requestAnimationframe()函数移动Class的'this.dx'坐标值。
写为'/////2'的第一个代码不会无限期地移动地面。
一个解决方案代码写成'/////1',但是没有用。
如何实现无限移动的土地?
我自己找到了答案。希望这个问题对阅读的人有所帮助
Reference : https://jongbeom-dev.tistory.com/109
将背景图片消失的部分存储到偏移变量中并绘制相应的坐标值,这是一个问题。 //left //right分成两部分画了背景图
animate() {
this.x += this.dx;
this.draw();
this.dx = gameSpeed;
//그림의 최대길이는 2380 * 23 (px)
if (offset > 2300) offset = 0;
else offset += this.dx;
}
draw() {
// left
ctx.drawImage(
this.image,
2380 - offset,
0,
offset,
23,
0,
canvas.height - this.h,
offset,
this.h
);
// right
ctx.drawImage(
this.image,
0,
0,
2380 - offset,
23,
offset,
canvas.height - this.h,
2380 - offset,
this.h
);
}