你可以从这里检查应用程序;沙箱
蛇的运动逻辑基本上是从它的背部移走一个正方形,并添加一个新的头部。这创造了一种移动的外观。但是我的间隔好像不能正常工作。
它只工作一次,然后它会一遍又一遍地做同样的事情。这意味着状态在一段时间后根本不会改变。
我在一个视频中看到有人用这种方式开发游戏,但它确实有效。我看不出这段代码有什么问题,提前谢谢。
你可以同时使用useEffect
和setTimeout
来设置一个新的超时,每次蛇点在状态下被更新。例如:useEffect(() => {
setTimeout(moveSnake, 1000);
}, [snakeDots]);
我看到你的问题了。那真的很有趣。问题是这个。
useEffect(() => {
setInterval(moveSnake, 1000);
}, []);
setInterval(moveSnake, 1000)
。这是使用原点moveSnake
。由于功能组件覆盖了整个状态和功能,moveSnake
发生了变化。我认为指向数组的指针改变了。由于它使用的是原点指针,setInterval
不能改变状态。我认为你可以更新如下。
useEffect(() => {
setTimeOut(moveSnake, 1000);
}, [snakeDots]);