3

ゲームをスピードアップしたいのですが、すべてのキャンバスをクリアする代わりに、一部 (何かがアニメーション化されている場所) のみをクリアします。これは私のコードの一部です:

this.draw = function(context) {
        context.clearRect(this.oldx, this.oldy, this.width, this.width);
        if (this.type == "square") {
            context.fillRect(this.x, this.y, this.width, this.height);
        } 
        this.oldx = this.x;
        this.oldy = this.y;
}

ClearRect は機能しますが、四角形全体をクリアしません。そして、すべての四角形は黒でなければなりませんが、そうではありません(fillRectが機能しないようですが、機能すると思います)。そこで何が起こるかを見ることができます: ... この関数 (clearRect) の使い方は間違っていますか? うまくいかないのはなぜですか?

4

1 に答える 1

0
  1. clearRect は、おそらくブラウザのアンチエイリアシングの実装のために、四角形全体をクリアしません。clearRect 領域を 1 ピクセル拡張すると役立つと思います。また、キャンバスの幅/高さを設定しないようにしてください。これによりビューが変形し、一部のオブジェクトがぼやけて表示される場合があります

  2. コードに関しては、drawMap関数でthis.obiekt1.drawメソッドを 1 つのオブジェクトに対してのみ呼び出すため、地面の四角形が黒くなることはありません。したがって、以前に描画された領域を周期的にクリアします。clearメソッドを抽出するか、マップ ブロックごとに個別のオブジェクトを作成してみてください。

于 2013-03-12T12:26:28.347 に答える