【问题标题】:Bullet positioning while rotating旋转时的子弹定位
【发布时间】:2016-05-14 17:12:22
【问题描述】:

我正在 libgdx 上创建一个 android 应用程序(自上而下的射击游戏),但子弹定位有问题(不,真正的数学)
所以问题是计算子弹的位置
我想在这里生成子弹:
example (红线所在的位置)
我将位置计算为:

bullet.setPosition(world.getPlayer().getX() + world.getPlayer().getWidth() * (float) Math.cos(Math.toRadians(world.getPlayer().getRotation())), world.getPlayer().getY() + world.getPlayer().getHeight() * (float) Math.sin(Math.toRadians(world.getPlayer().getRotation())));

当旋转 = 0 时它运行良好,但是一旦我开始旋转我的播放器,它就会出错:(

【问题讨论】:

    标签: java android libgdx


    【解决方案1】:

    我假设您的播放器对象是 libGDX Sprite。因此,getXgetY 是精灵左下角的坐标,getRotation 是精灵围绕原点(假设在玩家中心)的旋转。

    通过执行一些基本的三角函数,您可以将角度和位移转换为 (x,y) 坐标,正如您所尝试的那样。子弹需要围绕玩家的中心旋转。这可以通过以下代码完成:

    Sprite player = world.getPlayer(); //Just to tidy up the code
    
    //Half width, half height and rotation
    float hw = player.getWidth() / 2.0f;
    float hh = player.getHeight() / 2.0f;
    float rot = Math.toRadians(player.getRotation());
    
    bullet.setPosition(player.getX() + hw + hw * (float) Math.cos(rot),
                       player.getY() + hh + hh * (float) Math.sin(rot));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-26
      • 2018-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      • 1970-01-01
      相关资源
      最近更新 更多