Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.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
Java 向下移动摄影机时对象会抖动_Java_Android_Libgdx - Fatal编程技术网

Java 向下移动摄影机时对象会抖动

Java 向下移动摄影机时对象会抖动,java,android,libgdx,Java,Android,Libgdx,我一直在做一个游戏,在这个游戏中,有很多物体以负“y”的形式出现,而我已经使用了arrayList,我正在向下移动主要角色。但是当相机与角色一起移动时,物体移动不平稳,它们在一段时间后会出现抖动。下面是代码 @Override public void create() { camera = new OrthographicCamera(480, 720); camera.position.set(480 / 2, 720 / 2, 0); batch = new Spri

我一直在做一个游戏,在这个游戏中,有很多物体以负“y”的形式出现,而我已经使用了arrayList,我正在向下移动主要角色。但是当相机与角色一起移动时,物体移动不平稳,它们在一段时间后会出现抖动。下面是代码

@Override
public void create() {
    camera = new OrthographicCamera(480, 720);
    camera.position.set(480 / 2, 720 / 2, 0);
    batch = new SpriteBatch();
    int i;

    this.baloonArrList = new ArrayList<Baloon>();

    for (i = 0; i < 3000; i += 300) {
        Baloon baloon = new Baloon(200, i);
        baloonArrList.add(baloon);
        System.out.println(baloon.balloon_y);
    }
    texture1 = new Texture(Gdx.files.internal("data/sheet_final.png"));
    textureRegion1 = new TextureRegion(texture1, 561, 156, 115, 101);
}

@Override
public void render() {

    GLCommon gl = Gdx.gl;
    Gdx.gl.glClearColor(1, 1, 1, 1);
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    camera.position.y += 4;
    camera.update();
    batch.setProjectionMatrix(camera.combined);
    batch.begin();
    int len = baloonArrList.size();

    for (int i = 0; i < len; i++) {
        batch.draw(textureRegion1, baloonArrList.get(i).balloon_x,
                baloonArrList.get(i).balloon_y, 100, 100);
    }

    batch.end();

}
@覆盖
公共void create(){
摄像机=新的正交摄像机(480720);
摄像机位置设置(480/2720/2,0);
批次=新的SpriteBatch();
int i;
this.baloonArrList=new ArrayList();
对于(i=0;i<3000;i+=300){
巴伦巴伦=新巴伦(200,i);
baloonArrList.添加(baloon);
System.out.println(baloon.balloon_y);
}
texture1=新纹理(Gdx.files.internal(“data/sheet_final.png”);
纹理区域1=新纹理区域(纹理1、561、156、115、101);
}
@凌驾
公共无效呈现(){
GLCommon gl=Gdx.gl;
Gdx.gl.glClearColor(1,1,1,1);
gl.glClear(GL10.gl\u颜色\u缓冲\u位);
摄像机位置y+=4;
camera.update();
batch.setProjectionMatrix(camera.combined);
batch.begin();
int len=baloonArrList.size();
对于(int i=0;i

那么,我怎样才能使物体的运动平稳呢。

我认为你的问题的根源在于以下几行:

camera.position.y += 4;
您应该将其更改为较小的值,或者更好地根据帧速率的速度进行更改:

camera.position.y += 4 * Gdx.graphics.getDeltaTime();

这样,您的相机将在y方向上每秒移动4个像素,而不是每帧移动4个像素。(当然,您可能需要增加4以加快渲染速度,但它会使渲染过程非常平滑。)

如果渲染不平稳且不一致(请使用以了解获得的帧速率),则渲染过程中会花费更多/可变的时间。您应该使用探查器来计算时间的走向。Eclipse附带的Android DDMS工具相当不错。过于频繁的垃圾收集通常是可变运行时的一个来源,但在试图修复它之前,最好先了解发生了什么


也就是说,@Jyro117建议让你的状态更新与帧速率无关始终是一个好主意。

问题是发生在Android、桌面还是两者都有?@RodHyde这两种系统都有。