2013-08-05 60 views
0

我有问题来集中我的精灵动画有谁能给我一个灯?不能集中动画(libGdx)

public void render() { 
    Gdx.gl.glClearColor(1, 1, 1, 1); 
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

    stateTime += Gdx.graphics.getDeltaTime();      
    currentFrame = walkAnimation.getKeyFrame(stateTime, true);  



    batch.setProjectionMatrix(cam.combined); 
    batch.begin(); 
    batch.draw(currentFrame, Gdx.graphics.getWidth()/2 - ((walkSheet.getWidth()/FRAME_COLS)/2), Gdx.graphics.getHeight()/2 - ((walkSheet.getHeight()/FRAME_ROWS)/2), width/2, height/4);       

我的动画正在向左画几个像素。

+0

它看起来像你试图用'walkSheet.getWidth()/ FRAME_COLS'计算当前帧的宽度...为什么不直接调用'currentFrame.getWidth()'而已? – DannyMo

+0

@damo感谢您的答案,但它只是给了我相同的结果,当在桌面上运行时,动画会稍微向右移动,在我的手机上运行时会稍微向左,可能不是那段代码我必须改变? –

+0

我也会确保你正确定义了你的TextureRegion。 'TextureRegion'可能会在屏幕中居中,但精灵可能不会在'TextureRegion'中居中。 – DannyMo

回答

1

对于x位置,你有─

Gdx.graphics.getWidth()/2 - ((walkSheet.getWidth()/FRAME_COLS)/2) 

如果每个动画形象是100像素宽,你为什么不使用 -

private static final float WALK_ANIM_WIDTH = 100f; 

X位置会那么 -

Gdx.graphics.getWidth()/2f - WALK_ANIM_WIDTH/2f 

UPDATE

从您的评论的基础,你可以有一些喜欢 -

public static final int SCREEN_WIDTH = 800; 
public static final int SCREEN_HEIGHT = 520; 

guiCam = new OrthographicCamera(SCREEN_WIDTH, SCREEN_HEIGHT); 
guiCam.position.set(SCREEN_WIDTH/2f, SCREEN_HEIGHT/2f, 0); 

现在,而不是使用“Gdx.graphics.getWidth()”,你可以简单地使用SCREEN_WIDTH。

查看libGDX中的SuperJumper演示。你会看到他们在游戏世界中如何使用视口。

+0

谢谢,这有助于我使代码更容易,但是,如果我想根据不同的分辨率调整我的动画呢?它会继续工作吗?我非常喜欢使用Gdx.graphics.getWidth/2,Gdx.graphics.getHeight/4来根据当前分辨率调整动画大小,这就是我认为这会让我的动画无法居中。我该如何解决这个问题?我希望能够很容易地理解我在写什么,因为英语不是我的母语 –

+0

@IvanCarlos只要您使用视口,它仍然会工作。要测试它,您可以调整您的桌面应用程序的大小。 :)看看libGDX中的SuperJumper演示。您将看到FRUSTUM_WIDTH和FRUSTUM_HEIGHT以及它们如何使用,以便即使调整大小,也会相应地缩放。 –

+0

非常感谢帮助我。现在当我改变窗口的大小时,动画也会调整大小,但它会离开中心,当我缩小屏幕时,会根据屏幕大小进行左下角动画,当动画变大时走向右侧和顶部,我怎样才能使动画集中在相机? –