0

変数「player1Bananas」の変更を停止するバグが私のコードに見られる人はいますか? 関数内の他のすべては正常に機能します。

 //update playerStats arguments:
    //banana is a banana object
    //x and y are the banana's position
    //players bananas is player1Bananas or player2Bananas,
    //ballPosition is "left" or "right"
    updatePlayerStats: function(banana, x, y, playersBananas, ballPosition) {   
        playersBananas += 1;
        gameController.bananasTaken += 1;
        banana.x = x;
        banana.y = y;
        gameController.player1Score = 0;
        gameController.player2Score = 0;
        gameController.setUpPaddles();
        gameController.setUpBall(ballPosition);
    },
    gameController.updatePlayerStats( gameController.Banana1, 20, gameController.canvas.height - 20 - gameController.Banana1.height,
 gameController.player1Bananas, "left");

ありがとう!

4

4 に答える 4

5

の値gameController.player1bananasパラメーターとして関数に渡しています。

値がローカル変数に割り当てられ、スコープplayersBananasによって制限されている関数内。それに変更を加えると、最初に渡した変数を変更するのではなく、新しい変数を変更します。playersBananas

例: http://jsfiddle.net/GHkJ6/

これを修正するには、オブジェクトとして渡す必要があります。JavaScript はそれを値として渡すのではなく、オブジェクト自体を渡します。

例: http://jsfiddle.net/F446Q/

于 2013-07-30T06:51:54.027 に答える
2

JavaScript では数値が値渡しされるため...

プレーヤーの状態オブジェクト ({id:1, バナナ:17} など) など、単一の数値以外のものを渡す必要があります。

于 2013-07-30T06:49:36.753 に答える
1

gameController.player1Bananas はプリミティブ型なので参照ではなく値渡しです。これは、関数内で playerBananas がもう player1Bananas を参照していないことを意味します。これは単なる整数値です。

代わりにオブジェクトを渡してみてください。たとえば、bananaCount プロパティを持つプレーヤー オブジェクトを使用できます。次に、プレーヤー オブジェクトを関数に渡し、プレーヤー オブジェクトのバナナカウント プロパティをインクリメントします。

例えば。

 //update playerStats arguments:
    //banana is a banana object
    //x and y are the banana's position
    //players bananas is player1Bananas or player2Bananas,
    //ballPosition is "left" or "right"
    updatePlayerStats: function(banana, x, y, player, ballPosition) {   
        player.bananaCount += 1;
        gameController.bananasTaken += 1;
        banana.x = x;
        banana.y = y;
        gameController.player1Score = 0;
        gameController.player2Score = 0;
        gameController.setUpPaddles();
        gameController.setUpBall(ballPosition);
    },
    gameController.updatePlayerStats( gameController.Banana1, 20, gameController.canvas.height - 20 - gameController.Banana1.height,
 gameController.player1, "left");

良い説明については、このリンクを参照してください.. http://snook.ca/archives/javascript/javascript_pass

于 2013-07-30T06:56:08.517 に答える