- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想创建一个需要动画的游戏:首先应该在5秒后绘制一个矩形,在5秒后绘制第二个矩形,在5秒后绘制第三个矩形,在5秒后绘制第四个矩形,在4秒后绘制6-10个矩形、3秒后的10-15个矩形、2秒后的15-20个矩形和1秒后的20-25个矩形。矩形来自上方,并应以 recty
的速度运行到底部。也许这会有所帮助:jsfiddle .
var x = canvasWidth / 100;
var y = canvasHeight / 100;
b = 5000;
function init() {
recty = canvasHeight / 100 * 20;
rectx = (Math.random() *(x * 50)) + (x / 5);
rectb = (Math.random() * (x * 40)) + x * 20;
return setInterval(main_loop, 10);
}
function draw() {
rectheight = canvasHeight / 100 * 10;
ctx.clearRect(0, 0, canvasWidth, canvasHeight);
// draw triangles
ctx.beginPath();
ctx.moveTo(x * 90, y * 50);
ctx.lineTo(x * 99, y * 60);
ctx.lineTo(x * 99, y * 40);
ctx.closePath();
ctx.stroke();
}
function drawrect() {
// draw rect
ctx.beginPath();
fillStyle = "#000000";
ctx.rect(rectx, recty, rectb, rectheight);
ctx.fill();
}
function update() {
recty += 1;
if (recty > canvasHeight) {
recty = -rectheight;
rectx = (Math.random() *(x * 50)) + (x / 5);
rectb = (Math.random() *(x * 50)) + (x / 5);
b -=1000;
}
if (recty > canvasHeight) {
recty -= 1;
}
}
function main_loop() {
draw();
update();
collisiondetection();
drawrect();
}
init();
setInterval ( drawrect, b );
最佳答案
现代浏览器有一个内置计时器:requestAnimationFrame
。
requestAnimationFrame 循环大约每 16 毫秒触发一次,并给出一个非常精确的 currentTime
参数。您可以使用以下命令启动计时循环:requestAnimationFrame(Timer);
。对于您发出的每个 requestAnimationFrame,循环仅执行一次,因此您将 requestAnimationFrame 放入循环本身以保持其运行。
这是一个示例定时循环,用于计算自定时循环启动以来耗时:
// variable used to calculate elapsed time
var lastTime;
// start the first timing loop
requestAnimationFrame(Timer);
function Timer(time){
// request another timing loop
// Note: requestAnimationFrame fires only once,
// so you must request another loop inside
// each current loop
requestAnimationFrame(Timer);
// if this is the very first loop, initialize `lastTime`
if(!lastTime){lastTime=time;}
// calculate elapsed time since the last loop
var elapsedTime=time-lastTime;
}
为了使您的矩形具有“时间感知”功能,您可以为每个矩形创建一个 javascript 对象,该对象定义在所需的时间间隔绘制该矩形所需的所有内容。然后使用此 JavaScript 对象在所需的时间间隔后在所需的位置绘制矩形。
矩形对象属性示例
x,y
interval
moveByX、moveByY
这里是示例代码和演示:
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
var rects=[]
rects.push({x:10,y:10,moveByX:5,interval:500,nextMoveTime:0});
rects.push({x:10,y:50,moveByX:5,interval:1000,nextMoveTime:0});
rects.push({x:10,y:110,moveByX:5,interval:2000,nextMoveTime:0});
var isFirstLoop=true;
// start the timing loop
requestAnimationFrame(Timer);
function Timer(currentTime){
// request another timing loop
// Note: requestAnimationFrame fires only once,
// so you must request another loop inside
// each current loop
requestAnimationFrame(Timer);
if(isFirstLoop){
isFirstLoop=false;
for(var i=0;i<rects.length;i++){
rects[i].nextMoveTime=time+rects[i].interval;
}
}
ctx.clearRect(0,0,cw,ch);
for(var i=0;i<rects.length;i++){
drawRect(rects[i],currentTime);
}
}
function drawRect(r,time){
if(time>r.nextMoveTime){
r.x+=r.moveByX;
r.nextMoveTime=parseInt(time+r.interval);
}
ctx.strokeRect(r.x,r.y,110,15);
ctx.fillText('I move every '+r.interval+'ms',r.x+5,r.y+10);
}
body{ background-color: ivory; padding:10px; }
#canvas{border:1px solid red;}
<canvas id="canvas" width=300 height=300></canvas>
关于javascript - 定时矩形动画javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26996978/
我对开发领域有点陌生,我正在开发一个 Android 项目。我正在尝试使用手机相机闪光灯。我试图让它以重复的 Action 闪烁。下面是我的 .java 文件中的一个剪辑。 public vo
我正在制作一个 ios 应用程序,它是一种诗集。我想要的功能之一是定时“阅读”,因此一首诗中的单词出现的时间与我阅读时的时间相同。所以我有一个数组,里面有诗中的词,还有延迟。 现在我想遍历单词,在屏幕
这个问题在这里已经有了答案: Loop doesn't see value changed by other thread without a print statement (1 个回答) 关闭
我如何才能使用计时器?例如,我想显示某个文本 10 秒,然后我想在剩余时间内显示不同的文本。 谢谢 凯文 最佳答案 延迟操作的最简单方法是使用 NSObject 的 PerformSelector:w
我在这里的措辞上有点困难,但要点是我使用返回一个对象的 Promise.race (如下所示)。大多数时候,至少有一些 promise 会崩溃,但这是故意的。这仅意味着未找到产品。为了避免 Promi
我正在寻找定时 JDialog,它会在指定时间过后消失,并且找到的代码运行正常。 JFrame f = new JFrame(); final JDia
我试图让选择器在不同的时间轮换,我想我会尝试一个简单的 if/else 语句,让第一个选择器在 3 秒后轮换,接下来的选择器在 30 秒后轮换。然而,它只是每三秒旋转一次。如果我想出了如何完成这项工作
这个问题已经有答案了: How to implement a timer in c? (7 个回答) Creating a Timer in C (2 个回答) 已关闭 9 年前。 我需要根据用户输入
我有一个在我文档的 head 标签中调用的 javascript 文件,每隔 30 秒,我希望重新加载这个 javascript 文件。 我对此做了一些研究,似乎它在提取本地存储的文件副本或跨浏览器问
我想看看运行 bash 函数需要多长时间。在做了一些研究之后,我想出了这种使用子 shell 的方法: function test-function() { time ( rs
我正在使用 jQuery,并且我有一个 aAax 请求,如下所示; $.ajax({ type: 'POST', url: 'test.php',
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度的了解。包括尝试的解决方案、为什么它们不起作用以及预期结果
我想为系统的每笔交易制定一个程序任务,以预留15分钟的等待时间。如果超过15分钟,程序将改变状态/状态。如果状态在 15 分钟内发生变化,则结束任务。我可以应用更多更好的代码吗?比如Wait/Slee
我正在制作一个打字速度测试程序,它有一个循环需要运行 60 秒然后退出并显示结果。我读过其他关于为 C++ 程序计时的地方,但我的研究没有定论。该程序正在运行 (llbd),我希望有人有解决方案/更好
我试图在一个简单的游戏中每 0.5 - 2 秒随机创建一个障碍。我已经有了创建障碍的功能,但我无法为实例化计时。我试过研究这个,但我还没有想出任何相关的东西。你们能帮帮我吗? 最佳答案 您可以使用 p
我有以下测试,在运行特别长的 fib 断言时不会失败。 未正确失败的测试 #!/usr/env/bin python2.7 import unittest from fib import fib fr
我想知道这是否可行。有没有一种方法可以使用 PHP 每 24 小时更新一次行的值。为什么?我正在创建一个使用在线货币(称为 Yads)的 child 网站。 Row 的值是用户拥有的 Yad 数量。
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
有 Cron API 这样的东西吗? 我的意思是,是否有一种编程方式可以在不影响 Cron 的情况下添加/删除 Cron 作业? 最佳答案 UNIX cron 的 API 是文件系统。有一个用于安装/
1、SpringBoot:集成Swagger终极版 学习目标: 了解Swagger的概念及作用 掌握在项目中集成Swagger自动生成API文档 1.1、Sw
我是一名优秀的程序员,十分优秀!