代码之家  ›  专栏  ›  技术社区  ›  Joe Smith

旋转固定在精灵上的Vector2

  •  0
  • Joe Smith  · 技术社区  · 8 年前

    我正在制作一个小行星克隆体,激光需要从船的前部射出,但是当我尝试使用旋转矩阵旋转矢量时,它会失控,飞满屏幕,我需要激光从船的前面射出,并使原点与船保持360度。目前,当船直接面向东方时,它只以90度角笔直射击。

    以下是我目前的情况:

    lLasers.Add(new Laser(Vector2.Transform(new Vector2((vPlayerPosition.X + 35), (vPlayerPosition.Y)), Matrix.CreateRotationZ(angle))));
    

    其中角度为

    Vector2 direction = mouseLoc - vPlayerPosition;
    angle = (float)(Math.Atan2(direction.Y, direction.X));
    

    包括一些图片以更好地解释我的问题

    Origin in Bottom Left Corner

    Shooting Straight at 90 degrees

    1 回复  |  直到 8 年前
        1
  •  0
  •   G.Vernier    8 年前

    您错误地使用了Vector2.Transform()。 第一个参数是要用矩阵变换的“参考”向量。

    在您的情况下,如果您希望函数返回激光器起始位置的位置,则需要将Vector2(shipWidth/2f,0)作为参数。

    因此:

    Vector2 laserStart = vPlayerPosition + Vector2.Transform(new Vector2(shipWidth / 2f, 0), Matrix.CreateRotationZ(angle));
    

    然后你可以从这个位置开始画激光。