Я довольно новичок в 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
}
Я думаю, что это можно решить с помощью жизней, но я не нашел способа заставить жизни работать с чертами. Передача мастера в качестве ссылки для каждого вызова функции также не работает, потому что одновременно может храниться только одна изменяемая ссылка.
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?