我试图创造一个简单的弹跳球比赛,在2d阵列与反应钩。我有一个问题要解决:
当球击中绿色字段时,它应该将向量更改为随机,将数组中的值从"Y“更改为"0"。它改变了方向,但绿色的空间并没有从板上消失。它在重新渲染后还会回来。
下面是完整的代码:https://stackblitz.com/edit/react-cvlqsp?file=src/App.js
编辑
我发现绿色盒子消失了,但是每次球移动,它就会重新呈现,看起来就像永久的。我禁不住不把整件事每次都呈现出来,只有球的移动。我应该在useEffect中使用这个吗?怎么做呢?
以下是随机向量的函数和数组更改的值不起作用:
let random = () => {
if (Math.random() < 0.5) {
setVectorX((vectorX *= -1));
} else {
setVectorY((vectorY *= -1));
}
};
let checkforYCollsion = () => {
if (board[positionY][positionX] === 'Y') {
random();
board[positionY][positionX] = '0'
}
};
发布于 2022-05-23 04:36:46
您需要通过调用setBoardToDisplay
(而不是通过分配board
的值)来用已更改的2d数组更新状态,因为这不会触发重呈现。您可以通过在setBoardToDisplay
中使用回调函数来实现这一点。
setBoardToDisplay((prev) => {
// make desired changes to prev and return it
})
https://stackoverflow.com/questions/72346488
复制