Это конкретный вопрос о sebcrozet / kiss3d (графический пакет для игр, написанных на ржавчине): как очистить «сцену»?
Я могу добавить объекты на сцену с помощью window.add_mesh()
и аналогичныхметоды, и кажется, что я могу удалить определенные объекты windows.remove_node()
, но как мне удалить все объекты в сцене (например, чтобы начать новую сцену)?
Полагаю, я мог бы сохранить вектор всех объектов на сцене, а затем выполнить итерацию по вектору для удаления объектов, но в этом нет необходимости.
Редактировать:Вот код, который воспроизводит ошибку, взятую из моего кода.
use kiss3d::resource::Mesh;
use kiss3d::window::Window;
use na::Point3;
use na::Vector3;
use rand::Rng;
use std::cell::RefCell;
use std::rc::Rc;
extern crate kiss3d;
extern crate nalgebra as na;
extern crate rand;
fn main() {
let mut window = Window::new("Test");
const FRAMES_PER: u16 = 100;
let mut frame_count = FRAMES_PER;
let mut rng = rand::thread_rng();
window.set_point_size(5.0);
while window.render() {
frame_count += 1;
if frame_count > FRAMES_PER {
window
.scene_mut()
.apply_to_scene_nodes_mut(&mut |n| n.unlink());
let mut vertexes: Vec<Point3<f32>> = vec![];
let mut indexes: Vec<Point3<u16>> = vec![];
vertexes.push(Point3::new(
rng.gen_range(-500.0, 500.0),
rng.gen_range(-500.0, 500.0),
400.0,
));
vertexes.push(Point3::new(
rng.gen_range(-500.0, 500.0),
rng.gen_range(-500.0, 500.0),
400.0,
));
vertexes.push(Point3::new(
rng.gen_range(-500.0, 500.0),
rng.gen_range(-500.0, 500.0),
400.0,
));
indexes.push(Point3::new(0, 1, 2));
let mesh = Rc::new(RefCell::new(Mesh::new(
vertexes, indexes, None, None, false,
)));
let mut c = window.add_mesh(mesh, Vector3::new(1.0, 1.0, 1.0));
c.set_color(1.0, 0.0, 1.0);
c.enable_backface_culling(false);
frame_count = 0;
println!("scene regenerated");
}
}
}