如何旋转对象,使其始终面对鼠标位置? [铁锈] [初学者]

时间:2019-12-22 15:54:21

标签: rust nalgebra

首先,让我说我不仅是Rust的初学者,而且还是一般编程的初学者。这也是我第一次发布到Stack Overflow,所以在此先感谢您的帮助!

我目前正在使用ggez与一些朋友一起做游戏,并且我试图让我们的角色始终旋转以面对指针。到目前为止,我知道我需要获取一个以弧度为单位的角度值(f32),并且我想可以使用atan2来获取该值(?)。但是,我只是没有得到想要的行为。

这是我拥有的代码:(顺便说一句,move_data是一个结构,用于保存玩家角色的值,例如位置,速度,角度和旋转速度)。

let m = mouse::position(ctx);
move_data.angle = ((m.y - move_data.position.y).atan2(move_data.position.x - m.x)) * (consts::PI / 2.0) as f32;

我想我已经很接近了,因为我已经可以旋转角色了,但是只能以一种“不完整”的方式进行。当我将鼠标移动到此处时,玩家角色(pc)通常只能面对左上角。否则,如果指针位于pc的右侧和/或下方,则它会以非常缓慢且次要的方式旋转,并停止面向指针。我不知道这个描述是否合理。

我认为问题是我不完全确定atan2首先要做什么(我只记得一些基本的三角函数),而且我也不确定我是否使用正确,所以我不知道完全不知道我的代码在做什么。 (以下是我用于atan2的文档:https://doc.rust-lang.org/std/primitive.f64.html#method.atan2

到目前为止,经过反复的尝试和错误,我仍然做到了尽可能多的谷歌搜索(在寻找基于我的代码的算法时,大多会出现Unity教程的结果),并且我也在非正式的Rust中提出了要求社区Discord服务器,但到目前为止没有任何效果。

我之前也有这段代码,但是也找不到如何使之工作。

let m = mouse::position(ctx); // Type Point2
let mouse_pos = Vector2::new(m.x, m.y); // Transformed to Vector2 to be read by Matrix
move_data.angle = Matrix::angle(&mouse_pos, &move_data.position);

我希望有人可以指导我或暗示可能有一些答案的事情。堆栈溢出,您现在是我唯一的希望!

谢谢:)

0 个答案:

没有答案