gpt4 book ai didi

rust - 我如何清除kiss3d中的场景?

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

这是一个关于 sebcrozet/kiss3d(用 Rust 编写的游戏的图形包)的具体问题:如何清除“场景”?

我可以通过 window.add_mesh() 和类似的方法向场景添加对象,似乎我可以通过 windows.remove_node() 删除特定对象,但是如何移除场景中的所有对象(例如开始一个新场景)?

我想我可以保留场景中所有对象的矢量,然后迭代该矢量以移除对象,但这不是必需的。

编辑:这里是一些重现错误的代码,摘 self 的代码。

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");
}
}
}

最佳答案

你可以得到一个scene来自window Window::scene_mut 函数,它将返回 SceneNode .

获得可变场景节点后,您可以使用 SceneNode::apply_to_scene_nodes 删除场景内的所有对象。功能。

如 kiss3d 文档页面中所述:

fn apply_to_scene_nodes_mut<F: FnMut(&mut SceneNode)>(&mut self, f: &mut F)

Applies a closure to each object contained by this node and its children.

这是在其中获取闭包并将其应用于场景内所有节点的方法。所以你不需要将所有对象添加到 Vec .

请注意,此方法以递归方式工作,以将您提供的功能应用于父级及其自身的所有子级。

在您的情况下,只需要取消链接父场景,如下所示:

window.scene_mut().unlink();

每当您取消链接父场景节点时,子节点当然也会与父节点取消链接。所以在你的需要中你可能不需要 SceneNode::apply_to_scene_nodes甚至。

Playground

关于rust - 我如何清除kiss3d中的场景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55293051/

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