Bug animation Javascript
Bug animation Javascript
我觉得这是bug模拟器的良好基础,但我没有得到我想要的动画动作。
使用画布在动画中创建移动流体运动的最佳方法是什么。
我是javascript的新手,只是在闲逛,所以任何关于改进我的编码标准的建议都是受欢迎的。
感谢
http://jsfiddle.net/UmSss/11/
HTML
<canvas width="578" height="200" margin="3px" id="targer" style="border: 1px solid black;"></canvas>
JAVASCRIPT
var canvas = document.getElementById('targer');
function bugObj(x, y, size) {
this.x = x;
this.y = y;
this.size = size;
this.update = function(move) {
var p = Math.floor((Math.random()*3)-1) + this.x;
var q = Math.floor((Math.random()*3)-1) + this.y;
if (p > canvas.width) { p = canvas.width };
if (p < 0) { p = 0 };
if (q > canvas.height) { q = canvas.height };
if (q < 0) { q = 0 };
this.x = p;
this.y = q;
}
return this;
}
function popBugs(){
var bug;
var ctv = canvas.getContext('2d');
ctv.fillStyle = 'black';
ctv.fillRect(0, 0, canvas.width, canvas.height);
for(var i = 0; bug = bugs[i]; i++) {
ctv.fillStyle = 'yellow';
ctv.fillRect (bug.x, bug.y, bug.size, bug.size);
}
}
var bugs = [],
numberbugs = 100,
x,y;
for (var i = 0; i < numberbugs; i++){
x = Math.random()*canvas.width;
y = Math.floor(Math.random()*canvas.height);
bugs.push(new bugObj(x, y, 2));
}
function loop() {
/// update each bugs objects
for(var i = 0;i < bugs.length; i++) bugs[i].update();
popBugs();
requestAnimationFrame(loop);
}
loop();
window.requestAnimationFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
function( callback ){
window.setTimeout(callback, 1000);
};
})();
尝试使动画更流畅的几件事:
- 把动作变小
- 不要一次把所有的错误都抹掉,然后重新绘制它们。将每个bug涂黑,并立即将其重新绘制为黄色。依次执行每个错误
- 跟踪bug上次移动的方向,只允许它向那个方向移动或向两侧移动90度
- 将bug分为10组,每组10个,每组有一个计时器。这样可以防止bug的运动与其他bug同步,并且可能看起来更好看
我猜你在这里要做的是让bug从一个位置平稳地飞到另一个位置,而不是像现在这样摇晃。
有一百万种不同的方法可以做到这一点,但以下是我要做的事情。同样,这是一个开始,只是开始使用目的地,而不是逐帧随机移动。
-
第一次对任何bug对象调用update时,我都会生成一个随机的DESTINATION。
-
之后每次调用更新函数时,都会将bug移到该位置。为了让它变得更好,给每个bug分配一个随机的SPEED,或者研究某些类型的缓解功能(即在每一帧中,找到bug和目标之间的中点并将其移动到那里将产生缓解效果。)
-
每次调用更新函数时,您还将检查bug是否已到达目的地。如果有,那么创建一个新的随机目的地,并在途中发送bug,否则只需让bug沿着它的路径移动。
这只是一个开始,以后你会想使用速度/矢量和一些基本的触发器,所以当bug转向新的目的地时,路径是一个小拱门,而不是一个急转弯。
现在,错误正在每帧移动随机数量的像素。这给他们带来了一种紧张的感觉。如果你想让它们看起来更像是在爬行,你需要让它们总是向前移动,但随意转动。为此,您需要一个更复杂的算法。对于初学者来说,你需要为每个改变每帧位置的bug设置速度,并随着时间的推移改变速度。
你可能还想调查转向行为,这可能更像你想要的。
- 将 JQuery Animation 转换为 Javascript/CSS3
- Angular Animation类中Greensock JavaScript的非平滑tweening
- JavaScript animation
- javascript google map setcenter and setzoom with animation
- cancelAnimationFrame for Animation on Javascript
- HTML 5 canvas JavaScript rain animation(如何高效轻松地实现!).
- javascript + jquery + setinterval + animation
- HTML Canvas 中的 Javascript Animation - 无法将动画保留在边框内
- Nivo Slider Control Nav Animation with javascript
- JavaScript animation setInterval / clearInterval
- swift UIWebView "freeze" animation in javascript
- 使用 javascript 更改 -webkit-animation-play-state
- JavaScript Css Animation
- Bug animation Javascript
- SVG: <use>, javascript, and animation
- JavaScript Canvas: Pong - Animation
- javascript svg animation
- jQuery or Javascript animation
- javascript animation:为什么下一行在动画结束之前运行
- HTML/JAVASCRIPT Animation like on storj.io