考虑两个程序,以及它们之间的区别:
$ diff flashes/src/main.rs doesnt_flash/src/main.rs
22,23c22
<
< let mut i = 0;
---
> let mut cursor_poses: Vec<(f64, f64)> = Vec::new();
28c27
< mx = x; my = y;
---
> cursor_poses.push((x,y));
32,33c31,33
< if i == 0 {
< graphics::clear([1.0; 4], g);
---
> graphics::clear([1.0; 4], g);
> for &(x, y) in cursor_poses.iter() {
> draw_cursor_pos([x, y], &c, g);
35,36d34
< draw_cursor_pos([mx, my], &c, g);
< i+=1;
Run Code Online (Sandbox Code Playgroud)
该程序是一个非常基本的绘图程序,只有一个画笔宽度,画笔笔触颜色,画布大小,没有保存等; 哦,要停止绘画,将鼠标移出窗口,因为每次你越过窗户,这都算作绘图;-)
flashes.rse.render_args()除了第一次以外,每次都不会绘制每个像素.doesnt_flash.rs …
我对 Rust 比较陌生,当我遇到此错误时,我正尝试使用在线教程构建游戏。有人可以告诉我这个错误是什么以及如何解决它吗?
我使用rustup default nightly:-
从稳定的 Rust 版本切换到 nightly 版本rustc 1.46.0-nightly (feb3536eb 2020-06-09)。仍然错误没有消失
这些是我尝试安装的依赖项:
piston = "0.50.0"
piston2d-graphics = "0.36.0"
pistoncore-glutin_window = "0.64.0"
piston2d-opengl_graphics = "0.72.0"
Run Code Online (Sandbox Code Playgroud)
提前致谢!!
我正在使用Pistonimage包来生成图像。
fn get_image() -> image::DynamicImage {
image::DynamicImage::ImageRgba8(image::ImageBuffer::new(512, 512))
}
Run Code Online (Sandbox Code Playgroud)
我有一个hyper网络服务器,我想从中提供动态生成的图像。
基于如何在 Rust 中创建可用作读取器或写入器的内存中对象的答案?,我想我可以使用 aCursor<Vec<u8>>作为目的地。但是,image似乎只提供了一种写入文件名的方法,而不是Writer像我的光标那样。
在查看了image的文档后,我希望可能有某种方法可以直接使用该image::png::PNGEncoder结构。它提供了一个公共方法encode(self, data: &[u8], width: u32, height: u32, color: ColorType) -> Result<()>。但是,我不确定data参数应该是什么,而且我找不到 .s 使用的ColorTypes 的任何公共声明ImageBuffer。
(&Get, "/image.png") => {
let v = {
let generated = get_image();
let mut encoded_image = Cursor::new(Vec::new());
let (width, heigth) = …Run Code Online (Sandbox Code Playgroud) 我很好奇为什么text()要可变借用字形缓存:
cache: &mut C
Run Code Online (Sandbox Code Playgroud)
我的理解是字形缓存表示从字体文件加载的静态字符(字形)。为什么那些需要能够被底层图形系统改变?
使用Piston image箱子,我可以通过喂它来写一个图像Vec<u8>,但我的实际数据是Vec<Rgb<u8>>(因为这更容易处理,我想动态增长它).
我怎样才能转换Vec<Rgb<u8>>成Vec<u8>?Rgb<u8>真的[u8; 3].这必须是unsafe转换吗?
我想尝试使用 Piston 在 Rust 中制作游戏。这是我第一次使用这个库。我从官方文档中获取了这段代码来测试它。但是,当我的鼠标触摸应用程序窗口时,它会立即关闭,我不明白为什么。
extern crate glutin_window;
extern crate graphics;
extern crate opengl_graphics;
extern crate piston;
use glutin_window::GlutinWindow as Window;
use opengl_graphics::{GlGraphics, OpenGL};
use piston::event_loop::{EventSettings, Events};
use piston::input::{RenderArgs, RenderEvent, UpdateArgs, UpdateEvent};
use piston::window::WindowSettings;
pub struct App {
gl: GlGraphics, // OpenGL drawing backend.
rotation: f64, // Rotation for the square.
}
impl App {
fn render(&mut self, args: &RenderArgs) {
use graphics::*;
const GREEN: [f32; 4] = [0.0, 1.0, 0.0, 1.0];
const RED: [f32; 4] = [1.0, 0.0, 0.0, …Run Code Online (Sandbox Code Playgroud) 我使用Rust中的Piston开发了一个迷宫游戏,以便自学图形/ UI编程.游戏大多数工作正常,但是当我使用大型迷宫运行它(例如120 x 72矩形)时,游戏会在几分钟后因内存分配错误而崩溃.
一个简化的例子如下:
extern crate graphics;
extern crate opengl_graphics;
extern crate piston;
extern crate piston_window;
use opengl_graphics::OpenGL;
use piston::event_loop::*;
use piston::input::*;
use piston_window::{PistonWindow, WindowSettings};
const BLACK: [f32; 4] = [0.0, 0.0, 0.0, 1.0];
const WHITE: [f32; 4] = [1.0, 1.0, 1.0, 1.0];
fn main() {
let opengl = OpenGL::V3_2;
let mut window: PistonWindow = WindowSettings::new("maze", [800, 600])
.opengl(opengl)
.exit_on_esc(true)
.build()
.unwrap();
let mut events = Events::new(EventSettings::new());
while let Some(event) = events.next(&mut window) {
if let Some(_args) = event.render_args() …Run Code Online (Sandbox Code Playgroud)