我正在尽力为屏幕渲染纹理。我也尝试渲染一个精灵,但没有一个成功。根据我的理解,相机需要一个视口,最好在渲染你的世界时使用世界单位。我了解单位,这是有道理的。但如果你说你的世界是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();
}
}
}
答案 0 :(得分:1)
您的错误就在这一行:
camera.viewportHeight = 30f * (height/width);
height
和width
都是整数,因此如果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的屏幕(相反的极端),它仍将覆盖整个区域。