当前位置: 首页 > 知识库问答 >
问题:

XNA中的旋转和弧度,敌人Ai修正

郜昊苍
2023-03-14

我和我的暴徒AI有麻烦

它在一定程度上起作用,但它的作用与我想要的相反,这意味着它向错误的方向旋转180度

        Target = playerST.Posistion;
        Vector2 trivial;
        trivial.X = Posistion.X - Target.X;
        trivial.Y = Posistion.Y - Target.Y;
        instant = ((float)Math.Atan2(trivial.Y, trivial.X)) + 3.141592f; 

这会告诉我目标在哪里,并计算出需要旋转的数字

它的弧度加上3.1etc等于180度,因为这样计算它的最小值为-3.141,最大值为3.141,但敌人的旋转是在0到6.28之间进行的,加上3.141使瞬变=在敌人旋转的范围内,而不是在敌人旋转的范围下3.141

不管怎么说,这就是我被困的地方。。。实际的旋转

        // irrelevant
                if (attack == true)
            {

                Vector2 modelVelocityAdd = Vector2.Zero;

                modelVelocityAdd.Y = -(float)Math.Sin(rotation);
                modelVelocityAdd.X = -(float)Math.Cos(rotation);

                modelVelocityAdd *= (0.00002f * speed);
                if ((((rotation) + 0.2f)) < instant && (rotation - 0.2f) > instant)
                {
                    modelVelocity += modelVelocityAdd;
                }
        // not so irrelvant and needs fixing!
                if (instant < rotation )
                    {
                         rotation -= rotationspeed / 2000;
                    }
                else if (rotation < instant)
                    {
                         rotation += rotationspeed / 2000;
                    }

所以我的问题是,我如何阻止它朝着错误的方向旋转180度,让它面对玩家,而不是完全相反的方向

我不能简单地,做下面的事情,因为船被困,在5度到零下5度之间来回移动

            if (instant < rotation )
                    {
                         rotation += rotationspeed / 2000;
                    }
                else if (rotation < instant)
                    {
                         rotation -= rotationspeed / 2000;
                    }

谢谢任何帮助

共有2个答案

荀振国
2023-03-14

我想出来了,

    trivial.X = Posistion.X - Target.X;
    trivial.Y = Posistion.Y - Target.Y;

你错了吗应该是的

    trivial.X = Target.X -Posistion.X  ;
        trivial.Y = Target.Y - Posistion.Y ;

谢谢你,没有你的帮助,我永远不会注意到: D

丌官淇
2023-03-14

而不是

           if (instant < rotation )
                {
                     rotation += rotationspeed / 2000;
                }
            else if (rotation < instant)
                {
                     rotation -= rotationspeed / 2000;
                }

尝试

rotation = Math.Lerp(rotation, instant, 0.1);

0.1控制旋转“速度”。使用lerp使运动更自然,并将解决角度在正负之间振荡的问题。

 类似资料:
  • 问题 你需要实现弧度和度之间的转换。 解决方案 使用 JavaScript 的 Math.PI 和一个简单的公式来转换两者。 # 弧度转换成度 radiansToDegrees = (radians) -> degrees = radians * 180 / Math.PI radiansToDegrees(1) # => 57.29577951308232 # 度转换成弧度 degr

  • 我是XNA的新手。我只是陷入了某种困境——我必须在游戏中倾斜/翻转角色,这意味着围绕X轴和Z轴旋转(不是同时旋转!)我可以做旋转-这意味着绕Y轴旋转。我有旋转矩阵,角色的当前位置向量(也是可以从旋转矩阵中获得的朝向/方向向量)我通过将朝向向量围绕Y轴旋转R弧度来实现旋转,即围绕Y轴旋转。比如说,如果我现在绕X轴旋转,那么方法是什么?例如,从站立姿势改为“超人飞行”姿势需要角色倾斜。。。y旋转不涉及

  • 我试图得到4个Vector2对象,它们代表一个精灵的4个角,在精灵自身围绕其中心旋转时旋转。但是,在下面的代码中,Vector2对象在客户端空间中围绕0,0旋转,而不是围绕对象的中心旋转。使用矩阵变换,是否有任何方法可以围绕对象的中心而不是全局坐标(0,0)旋转Vector2对象? 这是迄今为止旋转的函数:

  • 问题内容: 我有一个SCNCamera场景设置,可以围绕一个对象旋转。 限制相机围绕物体旋转的最佳方式是什么? 示例:除了能够围绕整个球体旋转之外,我如何将旋转限制为单个半球? 我的第一个尝试是查看.allowsCameraControl是否存在任何限制。找不到任何东西。 然后,我尝试使用c#Unity:鼠标轨道脚本,不走运。 关于如何解决或解决此问题的一些指示将非常有用。 问题答案: 您似乎就快

  • 没多久,绝影干脆在学校外面租了房子自己搬了出去。 超薄早在上上学期就在外面租了房子,本来超薄话不多,看起来又热爱学习,大家都以为他是个老实人,根本没想到他居然是寝室第一个谈恋爱的,更没想到他居然会租房子同居。上学期王江也出去租了房子,他有足够的理由:要搞音乐,搞乐队,还要搞平面设计,比如搞音乐的搞设计的标志是什么?当然是有一家属于自己的工作室。――所以租间房子作工作室是很让人信服的。 绝影也想出去

  • 问题内容: 我正在尝试在用户创建对象时从x,y获得以度为单位的alpha角度。 我写了以下构造函数: 我是正确的_alpha现在是一个以度为单位的角度,而不是我从atan()方法获得的弧度吗? 有一个简单的方法吗? 谢谢 ! 问题答案: 为什么不使用Java SE附带的内置方法。