java libgdx android中浮点问题

时间:2014-02-23 07:53:06

标签: java android libgdx

好吧我使用libgdx进行Android游戏开发,我有一个AI,根据变量“ENEMYSPEED”的值移动。最初,该值设置为

static float EnemySPEED = 0.5f;

一切正常。所以我执行一个像这样的简单计算

  

EnemyVector.y - = EnemySPEED

到目前为止一切都很好......

现在我感觉我的AI正在快速移动并且我将变量值从0.5f减小到0.4f并且我执行相同的减量操作并且它不会减少!

发生了什么事???

编辑:

private void EnemyMove()
{
    EnemySection = findSection(Enemy);
    if(EnemySection == PlayerSection)
    {
        if(EnemyVector.x > PlayerVector.x) EnemyVector.x -= EnemySPEED;
        else if(EnemyVector.x < PlayerVector.x) EnemyVector.x += EnemySPEED;        
        else if(EnemyVector.y > PlayerVector.y) EnemyVector.y -= EnemySPEED;
        else if(EnemyVector.y < PlayerVector.y) EnemyVector.y += EnemySPEED;
    }
    else if(EnemySection == 1 ||EnemySection ==  3) EnemyVector.x += EnemySPEED;
    else if(EnemySection == 2 ||EnemySection ==  4) EnemyVector.x -= EnemySPEED;
    else if(EnemySection == 5)
    {
        if(EnemyVector.y > 212 || EnemyVector.y < 75)
        {
            if(PlayerSection == 1 ||PlayerSection ==  3) EnemyVector.x -= EnemySPEED;
            else if(PlayerSection == 2 ||PlayerSection ==  4) EnemyVector.x += EnemySPEED;  
        }
        else
        {
            if(PlayerSection == 1 ||PlayerSection ==  2) EnemyVector.y += EnemySPEED;
            else if(PlayerSection == 3 ||PlayerSection ==  4) EnemyVector.y -= EnemySPEED;
        }
    }

    if(Player.overlaps(Enemy)) System.out.println("Target Acquired!");  
    System.out.println(EnemyVector.x + "," + EnemyVector.y);
}

findSection根据传递的参数找到敌人或玩家所在的象限。

编辑2:我刚注意到它只适用于0.5,1,1.5而不是任何值。这是某种限制吗?

2 个答案:

答案 0 :(得分:1)

伙计们我很抱歉问题是比较两个花车......:/

例如,比较127.8和127.0显然无法正常工作。

我将代码更改为此并且工作正常...不知道我是如何错过这个......所学的经验教训

无论如何,谢谢各位朋友的帮助..

if((int)EnemyVector.x > (int)PlayerVector.x) EnemyVector.x -= EnemySPEED;
        else if((int)EnemyVector.x < (int)PlayerVector.x) EnemyVector.x += EnemySPEED;      
        else if((int)EnemyVector.y > (int)PlayerVector.y) EnemyVector.y -= EnemySPEED;
        else if((int)EnemyVector.y < (int)PlayerVector.y) EnemyVector.y += EnemySPEED;

答案 1 :(得分:0)

尝试将EnemySPEED设为volatile。可能是EnemySPEED正在执行此代码的线程缓存,因此当您将EnemySPEED0.5更改为{{{}时,您无法看到差异1}}。