问题标签 [rust-piston]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
605 浏览

rust - 为什么 Piston text() 需要对字形缓存的可变引用?

我很好奇为什么text()可变借用字形缓存:

我的理解是字形缓存代表从字体文件加载的静态字符(字形)。为什么那些需要能够被底层图形系统变异?

0 投票
1 回答
184 浏览

rust - 创建后如何更改 PistonWindow 的分辨率?

我想PistonWindow在创建后更改 a 的分辨率。这将允许用户在玩游戏时更改窗口的分辨率。

WindowSettings有一个set_size方法,但是在创建类型后似乎无法访问PistonWindow

一个简化的例子:

0 投票
1 回答
164 浏览

rust - 调用 sprite::Scene::draw 时类型不匹配

我正在使用 Piston 和 Sprite 进行个人项目。示例代码调用此方法:

我正在尝试调用一种方法来绘制所有内容。我第一次尝试:

然后编译器告诉我我需要给它一个类型参数Scene所以我尝试了这个:

然后编译器告诉我该类型需要实现特征ImageSize所以我尝试了这个:

然后我得到了这个错误:

我不明白编译器在这里想说什么。的完整类型Scene是,sprite::Scene<piston_window::Texture<gfx_device_gl::Resources>> 但我不想在方法的签名中写下它。

那我有两个问题:

  1. 编译器想告诉我什么?
  2. 如何将场景传递给方法?
0 投票
1 回答
726 浏览

rust - 使用活塞有效地绘制路径

Piston 的图形库提供了在两点之间画一条线的功能,但最多只能画两条线。如何有效地绘制通过许多点的路径,而不必为每个段绘制一条线?

假设我有以下代码:

有没有办法把它变成这样的东西?

我被推荐到里昂图书馆,但我不知道如何将它与活塞一起使用。

0 投票
1 回答
204 浏览

rust - Rust 中存储要用作活塞纹理或精灵的对象集合的惯用方式是什么?

我看到的所有访问纹理对象的示例都是执行以下操作:

这给人的印象是,为了拥有一组纹理,它应该类似于let mut images: Vec<Texture>;,但from_path返回一个Result<Texture<R>, String>.

并且它Texture<R>确实阻碍了它。为了能够制作一个Texture<R>,需要大量的cratesuse ...是完全错误的。

是正确的事情:

或者拉动活塞拥有的几乎所有东西?或者是其他东西?

我的目标是拥有

我试图避免拉入的板条箱是gfx_device_gl. 包含这个创建感觉是错误的,如果我已经包含了诸如活塞之类的游戏引擎,它似乎有点低水平。

0 投票
1 回答
1001 浏览

rust - 当我每次渲染屏幕时不调用`graphics::clear`时,如何阻止活塞使屏幕闪烁?

考虑两个程序,以及它们之间的区别:

两个程序的视频演示。

该程序是一个非常基础的绘画程序,只有一个画笔宽度,画笔笔触颜色,画布大小,不保存等;哦,要停止绘图,请将鼠标移出窗口,因为每次越过窗口时,这都算作绘图;-)

flashes.rse.render_args()除了第一次之外,每次都不会绘制每个像素。doesnt_flash.rs每次e.render_args()达到时都会绘制每个像素。这是两个程序之间的唯一区别。

虽然在这个程序中生成内容并不需要很长时间,所以当鼠标在窗口上移动时重新生成数百次是可以接受的,这似乎效率低下。理论上,随着越来越多的点被添加到屏幕上,每次迭代gl.draw需要的时间越来越长。在实践中,调用graphics::ellipse一次与一万次之间的差异在现代硬件上并不显着。

我想写的其他程序没有那么奢侈,因为生成结果并放在屏幕上需要更长的时间。

在仔细阅读 API 时,我没有想出明显的方法来“什么都不做”。我假设我必须将屏幕更改写入某个缓冲区对象,然后在调用GlGraphics时反馈此缓冲区对象,e.render_args()但我不需要更新屏幕。

问题是,我似乎找不到这个缓冲区对象。:-(

我怎样才能“什么都不做”而不让屏幕闪烁?如果我的理论是正确的,我怎样才能绘制到GlGraphics缓冲区而不是屏幕,然后当我没有任何新东西要绘制时将缓冲区反馈回屏幕?


货运.toml

dont_flash.rs

闪光灯.rs

0 投票
0 回答
94 浏览

rust - 如何在纹理中绘制图元?

当我想在 Piston 中绘制一些图元时,我会这样做:

此代码在缓冲区中绘制一个矩形并将其显示在屏幕上。但是如果我想在纹理中绘制一些图元(保留缓冲区以便重用它)怎么办?我不确定库优化,如果我能做到这一点,我可以少画数百个三角形。

0 投票
1 回答
206 浏览

rust - 活塞 GenericEvent 未为 Event 实现

我正在尝试使用活塞窗口(0.77.0)库在 Rust 中编写游戏。从他们的hello world示例开始,我想我会先将渲染逻辑分离为使用 Event 作为参数的方法,因为根据文档,它是由window.next().

然而,这以错误结束:

self.window.draw_2d(&event, |context, graphics| {
特征piston_window::GenericEvent未实现&piston_window::Event

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

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

0 投票
1 回答
1255 浏览

image - Rust - 图像箱:保存图像缓冲区的问题

在为图像箱提供的示例中,我有一个与分形示例(“6.2 生成分形”部分,https://github.com/PistonDevelopers/image )相关的问题

1)在线

我收到以下编译错误消息(rustc 1.25.0):

感谢您的帮助!

2)另外注意我必须改变

在示例的开头。也许 crate num_complex 不再存在?

0 投票
3 回答
1895 浏览

image - 如何对 Rust Piston 图像进行编码并在内存中获取结果?

我正在使用Pistonimage生成图像。

我有一个hyper网络服务器,我想从中提供动态生成的图像。

基于如何在 Rust 中创建可用作 Reader 或 Writer 的内存对象的答案?,我想我也许可以使用 aCursor<Vec<u8>>作为目的地。但是,image似乎只提供了一种写入文件名的方法,而不是Writer像我的光标。

在查看了image的文档后,我希望可能有一些方法可以直接使用image::png::PNGEncoder结构。它提供了一个公共方法encode(self, data: &[u8], width: u32, height: u32, color: ColorType) -> Result<()>。但是,我不确定该data论点应该是什么,并且我找不到ColorType. 使用的 s 的任何公开声明ImageBuffer

如何将活塞编码为GenericImagePNG 等格式并将结果存储在内存中?