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,bananas: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 回答
0

更改player1Bananas为全局变量,然后player1Bananas在函数内部进行相同的更改

于 2013-07-30T06:54:35.570 回答