有人在我的代码中看到阻止变量"player1Bananas“更改的bug吗?函数中的其他所有内容都正常工作。
//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");谢谢!
发布于 2013-07-30 06:56:08
gameController.player1Bananas是一个基本类型,因此它是通过值传递的.不是推荐信。这意味着在函数playerBananas中不再有对player1Bananas的任何引用,它只是一个整数值。
试着输入一个物体.例如,可以使用带有bananaCount属性的player对象。然后将player对象传递到函数中,并增加player对象的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");请参阅这个链接以获得一个好的解释。pass
发布于 2013-07-30 06:51:54
您正在将值 of gameController.player1bananas作为参数传递给函数。
在函数中,该值被赋值给局部变量playersBananas,并受到作用域的限制。当您对它进行更改时,您不再对最初传递的变量进行更改,而是对新变量playersBananas进行更改。
示例:http://jsfiddle.net/GHkJ6/
要解决这个问题,您需要将它作为一个对象传递。JavaScript不会将它作为值传递,而是传递对象本身。
示例:http://jsfiddle.net/F446Q/
发布于 2013-07-30 06:49:36
因为在JavaScript中数字是通过值传递的..。
您必须传递单个数字以外的其他内容,例如player state对象({id:1,香蕉:17})。
https://stackoverflow.com/questions/17940028
复制相似问题