使用Libgdx在Android中渲染障碍

时间:2015-10-01 18:30:03

标签: android libgdx textures rendering sprite

我正在尽力为屏幕渲染纹理。我也尝试渲染一个精灵,但没有一个成功。根据我的理解,相机需要一个视口,最好在渲染你的世界时使用世界单位。我了解单位,这是有道理的。但如果你说你的世界是100X100那么你的精灵背景也必须是100X100。我仍然没有得到它应该覆盖整个设备屏幕(Android手机)。我想提供不同分辨率的资产或实现一个stretchviewport可能是理想的。另外,我正在尝试实现私有的moveCamera方法。我的目标是 使相机以随机方式移动,显示纹理的一部分。当我第一次运行代码时,我看到相机移动但屏幕移动了 变成红色,然后变黑。我想我可能必须夹住相机以迫使它保持在资产的范围内。请帮我设置这个功能。

这里是我的代码:(无法呈现一件事)

public class myGdxGame extends ApplicationAdapter{

 @Override
 public void Create(){
 scenery= new Texture...;
 sprity= new Sprite(new Texture(..));
 sprity.setPosition(0f,0f);
 sprity.setSize(100f,100f);

 w= Gdx.graphics.getWidth();
 h= Gdx.graphics.getHeight();

 moveX=0f;//float value
 moveY=0f;//float value
 time= System.currentTimeMillis();

 camera= new OrthoGraphicCamera(30,30*(h/w));
 camera.position.set(camera.viewportWidth/2f,camera.viewportHeight/2f,0);
 camera.update();

 }

 @Override
 public void resize(int width, int height) {
 camera.viewportWidth = 30f;        
 camera.viewportHeight = 30f * (height/width);
 camera.update();

}

@Override
public void render () {

moveCamera();
camera.update();
batch.setProjectionMatrix(camera.combined);

Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

batch.begin();
batch.draw(scenery, 0, 0);
batch.end();

}

public void moveCamera(){

if(System.currentTimeMillis()-time>2000){

double random=Math.round(Math.random()*100);
double random2=Math.round(Math.random()*100);
double d=random/10;
double e=random2/10;
int f=(int)d;
int g=(int)e;
moveX=moveX+f;
moveY=moveY+g;

time=System.currentTimeMillis();
camera.translate(moveX,moveY,0);
camera.update();

}
}

}

1 个答案:

答案 0 :(得分:1)

您的错误就在这一行:

camera.viewportHeight = 30f * (height/width);

heightwidth都是整数,因此如果width超过height(height/width) == 0,那么您将视图高度设置为0。

将其中一个投放到浮动中,您的问题将得到解决。

camera.viewportHeight = 30f * ((float)height/width);

请注意,您将世界宽度设置为30,而不是像您描述的那样设置为100。

我不认为StretchViewport是一个很好的解决方案,因为东西会看起来扭曲。我建议使用ExtendViewport并根据其中一个极值(4:3或16:9)给出尺寸。然后让你的背景足够大,以覆盖额外的区域,以达到另一个极端。

例如,您可以制作new ExtendViewport(400, 300),因此它的设计比例为4:3。然后使你的背景图像至少为534 x 300,这样如果你得到一个16:9的屏幕(相反的极端),它仍会覆盖整个区域。

或者相反:制作一个new ExtendViewport(800, 450),使其设计为16:9比例。然后使你的背景图像至少800 x 600,这样如果你得到一个4:3的屏幕(相反的极端),它仍将覆盖整个区域。