Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 二维贝维旋转_Rust_Bevy - Fatal编程技术网

Rust 二维贝维旋转

Rust 二维贝维旋转,rust,bevy,Rust,Bevy,我正在尝试使用Bevy 0.3,并且我能够通过Camera2dComponents::default()轻松使用内置转换。 这是自顶向下的2d 问题是尝试将播放器的旋转同步到鼠标: evreader.iter中事件的(&cursor\u moved\u事件){ println!(“{:?}”,变换); 查看(Vec3::new(event.position.x(),event.position.y(),0.0),Vec3::new(0.0,0.0,1.0)); println!(“{:?}”,变

我正在尝试使用Bevy 0.3,并且我能够通过
Camera2dComponents::default()
轻松使用内置转换。 这是自顶向下的2d

问题是尝试将播放器的旋转同步到鼠标:

evreader.iter中事件的
(&cursor\u moved\u事件){
println!(“{:?}”,变换);
查看(Vec3::new(event.position.x(),event.position.y(),0.0),Vec3::new(0.0,0.0,1.0));
println!(“{:?}”,变换);
}
在这个变换中,当然是我的球员的变换。 以下是它的输出:

Transform { translation: Vec3(0.0, 0.0, 0.0), rotation: Quat(0.0, 0.0, 0.0, 1.0), scale: Vec3(1.0, 1.0, 1.0) }
Transform { translation: Vec3(0.0, 0.0, 0.0), rotation: Quat(0.5012898, -0.49870682, -0.49870682, 0.5012898), scale: Vec3(1.0, 1.0, 1.0) }
我对2d中的look\u是什么感到有点困惑,但我尝试了几个不同的值,结果总是一样的:一旦look\u运行,玩家就会从视图中消失。 为什么在那之后摄像机再也看不到球员了,我的这种表情有什么不对

感谢您使用的是2D,而不是<代码>变换更通用,还包括3D所需的内容

在你的情况下,听起来可能不会像你认为的那样。它创建了一个视图矩阵,该视图矩阵是“
”的一个位置(),并朝向一个
目标
(第一个参数)。
up
是“世界向上”的3D矢量。因此,它可以计算旋转校正


更新的解决方案:

如果要旋转自上而下的2D播放器,即让播放器的一侧朝向光标。然后你需要计算玩家的位置和目标之间的角度。你可以很容易地使用

let pos:Vec2=。。。;
让目标:Vec2=。。。;
让角度=(目标位置)。角度与(位置)之间;
transform.rotation=Quat::from_rotation_z(角度);
根据播放器本身的方向,即如果使用精灵,默认方向可能是“看”向左侧或向上。然后可能需要偏移
角度
。您可以通过添加(或需要多少)来实现这一点

假设
transform.translation
是播放器的中心位置,那么它将如下所示:

使用bevy::math:{Quat,Vec2};
设pos=transform.translation.truncate();
让target=event.position;
让角度=(目标位置)。角度与(位置)之间;
transform.rotation=Quat::from_rotation_z(角度);

旧答案:

因为您希望在自顶向下的二维视图中将相机放置在光标上。然后,你必须使用或只是移动,这是你的相机的位置

transform.translation=Vec3::new(event.position.x(),event.position.y(),0.0);

如果您希望光标位置位于屏幕中心,则可能需要减去屏幕大小的一半。

对,这不是我想做的,我希望玩家“注视”鼠标,因此基本上只要旋转,始终面向鼠标。我使用look_-at和鼠标作为目标,希望它能改变旋转方向,使其朝向光标的位置,但它只会使玩家消失。我还没碰相机,但我会让它跟在播放机后面on@Ulrar啊,我明白了,我误解了你的意思。我已经更新了答案:)