- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Rust 的新手,我一直在尝试使用 ggez 制作一款简单的游戏.
现在,通常在 C++ 或 C# 中,我会围绕拥有一个负责设置、帧限制、窗口创建、事件处理等的“主”类的实例和“状态”类的实例构建我的游戏由大师类举办。我会在创建状态类时传递一个指向主类的指针(类似于 game_master*
),以便状态类可以访问主类的资源。
在 Rust 中,我无法传递 &mut self
,因为状态可能比引用长寿。
pub fn new(_ctx: &mut Context) -> GameMaster {
let game = GameMaster {
state: None,
pending_state: None
};
game.state = Some(Box::new(TestState::new_with_master(&mut game))) <----- NOPE
game
}
我认为这可以通过生命周期来解决,但我还没有找到让生命周期处理特征的方法。将 master 作为引用传递给每个函数调用也不起作用,因为一次只能持有一个可变引用。
fn update(&mut self, ctx: &mut Context) -> GameResult<()> {
if self.state.is_some() {
(*self.state.as_mut().unwrap()).update(ctx, &mut self) <----- NOPE
}
else {
Ok(())
}
}
有没有在 Rust 中执行此操作的好方法?
最佳答案
我刚才遇到了类似的问题,但我认为唯一的选择是:
使用 Rc<RefCell<>>
到处。记得还要使用 Weak
如果您需要对这些对象进行垃圾回收,或者添加一个特殊的 destroy 方法,因为它们相互引用。
使用原始指针和不安全代码。问题是,对于不安全的遵从,除了生命周期检查之外,您还会失去可变性检查(RefCell
确保一次只存在一个可变引用)。
关于rust - 借用GameMaster(自己)到GameState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58314563/
你好,我的代码编译有问题 我关注 http://gamedevgeek.com/tutorials/managing-game-states-in-c/教程但它无法编译,我不知道为什么。 来自 vis
我正在使用 XNA 开发游戏,当我开始游戏时会弹出一个菜单。如果你按“空格”,游戏本身就会开始。我正在使用具有三种不同情况的游戏状态开关来执行此操作。虽然当我到达最后一个状态(游戏结束屏幕)并想通过按
我有一个关于 XNA 性能下降的问题。我正在使用 GameStateManagement来自微软的例子来创建我的游戏。我目前有一个主菜单屏幕 (GameScreen)、一个初始屏幕 (Game Scr
我正在学习状态单子(monad),但我有点困惑。 我有一个数据类型 data GameState = GameState (Map String Double) Double Bool derivin
我正在学习状态单子(monad),但我有点困惑。 我有一个数据类型 data GameState = GameState (Map String Double) Double Bool derivin
我在将 GameState 保存为 JSON 时遇到问题。 最初我将 GameState 保存为 JSON,如下所示: Json json = new JSON(); String save = js
我是一名优秀的程序员,十分优秀!