4 个版本
0.1.1 | 2023年7月5日 |
---|---|
0.1.0 | 2023年7月5日 |
0.0.2 | 2023年7月4日 |
0.0.1 | 2023年7月4日 |
#12 in #blazingly
450KB
121 行
🐷 科里托 🐷
发音类似于 corrito,就像把 coroutine 和 burrito 结合起来一样,因为众所周知,协程是端点函子类别中的 墨西哥卷饼。
专注于游戏循环的异步执行器,满足所有您的协程需求。灵感来自 macroquad 的实验性协程、cosync crate、Unity 的惊人协程以及最后是 Godot 的协程,它们在一段时间内 并不是真正的墨西哥卷饼。
科里托在捷克语中意为槽,这是猪吃的东西。
科里托是单线程且简单的。执行器上下文 Koryto
期望每帧都使用游戏的 delta time 进行轮询。
示例
// Create a new instance of the executor
let mut ko = Koryto::new();
// Shared state the coroutine sets
let val = Rc::new(RefCell::new(3));
let val_inner = val.clone();
// Start a new coroutine
ko.start(async move {
wait_seconds(0.5).await;
*val_inner.borrow_mut() = 9
});
// Delta time obtained from the game loop
let dt = 0.2;
// Poll coroutines as part of the game loop
ko.poll_coroutines(dt);
assert_eq!(*val.borrow(), 3);
ko.poll_coroutines(dt);
assert_eq!(*val.borrow(), 3);
// At this point 0.5 seconds have passed and we observe the coroutine be
// resumed and set the value.
ko.poll_coroutines(dt);
assert_eq!(*val.borrow(), 9);
ko.poll_coroutines(dt);
assert_eq!(*val.borrow(), 9);
常见问题解答
这是否稳定?
否。
为什么不用 cosync
,因为它做的正好一样?
虽然 cosync
确实有效,但其 API 比游戏更灵活,这并不方便。Macroquad 的协程 与此 crate 的哲学更一致。如果您喜欢 cosync
,请继续使用它!
与 cosync
相比,koryto
的一个优点是它不假设协程是 Sync
。
许可证
koryto
具有双重许可
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
- Apache 许可证,版本 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)