角色Z旋转

时间:2015-01-17 03:01:01

标签: javascript math rotation geometry

我知道这是一个非常愚蠢的问题,但我无法绕过它。

var x = pressed('left') - pressed('right') // obvious (0 = nope, 1 = left, -1 = right)
var z = pressed('up')   - pressed('down' ) // also obvious
player.rotation.y = somehowGetRotationInRadians;

事实上,我太愚蠢了,不知道如何从这两个变量中获得角色的轮换。我打赌有一些平均值和π涉及,但我不知道如何。

我不知道标签的相关性。

1 个答案:

答案 0 :(得分:0)

在当前状态下更具体,你的问题没有多大意义

  • 它意味着你想通过箭头键击来控制一些物体(玩家)
  • 我现在假设2D

所以你需要的是:

  1. 对象位置和方向数据

        struct plr_object
         {
         double x,y; // position in pixels or meters or whatever
         double a;   // angle in radians
         } plr;
    
    • 这必须是持久的全局或静态变量...
    • 或本地全局变量
    • 或引用它
  2. 键盘事件(或某些计时器)

        double da=5.0*M_PI/180.0; // rotation speed
        double dl=5.0; // movement speed
        bool _redraw=false;
        // handle rotation
        if (pressed('left' )) { plr.a+=da; redraw=true; }
        if (pressed('right')) { plr.a-=da; redraw=true; }
        // handle movement
        if (pressed('up'   )) { plr.x+=dl*cos(plr.a); plr.y+=dl*sin(plr.a); redraw=true; }
        if (pressed('down' )) { plr.x-=dl*cos(plr.a); plr.y-=dl*sin(plr.a); redraw=true; }
        if (_redraw) redraw the scene ...
    
  3. 重绘

    • 在重绘时你必须处理对象的角度
    • 所以它是绘制旋转
    • 使用变换矩阵,或者如果您的对象只是一些简单的GDI,如
    • circle + line然后只绘制旋转方向的重要部分。