gpt4 book ai didi

rust - Piston GenericEvent 未为事件实现

转载 作者:行者123 更新时间:2023-11-29 08:15:57 28 4
gpt4 key购买 nike

我正在尝试使用 piston_window(0.77.0) 库在 Rust 中编写游戏。从他们的 hello world 开始我想我会首先将渲染逻辑分离到一个使用 Event 作为参数的方法中,因为根据 documentation它由 window.next() 返回。

use piston_window::*;

pub struct UI<'a> {
window: &'a mut PistonWindow,
}

impl <'a> UI<'a> {
pub fn new(window: &mut PistonWindow) -> UI {
UI {
window,
}
}

fn render(&self, event: &Event) {
self.window.draw_2d(&event, |context, graphics| {
clear([1.0; 4], graphics);
rectangle(
[1.0, 0.0, 0.0, 1.0],
[0.0, 0.0, 100.0, 100.0],
context.transform,
graphics);
});
}

pub fn run(&mut self) {
use Loop::Render;
use Event::Loop;
while let Some(event) = self.window.next() {
match event {
Loop(Render(_)) => self.render(&event),
_ => {}
}
}
}
}

然而,这以错误结束:

self.window.draw_2d(&event, |context, graphics| {
the trait piston_window::GenericEvent is not implemented for &piston_window::Event

没有提取渲染方法的代码按预期工作。

 pub fn run(&mut self) {
use Loop::Render;
use Event::Loop;
while let Some(event) = self.window.next() {
match event {
Loop(Render(_)) => {
self.window.draw_2d(&event, |context, graphics| {
clear([1.0; 4], graphics);
rectangle(
[1.0, 0.0, 0.0, 1.0],
[0.0, 0.0, 100.0, 100.0],
context.transform,
graphics);
});

},
_ => {}
}
}
}

我怎样才能提取这个?我忽略了什么吗?

最佳答案

event 变量的类型为 &Event,而不是 Event,因此您实际上是在尝试传递 &&Eventwindow.draw_2dEvent 实现了 GenericEvent&Event 没有实现,这就是您看到该错误的原因。

你只需要做:

self.window.draw_2d(event, |context, graphics| {
...
}

代替:

self.window.draw_2d(&event, |context, graphics| {
...
}

公平地说,对于 Rust 编译器,它无法为您指明正确的方向。当我编译你的代码时,完整的错误信息是:

error[E0277]: the trait bound `&piston_window::Event: piston_window::GenericEvent` is not satisfied
--> src/main.rs:34:21
|
34 | self.window.draw_2d(&event, |context, graphics| {
| ^^^^^^^ the trait `piston_window::GenericEvent` is not implemented for `&piston_window::Event`
|
= help: the following implementations were found:
<piston_window::Event as piston_window::GenericEvent>

最后的“帮助”部分告诉您 piston_window::Event 确实 有正确的实现,而前面的错误是说 &piston_window::事件没有。

关于rust - Piston GenericEvent 未为事件实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49677355/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com