0

我试图让一个角色做一个振荡动作。也就是说,角色首先会旋转到某个角度,比如 60 度,然后慢慢回到直立位置,然后向相反方向旋转小于 60 度的角度,比如 55 度,然后再重复一遍,直到旋转角度达到零,字符停止。目前我正在尝试通过声明全局变量并使用 if 块检查它们并在这些块中将它们的值更改 1 度来实现这一点,这样每次计时器调用paintgl 时,它都会将角度减小 1 度并绘制对象从而使其成为看起来它在慢慢旋转。我无法阻止角色。这是我处理它的代码的一部分;

  glRotatef(j,0,1,0);
glRotatef(k,0,1,0);

if(flag)
{
    j = j + 2;
    if (j == 0)
     {
        k = 60;
        flag = !flag;

    }
}

if(!flag)
{

    k = k - 2;
    if(k == 0)
    {
        j = -60;
        flag = !flag;
    }
}

gluCylinder(player, 1,1,8,100,100);

这里圆柱体是我的角色,if 块正在增加/减少全局变量 j 和 k。j 初始化为 -60, k 初始化为 60。

我怎样才能让这件事发挥作用,我怎样才能阻止它。

4

1 回答 1

0

kj浮点变量?如果是这样,精确的比较将不起作用,因为浮点数本质上是不精确的。如果它低于某个阈值,您将不得不采取差异并进行测试。

然而,对于简单的振荡,我只需将时间放入正弦函数中,并将其输出(在 -1…1 范围内)用作缩放和偏移到所需动画状态的函数的输入。

这样做的通用方法是实现动画曲线系统。即,您可以输入用于构造分段插值函数的参数,该函数将时间作为输入变量,并将用户(即您)参数化的插值值作为输出变量。详情请搜索“动画曲线系统”。

于 2012-12-23T23:30:11.333 回答