rust活塞矩形函数在循环中不起作用

rust活塞矩形函数在循环中不起作用,rust,rust-piston,Rust,Rust Piston,我想在rust活塞库中基于2d数组绘制很多单元格。我尝试编辑hello world示例,其功能如下: fn呈现(&mut self,args:&RenderArgs){ 常量绿色:[f32;4]=[0.0f32,1.0f32,0.0f32,1.0f32]; 常量红色:[f32;4]=[1.0f32,0.0f32,0.0f32,1.0f32]; 设正方形=矩形::正方形(0.0,0.0,10.0); let field=&mut self.field; self.gl.draw(args.view

我想在rust活塞库中基于2d数组绘制很多单元格。我尝试编辑hello world示例,其功能如下:

fn呈现(&mut self,args:&RenderArgs){
常量绿色:[f32;4]=[0.0f32,1.0f32,0.0f32,1.0f32];
常量红色:[f32;4]=[1.0f32,0.0f32,0.0f32,1.0f32];
设正方形=矩形::正方形(0.0,0.0,10.0);
let field=&mut self.field;
self.gl.draw(args.viewport(),|c,gl |->(){
透明(绿色,德国劳埃德船级社);
对于字段中的x_y_项{
设item=x_y_item.2;
如果项目==7{
设x=x_y_项。0;
设y=x_y_项1;
长方形(
红色
广场
c、 transform.trans(x为f64*10.0,y为f64*10.0),
德国劳埃德船级社,
);
}
}
长方形(
红色
广场
c、 transform.trans(0作为f64*10.0,0作为f64*10.0),
德国劳埃德船级社,
);
})
}
遗憾的是,它在循环中不起作用。 如果我调试打印变量,并在循环外、循环内逐个硬编码,它就可以很好地工作——它不会绘制任何内容,也不会崩溃

更新: 我被要求提供代码,以澄清字段是什么,以便可以运行它,因此如下所示:

字段:


发布结构网格{
游标:i32,
正文:Vec,
高度:i32,
宽度:i32,
}
impl网格{
新发布(宽度:i32,高度:i32)->Self{
让mut body:Vec=Vec::具有_容量(使用时的高度);
让mut temp:Vec=Vec::具有_容量(使用宽度);
对于0..width中的i{
温度推力(0);
}
对于0.高度的i{
body.push(temp.clone());
}
println!((W:{},TW:{},H:{},TH:{}),宽度,主体[0].len(),高度,主体.len());
返回Self{cursor:1,width:width,height:height,body:body};
}
发布fn填充(&mut self,值:i32){
对于y,0..self.height-1{
对于0..self.width-1中的x{
self.body[y as usize][x as usize]=值;
}
}
}
发布fn注入(&mut self,pos:(i32,i32),arg:i32){
self.body[(pos.1-1)as usize][(pos.0-1)as usize]=arg;
}
pub fn extract(&mut self,pos:(i32,i32))->i32{
返回自我主体[(位置1-1)用作usize][(位置0-1)用作usize];
}
发布fn精确定位(&mut self,val:i32)->Vec{
让mut-ret:Vec=Vec::new();
对于y,在0..self.height中{
对于0..self.width中的x{
如果self.body[y as usize][x as usize]==val{
反向推力([x为i32+1,y为i32+1]);
}
}
}
返回ret;
}
酒吧fn d_秀(&mut self){
设mut计数器:i32=1;
对于self.body.iter()中的行{
println!(“{}.{:?}”,计数器,*行);
计数器+=1;
}
}
}
网格的impl迭代器{
类型项=(i32、i32、i32);
fn下一步(&mut self)->选项{
如果self.cursor==self.width*self.height{
不返回任何值;
}否则{
设x:i32=self.cursor-(self.cursor/self.width)*self.width;
设y:i32=self.cursor/self.width;
设val:i32=0;
self.cursor+=1;
返回一些((x,y,self.body[y as usize][x as usize]);
}
}
}
主要内容:


外部板条箱玻璃窗;
外部板条箱图形;
外部板条箱opengl_图形;
外板条箱活塞;
使用glutin_window::GlutinWindow作为窗口;
使用opengl_图形:{GlGraphics,opengl};
使用活塞::事件\循环:{EventSettings,Events};
使用活塞::输入:{RenderArgs,RenderEvent,UpdateArgs,UpdateEvent};
使用活塞::窗口::窗口设置;
使用图形::*;
mod arr2d;
使用板条箱::arr2d::网格;
发布结构状态{
字段:arr2d::Grid,
gl:GlGraphics,
}
impl状态{
fn渲染(&mut-self,参数:&RenderArgs){
常量绿色:[f32;4]=[0.0f32,1.0f32,0.0f32,1.0f32];
常数红色:[f32;4]=[1.0f32,0.0f32,0.0f32,1.0f32];
设正方形=矩形::正方形(0.0,0.0,10.0);
let field=&mut self.field;
self.gl.draw(args.viewport(),|c,gl |->(){
透明(绿色,德国劳埃德船级社);
对于字段中的x_y_项{
设item=x_y_item.2;
如果项目==7{
设x=x_y_项。0;
设y=x_y_项1;
矩形(红色、方形、c.transform.trans(x为f64*10.0,y为f64*10.0),gl);
}
}
矩形(红色、方形、c.transform.trans(0表示f64*10.0,0表示f64*10.0),gl);
})
}
fn更新(&mut self,args:&UpdateArgs){
}
fn新(gl:OpenGL,w:i32,h:i32)->Self{
让mut body=Grid::new(w,h);
注射((4,4),7);
注射((4,5),7);
注射((4,6),7);
返回Self{gl:GlGraphics::new(gl),字段:body};
}
}
fn main(){
让open\u gl=OpenGL::V3\u 2;
let mut window:window=WindowSettings::new(“旋转正方形”[200200])
.opengl(open_gl)
.退出电子稳定控制系统(正确)
.build()
.unwrap();
让mut app=State::new(open_gl,20,20);
让mut events=events::new(EventSettings::new());
而让一些(e)=事件。下一步(&mut窗口){
如果让一些(args)=e.render_args(){
应用程序渲染(&args);
}
如果让一些(args)=e.更新_args(){
应用程序更新(&args);
}
}
}
更新#2:

我做了更多的研究,并根据其他教程和示例创建了更简单的代码版本,但这个问题似乎仍然存在:

外部板条箱活塞;
使用活塞_窗口::*;
使用std::ffi::OsString;
使用std::path::path;
mod tileSet;
mod arr2d;
fn main(){
let mut window:PistonWindow=WindowSettings::new(“你好