私はHTML5 CanvasとJavaScriptを使用してこの単純なアニメーションを作成していますが、私はオブジェクトの点滅に問題があります。 私はこの質問をしたし、私が見つけたすべては基本的だった前に、私はインターネット上で解決策を見つけるためにしようとしていた:新しいイメージをロードするhtml canvas animation flickering
- 避け、各新しいフレームでオブジェクト
- が
requestAnimationFrame()
を使用私はそれをすべてやったと思うし、ちらつきはまだ起こっている。 (私の場合は、青の長方形(障害物)
働く唯一の解決策はここに、オブジェクトを移動する責任法の画素数を減らしている:。
obstacle.prototype.moveObstacle = function(){
this.x -=3
}
が、アニメーションが遅すぎます。 その周りに方法はあります
JSFiddle:?https://jsfiddle.net/wojmjaq6/
コード:
var cnv = document.getElementById("gameField");
var ctx = cnv.getContext("2d");
var speedY = 1
var obst1 = new obstacle(cnv.width + 50);
var myBird = new bird(100, 1);
function bird(x, y) {
this.x = x;
this.y = y;
this.gravity = 0.3
this.gravitySpeed = 0
}
bird.prototype.drawbird = function() {
ctx.fillStyle = "red"
ctx.fillRect(this.x, this.y, 20, 20);
}
bird.prototype.animate = function() {
this.gravitySpeed += this.gravity
this.y += speedY + this.gravitySpeed
}
function obstacle(x) {
this.x = x;
this.y = 0;
this.obstLen = Math.floor(Math.random() * 400)
}
obstacle.prototype.drawobstacle = function() {
ctx.fillStyle = "blue";
ctx.fillRect(this.x, this.y, 15, this.obstLen)
ctx.fillRect(this.x, cnv.height, 15, -(cnv.height - this.obstLen - 100))
}
obstacle.prototype.moveObstacle = function() {
this.x -= 3
}
function myFun() {
ctx.clearRect(0, 0, cnv.width, cnv.height);
myBird.animate();
myBird.drawbird();
obst1.moveObstacle();
obst1.drawobstacle();
if (obst1.x < 0) {
obst1 = new obstacle(cnv.width + 50);
}
window.requestAnimationFrame(myFun)
};
function test() {
if (myBird.gravity > 0) {
myBird.gravity = -1
} else {
myBird.gravity = 0.3
}
}
document.getElementById("gameField").onmousedown = test
document.getElementById("gameField").onmouseup = test
window.requestAnimationFrame(myFun)
で良いのチュートリアルのように見えます。 MacBook AirのSafariとChrome(2014年初頭) –
同じですが、私にはまともに見えます – Eric
それは単なる「弱い」PCの問題かもしれませんか?私はそれをchrome、firefox、IEでテストしたので、それらのすべてがちらついているからです。 – Pawel