gpt4 book ai didi

javascript - 动画图像以创建下雨效果

转载 作者:太空宇宙 更新时间:2023-11-04 16:06:13 24 4
gpt4 key购买 nike

我正在尝试使用 HTML5 Canvas 使用 javascript 编写足够简单的动画。这是我想要无缝制作动画的雨滴图像。这是图像:

https://s31.postimg.org/475z12nyj/raindrops.png

这就是我目前制作动画的方式:

function Background() {
this.x = 0, this.y = 0, this.w = bg.width, this.h = bg.height;
this.render = function() {
ctx.drawImage(bg, 0, this.y++);
if (this.y <= -199) { //If image moves out of canvas, reset position to 0
this.y = 0;
}
}
}

不过我面临两个问题。

  • 我根本无法让图像循环播放。它只会倒下一次,我需要让它循环播放,这样当它开始离开 Canvas 时它会再次继续。
  • 一旦我知道如何正确地循环它,就会出现雨不应该完全垂直落下的问题。它需要像图片中的雨滴那样沿对 Angular 线落下。

这是一个足够简单的动画。

这是我的 fiddle ,它包括我所有的代码。非常感谢。

PS:我会在我能得到的 Javascript 或 CSS 方面寻求任何帮助。但我确实需要下雨效果才能仅使用图像!不幸的是,我不能接受任何其他东西。

最佳答案

我建议将您的循环拆分成一个分别调用 update() 和 draw() 的动画循环。在 update() 中更新您的状态,然后在 draw() 中呈现该状态。

像这样的东西(有点破烂,但你也许可以让它变得更好 :)):

var lastTick = 0;
var position = { x:0, y:0 };
var bg = document.getElementById('bg');
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');

function update(gameTime) {
position.x += (70 * gameTime.diff / 1000);
position.y += (110 * gameTime.diff / 1000);
if (position.x > canvas.width) {
position.x = 0;
}

if (position.y > canvas.height) {
position.y = 0;
}
}

function draw(gameTime) {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(bg, position.x, position.y, canvas.width, canvas.height);
ctx.drawImage(bg, position.x - canvas.width, position.y, canvas.width, canvas.height);
ctx.drawImage(bg, position.x, position.y - canvas.height, canvas.width, canvas.height);
ctx.drawImage(bg, position.x - canvas.width, position.y - canvas.height, canvas.width, canvas.height);
}

function loop(tick) {
var diff = tick - lastTick;
var gameTime = { tick:tick, diff:diff };
update(gameTime);
draw(gameTime);
requestAnimationFrame(loop);
lastTick = tick;
}

requestAnimationFrame(loop);
<title>Rain</title>
<meta charset="UTF-8">
<style>
canvas {
width:100vw;
height:100vh;
}
</style>
<img id="bg" src="https://s31.postimg.org/475z12nyj/raindrops.png" style="display:none;">
<canvas id="canvas"><h1>Canvas not supported</h1></canvas>

关于javascript - 动画图像以创建下雨效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37951649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com