我正在使用react / redux构建一个双人游戏。总有一个玩家轮到他了。转牌需要在两者之间定期改变。
我有以下减速机。它工作一次,然后停止工作。
case CHANGE_TURN:
if (playerTurn === 1) {
newPlayerTurn = 2;
newOtherPlayer = 1;
}
else {
newPlayerTurn = 1;
newOtherPlayer = 2;
}
return {
...state,
otherPlayerID: newOtherPlayer,
playerTurnID: newPlayerTurn
}
由于这部分过去曾有过工作,我想也许还有其他东西会阻碍????
答案 0 :(得分:2)
我认为答案已被接受,但您也可以通过以下方式最小化您的交换操作:
[newPlayerTurn, newOtherPlayer] = [newOtherPlayer, newPlayerTurn];
答案 1 :(得分:1)
您可能忘记在playerTurn
和1
之间交替2
,方法是将其返回状态。此外,案例可以简化:
case CHANGE_TURN:
return {
...state,
playerTurn: state.playerTurn === 1 ? 2 : 1,
otherPlayerID: state.playerTurn === 1 ? 1 : 2,
playerTurnID: state.playerTurn === 1 ? 2 : 1,
};
playerTurn
和playerTurnID
是多余的btw,但也许您的示例已经过简化。
如果它严格地总是只有两个玩家,那么一个布尔值足以模拟整个状态:
case CHANGE_TURN:
return { activePlayer: !state.activePlayer };
initialState
{ activePlayer: false }
。然后你可以编写像
const isPlayer1Active = (state) => !state.activePlayer; // false = player1's turn
const isPlayer2Active = (state) => state.activePlayer; // true = player2's turn
const getActivePlayerID = (state) => state.activePlayer ? 2 : 1;
答案 2 :(得分:1)
克隆你的回购并检查出来。
您的players.js
减速器,第5行是:
let playerTurn = players.playerTurnID;
但应该看起来像:
let playerTurn = state.playerTurnID;
您应该从playerTurn
对象中获取state
。