我想使用LibGDX在我的Android设备屏幕内生成随机位置。
我的sprite
width
为150,height
为150,因此OFFSET = 150
。
我的想法是获取屏幕的宽度,高度,在执行width - 150
和height - 150
时生成一个随机数。
像这样:
int x = 150 + Config.RANDOM.nextInt( (int) (Gdx.graphics.getWidth() - Config.OFFSET) );
int y = 150 + Config.RANDOM.nextInt( (int) (Gdx.graphics.getHeight() - Config.OFFSET) );
测试了它,但遗憾的是,精灵有时会从屏幕上移出来。 这些是调试输出:
03-05 15:50:22.432: I/System.out(4141): X: 828 Y:1384
03-05 15:50:23.432: I/System.out(4141): X: 391 Y:520
03-05 15:50:24.452: I/System.out(4141): X: 230 Y:917
03-05 15:50:25.462: I/System.out(4141): X: 872 Y:808
03-05 15:50:26.472: I/System.out(4141): X: 827 Y:963
03-05 15:50:27.482: I/System.out(4141): X: 595 Y:382
我的屏幕width/height (Gdx.graphics.getWidth() / Gdx.graphics.getHeight):
03-05 15:52:33.862: I/System.out(5771): Width: 1080.0 Height: 1776.0
我是否错误地生成了一个随机位置?
另外我使用的是肖像模式,我不会camera.combine
,因为它会将我的sprites
旋转180度。
camera = new OrthographicCamera(w, h);
camera.setToOrtho(true, w, h);
camera.update();
public void render() {
this.spriteRenderer.setProjectionMatrix(this.instance.camera.combined);
this.spriteRenderer.begin();
if (!this.ballon.isPoping()) {
Sprite s = this.ballon.getSprite();
spriteRenderer.draw(s, 50, 50, s.getWidth(), s.getHeight());
}
// else {
// if (!this.ballon.isPoped()) {
// Sprite s = this.ballon.getCurrentAnimation();
// this.spriteRenderer.draw(s, this.ballon.getX(),
// this.ballon.getY(),
// this.ballon.getSprite().getWidth() * SpriteConfiguration.BALLON_SCALE,
// this.ballon.getSprite().getHeight() * SpriteConfiguration.BALLON_SCALE);
// this.ballon.processAnimation();
// }
// }
this.spriteRenderer.end();
}
答案 0 :(得分:0)
我相信精灵位置设置为屏幕上精灵的左上角。
您想要生成&lt; 0;之间的值宽度 - 150>。但是,您的代码会生成<150;之间的数字。宽度&GT;
用它来生成&lt; 0; width - OFFSET&gt;值
int x = Config.RANDOM.nextInt( (int) (Gdx.graphics.getWidth() - Config.OFFSET) );
int y = Config.RANDOM.nextInt( (int) (Gdx.graphics.getHeight() - Config.OFFSET) );
或者如果你想要&lt; 150;宽度 - 150>范围
int x = Config.OFFSET + Config.RANDOM.nextInt( (int) (Gdx.graphics.getWidth() - Config.OFFSET * 2) );
int y = Config.OFFSET + Config.RANDOM.nextInt( (int) (Gdx.graphics.getHeight() - Config.OFFSET * 2) );
如果我的随机生成器能够正常工作,我发现更容易将头部包裹在边缘情况下以找出答案。只需尝试设置最低x,y优先,然后设置最大值,并尝试它们是否有效。之后只需用随机替换它即可:ie:
int x = 0;
int y = 0;
然后尝试
int x = Gdx.graphics.getWidth() - Config.OFFSET;
int y = Gdx.graphics.getHeight() - Config.OFFSET;
确认边缘情况正确后,只需将其替换为前面所述的两个中的一个。