2014-02-15 135 views
1

我想用LibGDX绘制精灵很困难,但我失败了。如果你需要更多的片段,来源如下:https://github.com/reisi007/Planes2DLibGDX/blob/master/Main/src/com/reisisoft/Planes2D/Planes2D.javaLibgdx未能画出精灵

那么,我在做什么? 我正在加载一个PNG(1024x1024)并创建精灵,我把它放在一个地图。这个地图我把地图再(后来不同的分辨率)

private void putTextures(Resolutions resolutions) { 
    Map<GObjects, Sprite> map; 
    switch (resolutions) { 
     case MidRes: 
      map = new EnumMap<GObjects, Sprite>(GObjects.class); 
      map.put(GObjects.PlaneR, new Sprite(txtMidRes, 0, 0, 600, 278)); 
      map.put(GObjects.PlaneG, new Sprite(txtMidRes, 0, 278, 600, 278)); 
      map.put(GObjects.PlaneB, new Sprite(txtMidRes, 0, 556, 600, 104)); 
      map.put(GObjects.Grass, new Sprite(txtMidRes, 0, 834, 600, 104)); 
      map.put(GObjects.Bullet, new Sprite(txtMidRes, 600, 834, 299, 138)); 
      all.put(Resolutions.MidRes, map); 
      break; 
    } 
} 

有一个功能我从当前分辨率的精灵:

private boolean setCurrentResolutions(Resolutions resolution) { 
    if (resolution == null) 
     return false; 
    currentResolution = resolution; 
    currentResolutionSprites = all.get(Resolutions.MidRes); 
    return true; 
} 

private Sprite requestSprite(GObjects gObject) { 
    return currentResolutionSprites.get(gObject); 
} 

我测试了WINOWS建设,伟驰大小800X480。 我想提请精灵的起源是:X 300.0Ÿ139.0 宽度300,高度是140。 接下来的渲染功能:

public void render() { 
    camera.update(); 
    spriteBatch.setProjectionMatrix(camera.combined); 
    Update(); 
    spriteBatch.begin(); 
    Draw(); 
    spriteBatch.end(); 
} 

,因为这不是真正的帮助,这里的Draw方法:

public void Draw() { 
    s.draw(spriteBatch); 
} 

我看到的只是黑色。 我试图用OpenGL 1,1.1,2和各种解决方案,从StackOverflow的

最后的 “创造” 的方法:

// On creation 
public void create() { 
    curH = Gdx.graphics.getHeight(); 
    curW = Gdx.graphics.getWidth(); 
    camera = new OrthographicCamera(curW, curH); 
    spriteBatch = new SpriteBatch(); 
    // Load texture 
    txtMidRes = new Texture(Gdx.files.internal("planes.png")); 
    txtMidRes.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear); 
    // Create Sprites for EVERY supported resolution 
    putTextures(Resolutions.MidRes); 
    // Set resolution according to H/W 
    setCurrentResolutions(Resolutions.MidRes); 
    s = requestSprite(GObjects.PlaneR); 
    s.setSize(300, 140); 
    s.setPosition(Gdx.graphics.getWidth()/2 - s.getWidth()/2, 
      Gdx.graphics.getHeight()/2 - s.getHeight()/2); 
} 

感谢您的帮助所有的

弗洛里安

回答

0

首先,您提供给完整源的链接与那里的片段不匹配。也许有一个被遗忘的推动?现在

对您的问题的一些想法:

  • 您没有设置摄像头的位置。尝试:

    camera.position.set(curH/2f,curW/2f,0);

  • 您不需要手动构建您的精灵,libgdx提供了 功能来做到这一点。在官方文档上查看Texture packer

  • 您还可以使用AssetManager自动处理分辨率。 有关更多信息,请参阅this post

+1

谢谢, 更新摄像头位置帮助:) –