0

少し一般的な質問ですが、それでも私は何をすべきかわからず、グーグルが失敗したという状況にいます!

構築したキャンバスとのグリッド配列の衝突を書き直そうとしています。

これで、グリッド オブジェクトとブロック オブジェクトができました。グリッドcellSizeはブロックと同じサイズであることに依存し、size逆もまた同様です。その理由は、ブロックを格納するグリッド配列を作成するには、最初にそれを構築する方法を作成する必要があり、それはブロックのサイズに依存するためです。例、

var grid = new grid();

function grid() {
    this.cellSize = 50;
    this.cellsX = canvas.width / this.cellSize;
    this.cellsY = canvas.height / this.cellSize;
    this.buildGrid = function() {
        var arr = new Array(this.cellsX);
        for(var i = 0; i < arr.length; ++i) {
            arr[i] = new Array(this.cellsY);
        }
        return arr;
    };
    this.arr = this.buildGrid();
    this.getGridCoords = function(i) {
        return Math.floor(i / this.cellSize);
    };
}

function block() {
    this.size = grid.cellSize; // size of the block is same as cellSize
    this.x = 0;
    this.y = 0 - (this.size * 1.5);
    this.baseVelocity = 1;
    this.velocity = this.baseVelocity;
    this.update = function() {
        this.y += this.velocity;
    };
}

私が行った方法でそれを行うと、2 つのオブジェクトが結合されますが、これは悪いことだと認識しています。それが理にかなっている場合、オブジェクトを結合せずに2つの変数が同じサイズであることを確認するにはどうすればよいですか?

4

1 に答える 1

1

本当の問題は、block() 関数が grid() のインスタンスから直接値を取得していることです。

block() 関数を再利用可能にして切り離したい場合は、block() を変更して構築中にサイズを取得するのと同じくらい簡単です。

arr[i] = new block({size: this.cellSize});
于 2013-02-26T07:48:08.853 に答える