0

gamedev.stackexchange に投稿したのですが、こちらを参考にされたのでやってみます。mainmenu.prototype.Render を使用して画面に描画する関数であるこの単純なメニューがあります。mainmenu 関数内で、ボタン x、y 位置、および .src を含むオブジェクトの配列を作成したいと考えています。

これは機能する私の現在のコードなので、関数自体に問題はありません:

this.Mainmenu = function() {
}

this.Mainmenu.prototype.Render = function() {
    imgPause = new Image();
    imgPause.src = 'img/pause.png';

    c.drawImage(imgPause, canvas.width - 42, 10);
}
var mainmenu = new self.Mainmenu();

最終結果をどのように見せたいのですが、うまくいきません(コメントにエラーを含めました):

this.Mainmenu = function() {
    this.button = function(src, X, Y) {
        this = new Image(); // Gives error "Invalid left-hand side in assignement"
        this.src = src;
        this.X = X;
        this.Y = Y;
    }
    this.buttons = [pause = new this.button(src, X, Y)];
}

this.Mainmenu.prototype.Render = function() {
    for (i = 0; i < this.buttons.length; i++) {
        c.drawImage(this.src, this.X, this.Y);
    }
}
var mainmenu = new self.Mainmenu();

しかし、それはうまくいきません。誰かが私の間違いがどこにあるかを特定できれば幸いです。私の忍耐力はもうすぐ尽きます。

4

2 に答える 2

2

まあ、あなたの間違いはまさにあなたの js インタープリターが言っていることです - あなたの割り当ての左側は無効です。つまり、何にも割り当てることはできません。これは、その単語thisを持つすべての言語の経験則です。thisその背後にある理由は明らかです -this関数の現在のコンテキスト、その隠し引数を示します。動的に上書きできる場合は、自分の関数を使用しているすべての関数の動作、つまりプログラム全体を変更できます。

thisこの壊れた方法で使用しない方法:

this.MainMenu = function() {
    this.Button = function(src, X, Y) {
        var image = new Image();
        image.src = src;
        image.X = X;
        image.Y = Y;
        return image;
    }
    this.buttons = [pause = new this.Button(src, X, Y)];
}

また、クラスに PascalCase ( Button, not button) を使用し、変数に camelCase EVERYWHERE ( x, not X) を使用して名前を付けます。

于 2013-09-29T21:04:40.940 に答える
0

これはできません

this.button = function(src, X, Y) {
    this = new Image(); // Gives error "Invalid left-hand side in assignement"
}

thisの現在のインスタンスを表しますMainmenu。インスタンスを別のインスタンスでオーバーライドすることはできません。も意味ない。

于 2013-09-29T21:01:54.630 に答える