我正在尝试构建一个场景管理器,让您将场景推送到堆栈 . 当每个场景从堆栈中弹出时,它会一直运行直到停止然后重复 .
一个例子是游戏中的菜单;这是一个场景 . 当你关闭它时,它背后的游戏 Map 是另一个场景 .
pub trait Scene {
fn start(&mut self) {}
fn update(&mut self) {}
fn stop(&mut self) {}
fn is_active(&self) -> bool {
return false;
}
}
pub struct SceneManager {
scenes: Vec>,
}
impl SceneManager {
fn new(scene: T) -> SceneManager
where
T: Scene + 'static,
{
SceneManager { scenes: vec![Box::new(scene)] }
}
}
#[cfg(test)]
mod tests {
use super::*;
struct Sample {
running: bool,
}
impl Scene for Sample {
fn start(&mut self) {
self.running = true;
}
fn update(&mut self) {
if self.running {
self.stop()
}
}
fn stop(&mut self) {
self.running = false;
}
fn is_active(&self) -> bool {
self.running
}
}
#[test]
fn test_is_running() {
let scene_manager = SceneManager::new(Scene);
}
}
Scene trait是针对某些结构实现的,该结构包含一些判断该场景是否正在运行的方法 . 在这种情况下,一个名为 Sample 的结构 .
为 Sample 实现 Scene 然后将该场景推送到场景管理器 .
error[E0423]: expected value, found trait `Scene`
--> src/engine/scene.rs:48:47
|
48 | let scene_manager = SceneManager::new(Scene);
| ^^^^^ not a value
目前还不确定该做什么 . 如何让我的场景进入"stack"场景?我实现了 SceneManager 的 new 函数来获取类型匹配 Scene 定义的类型(如果我理解正确的话) . 这减轻了我必须指定特定大小,从而允许我将其推送到堆而不是堆栈 .
我做错了什么,如何缓解手头的问题,这甚至意味着什么?