作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图用协程替换 for 循环来移动星星:
--fine
function _update()
for c in all(boids) do
move_boid(c)
end
end
--broken
function _update()
for c in all(boids) do
coresume(cocreate(move_boid),c)
end
end
注意固定数量的星星被卡住(我很确定这个数字是固定的):
但是为什么?我该如何处理?完整代码在itch .
最佳答案
感谢@Vald 和@Egor 的评论。似乎问题是由“太长的协同程序”导致的,无法在 PICO-8 周期中完成。所以解决方案是我将未完成的协程存储在一个表中,如果没有完成则恢复它们。但不知何故,运动发生了变化,有点像“丢帧”。
这是我编辑的代码:
function _init()
-- code
cors={}
end
function _update()
for i=1,#boids do
local co=cocreate(move_boid)
local c=boids[i]
add(cors,co)
coresume(co,c)
end
for co in all(cors) do
if (co and costatus(co)!="dead") then
coresume(co)
else
del(cors,co)
end
end
end
同时也修改了计算函数,在中间增加了一行:
function move_boid(c)
-- code
yield()
-- code
end
只是为了在完成之前屈服。
更新:另一种方法是重用协程。
function _init()
-- code
-- create coroutines
cors={}
for i=1,#boids do
local co=cocreate(move_boid)
local c=boids[i]
add(cors,co)
coresume(co,c)
end
end
function _update()
foreach(cors,coresume)
end
-- and wrap the move function with a loop
function move_boid(c)
while true do
-- code
yield()
-- code
yield()
end
end
关于lua - Pico-8 协程偶尔会死掉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54193676/
在我的设置中,我试图有一个界面 Table继承自 Map (因为它主要用作 map 的包装器)。两个类继承自 Table - 本地和全局。全局的将有一个可变的映射,而本地的将有一个只有本地条目的映射。
Rust Nomicon 有 an entire section on variance除了关于 Box 的这一小节,我或多或少地理解了这一点和 Vec在 T 上(共同)变体. Box and Vec
我是一名优秀的程序员,十分优秀!