首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据另一个精灵SDL2 & C++11的旋转更改精灵的位置

根据另一个精灵SDL2 & C++11的旋转更改精灵的位置
EN

Stack Overflow用户
提问于 2014-07-27 00:40:05
回答 2查看 185关注 0票数 2

我有一个空间主题的游戏与宇宙飞船,移动与相机和旋转使用SIN&COS功能,以1度精度。宇宙飞船正确地移动和旋转。我现在正在调查从那艘宇宙飞船发射的子弹。

到目前为止,我可以从宇宙飞船上创建一个镜头,无论它面对的是哪个方向。然而,我想知道是否有一种方法可以让我根据飞船面对的位置在镜头中产卵?我可以处理所有角度的拍摄后,我有它的产卵。我还不知道如何让它根据它的旋转在宇宙飞船前面产卵。

我在C++ 11上使用SDL2。

如果可能的话,我不希望你直接告诉我代码,因为我不会从中学到任何东西。我将此作为一种学习经验。我是否需要为宇宙飞船360度旋转周期的每个1度角声明产卵位置的点?或者他们是一种更有活力的方式来做这样的事情?

EN

回答 2

Stack Overflow用户

发布于 2014-07-27 01:41:03

可以通过将三角函数应用于船舶旋转来计算x和y偏移。把它加到船的位置上,你就会得到弹丸的绝对位置。例如:

代码语言:javascript
复制
bulletRotation = shipRotation;
bulletCenterX = shipCenterX + cos(shipRotation) * offset;
bulletCenterY = shipCenterY + sin(shipRotation) * offset;

如果您已经实现了项目符号的物理原理,那么您也可以重用该逻辑。只要让子弹稍微往前一点。

一定不要把度数和弧度混为一谈。

票数 1
EN

Stack Overflow用户

发布于 2014-07-27 01:43:47

设O为宇宙飞船的中心,Ox是以O为原点的参考轴,A是您正在寻找的点。只要你知道A与O的距离(如果你的宇宙飞船只旋转,它应该是恒定的)以及OA和Ox之间的角度θ,就可以很容易地确定A的坐标。

相对于O,

代码语言:javascript
复制
Ax = OA * cos(theta)
Ay = OA * sin(theta)

要得到绝对坐标,只需将相对坐标与O的坐标相加即可。

我不知道你是如何计算你的投篮轨迹的,但你可以用类似的方法来计算(你只需要改变OA的距离,只要O不动)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24973221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档