Java 如何在Gdx android游戏编程中获得矩形的真实触摸位置?

Java 如何在Gdx android游戏编程中获得矩形的真实触摸位置?,java,android,libgdx,touch,Java,Android,Libgdx,Touch,这是一个简单的android游戏,有一个水桶和雨滴。这个游戏是关于抓住一滴雨滴到桶里。问题在于铲斗,因为铲斗的位置与触摸输入的位置不对应 第二个问题是因为我不知道如何插入带有雨滴计数器的小窗口。我需要一个柜台,上面放着一些我掉进桶里的雨滴 以下是我的android游戏的代码: 我知道我的解决方案是使用Vector3,但不知道具体如何解决? 当我试着玩游戏时,我的触球位置不是真实的位置 if(bucket.x800-64){ 桶x=800-64; } 如果(TimeUtils.nanoTime()

这是一个简单的android游戏,有一个水桶和雨滴。这个游戏是关于抓住一滴雨滴到桶里。问题在于铲斗,因为铲斗的位置与触摸输入的位置不对应

第二个问题是因为我不知道如何插入带有雨滴计数器的小窗口。我需要一个柜台,上面放着一些我掉进桶里的雨滴

以下是我的android游戏的代码:

我知道我的解决方案是使用Vector3,但不知道具体如何解决? 当我试着玩游戏时,我的触球位置不是真实的位置

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();