Java 如何在Gdx android游戏编程中获得矩形的真实触摸位置?
这是一个简单的android游戏,有一个水桶和雨滴。这个游戏是关于抓住一滴雨滴到桶里。问题在于铲斗,因为铲斗的位置与触摸输入的位置不对应 第二个问题是因为我不知道如何插入带有雨滴计数器的小窗口。我需要一个柜台,上面放着一些我掉进桶里的雨滴 以下是我的android游戏的代码: 我知道我的解决方案是使用Vector3,但不知道具体如何解决? 当我试着玩游戏时,我的触球位置不是真实的位置Java 如何在Gdx android游戏编程中获得矩形的真实触摸位置?,java,android,libgdx,touch,Java,Android,Libgdx,Touch,这是一个简单的android游戏,有一个水桶和雨滴。这个游戏是关于抓住一滴雨滴到桶里。问题在于铲斗,因为铲斗的位置与触摸输入的位置不对应 第二个问题是因为我不知道如何插入带有雨滴计数器的小窗口。我需要一个柜台,上面放着一些我掉进桶里的雨滴 以下是我的android游戏的代码: 我知道我的解决方案是使用Vector3,但不知道具体如何解决? 当我试着玩游戏时,我的触球位置不是真实的位置 if(bucket.x800-64){ 桶x=800-64; } 如果(TimeUtils.nanoTime()
if(bucket.x<0){
bucket.x=0;
}
如果(桶y>800-64){
桶x=800-64;
}
如果(TimeUtils.nanoTime()-lastDropTime>100000000){
创造雨滴();
}
迭代器迭代器=raindrops.Iterator();
while(iterator.hasNext()){
矩形雨滴=迭代器.next();
raindrop.y-=200*Gdx.graphics.getDeltaTime();
if(雨滴.y+64<0){
iterator.remove();
}
if(雨滴重叠(桶)){
dropSound.play();
iterator.remove();
}
}
}
@凌驾
公共空间处置(){
dropSound.dispose();
rainMusic.dispose();
bucketImage.dispose();
dropImage.dispose();
spriteBatch.dispose();
}
私人雨滴(){
矩形雨滴=新矩形();
雨滴宽度=64;
雨滴高度=64;
雨滴y=480;
雨滴.x=数学随机数(0800-64);
雨滴。添加(雨滴);
lastDropTime=TimeUtils.nanoTime();
}
}
您忘记了y坐标:
if (Gdx.input.isTouched()){
bucket.x = Gdx.input.getX() - bucket.getWidth() / 2;
bucket.y = Gdx.input.getY() - bucket.getHeight() / 2;
}
对于雨滴计数器,您可以使用
和在渲染方法中
spriteBatch.begin();
font.draw(spriteBatch, "some string", x, y);
spriteBatch.end();
但是如何将所有新代码放入我的游戏项目中,这样我就可以开始玩游戏了?
if (bucket.x < 0){
bucket.x = 0;
}
if (bucket.y > 800 - 64){
bucket.x = 800 - 64;
}
if (TimeUtils.nanoTime() - lastDropTime > 1000000000){
createRainDrops();
}
Iterator<Rectangle> iterator = raindrops.iterator();
while (iterator.hasNext()){
Rectangle raindrop = iterator.next();
raindrop.y -= 200 * Gdx.graphics.getDeltaTime();
if (raindrop.y + 64 < 0){
iterator.remove();
}
if (raindrop.overlaps(bucket)){
dropSound.play();
iterator.remove();
}
}
}
@Override
public void dispose () {
dropSound.dispose();
rainMusic.dispose();
bucketImage.dispose();
dropImage.dispose();
spriteBatch.dispose();
}
private void createRainDrops() {
Rectangle raindrop = new Rectangle();
raindrop.width = 64;
raindrop.height = 64;
raindrop.y = 480;
raindrop.x = MathUtils.random(0, 800 - 64);
raindrops.add(raindrop);
lastDropTime = TimeUtils.nanoTime();
}
}
if (Gdx.input.isTouched()){
bucket.x = Gdx.input.getX() - bucket.getWidth() / 2;
bucket.y = Gdx.input.getY() - bucket.getHeight() / 2;
}
spriteBatch = new SpriteBatch();
font = new BitmapFont(Gdx.files.internal("Font.fnt"),
Gdx.files.internal("Font.png"), false);
spriteBatch.begin();
font.draw(spriteBatch, "some string", x, y);
spriteBatch.end();