Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何知道主体在Andengine的manageupdate中的先前位置?_Android_Andengine - Fatal编程技术网

Android 如何知道主体在Andengine的manageupdate中的先前位置?

Android 如何知道主体在Andengine的manageupdate中的先前位置?,android,andengine,Android,Andengine,我想知道从一次更新到另一次更新的位置差异 相关代码: @Override protected void onManagedUpdate(float pSecondsElapsed) { super.onManagedUpdate(pSecondsElapsed); Log.d("bar move", "fuel: "+ Float.toString(walkingFuel)) ;

我想知道从一次更新到另一次更新的位置差异

相关代码:

 @Override
        protected void onManagedUpdate(float pSecondsElapsed) {
            super.onManagedUpdate(pSecondsElapsed);                

                    Log.d("bar move", "fuel: "+ Float.toString(walkingFuel)) ;
                    if(counter==5) {    // each time is to fast to percive difference?
                         Log.d("bar move", "previous x : "+ Float.toString(previousPosition.x)) ;
                         Log.d("bar move", "current x : "+ Float.toString(PlayerBody.getPosition().x)) ;

                         Log.d("bar move", "fuel consumed: "+ Float.toString( Math.abs(previousPosition.x - PlayerBody.getPosition().x) * 5));
                         walkingFuel += Math.abs(PlayerBody.getPosition().x - previousPosition.x  ) * 5.0f;
                         previousPosition = PlayerBody.getPosition();
                         Log.d("bar move", "current fuel : "+ Float.toString(walkingFuel)) ;

                         counter=0;
                    }
                    counter++; }
我认为每次manageupdate的差异是从低到感知差异,这就是计数器的原因。无论如何,在每一次更新中,先前的和当前的都是相等的

这是我的一点日志,让它更简单

燃料:0.0

前x:6.8613663

当前x:6.8613663

耗油量:0.0

当前燃油:0.0

后来

燃料:0.0

前x:7.0288167

当前x:7.0288167

耗油量:0.0

当前燃油:0.0

我做错了什么?如果是的话,正确的方法是什么

previousPosition = PlayerBody.getPosition();
在这里,您可能只是复制对对象的引用,而不是值。 您需要复制该值。可能是这样的:

previousPosition = new Vector2(PlayerBody.getPosition().x, PlayerBody.getPosition().y);
我不记得在andEngine中应该使用什么类型来存储position,所以将该类型更改为“previousPosition”类型

在这里,您可能只是复制对对象的引用,而不是值。 您需要复制该值。可能是这样的:

previousPosition = new Vector2(PlayerBody.getPosition().x, PlayerBody.getPosition().y);

我不记得在andEngine中应该使用什么类型来存储位置,所以将该类型更改为“previousPosition”类型。

作为补充,我想补充一点,更好的方法是不要在每一帧中创建新的Vectro2对象。但是在循环外创建一个顶点,并将其存储在对象的私有字段中。然后,当您想要复制该值时,可以使用Vector2类的“set(vector2v)”方法。在这种情况下,它将复制值,而不会创建新对象。所以你的程序会运行得更快。其实它对速度没有多大影响,只是有一点差别。不管怎样,我还是要试试。作为补充,我想补充一点,更好的方法是不要在每一帧中创建新的Vectro2对象。但是在循环外创建一个顶点,并将其存储在对象的私有字段中。然后,当您想要复制该值时,可以使用Vector2类的“set(vector2v)”方法。在这种情况下,它将复制值,而不会创建新对象。所以你的程序会运行得更快。其实它对速度没有多大影响,只是有一点差别。不管怎样,我还是要试试。