在问题上使用陀螺仪

时间:2013-09-14 17:12:26

标签: android opengl-es

好吧所以我正在研究OpenGL ES的一些东西,并且我想用设备方向移动一些东西,现在它的工作正常......我的意思是运动起作用,但由于某些原因仍然摆脱了我给它的边界。这是我的代码:

        float pos = Triangle.getPosX();
        float pos2 = Triangle.getPosY();
        float pos3 = Triangle.getPosZ();


        float pos4 = Triangle.getPosX2();
        float pos5 = Triangle.getPosY2();
        float pos6 = Triangle.getPosZ2();
         switch (event.sensor.getType())
         {
            case Sensor.TYPE_ACCELEROMETER:

                if(event.values[0] > 1)
                {
                    if(pos < 0)
                    {
                        Triangle.setPosX(pos - 0.1f);
                        Triangle.setPosY(pos2 - 0.1f);
                        Triangle.setPosZ(pos3 - 0.1f);
                    }
                }
                System.out.println(" , " +event.values[0] + pos);
                if(event.values[0] < -1)
                {
                    if(pos > -3)
                    {
                        Triangle.setPosX(pos + 0.1f );
                        Triangle.setPosY(pos2 + 0.1f);
                        Triangle.setPosZ(pos3 + 0.1f);
                    }
                }
            break;

我不知道为什么它仍然可以离开屏幕。任何人吗?

1 个答案:

答案 0 :(得分:0)

您的普通英语代码可以做到这一点:

     
If posx is less than 0
    Decrease posx. Without bounds.

If posx is greater than -3 
    Increase it. Without bounds.

最好的办法是:

     
If posx is less than 0
    Increase posx.

If posx is greater than -3 
    Decrease posx.

例如使用像这样的Java代码。 我重命名了一些变量,使其含义更加明确。

float posx = Triangle.getPosX();
float posy = Triangle.getPosY();
float posz = Triangle.getPosZ();

switch (event.sensor.getType())
{
    case Sensor.TYPE_ACCELEROMETER:

    float accelx = event.values[0];
    if(accelx > 1 && posx < 0)
    {
        Triangle.setPosX(posx + 0.1f);
        Triangle.setPosY(posy + 0.1f);
        Triangle.setPosZ(posz + 0.1f);
    }

    if(accelx < -1 && posx > -3)
    {
        Triangle.setPosX(posx - 0.1f);
        Triangle.setPosY(posy - 0.1f);
        Triangle.setPosZ(posz - 0.1f);
    }
    break;
}