gpt4 book ai didi

java - 如何检测两个 Sprite 是否同时被触摸?

转载 作者:行者123 更新时间:2023-12-01 11:04:53 25 4
gpt4 key购买 nike

我尝试过这个:

if(spr.getBoundingRectangles.contain(x,y)){
//do this
}

但是如何检测另一个 Sprite 是否被第二个指针触摸呢?

编辑:

for(int i = 0; i < Constants.MAX_POINTERS; i++){
if(Gdx.input.isTouched(i)){
xy.set(Gdx.input.getX(i), Gdx.input.getY(i), 0);
xy1.set(Gdx.input.getX(i), Gdx.input.getY(i), 0);
WorldRenderer.camera.unproject(xy);
WorldRenderer.camera.unproject(xy1);

if(Spr.getBoundingRectangle().contains(xy.x, xy.y) &&
Spr1.getBoundingRectangle().contains(xy.x, xy.y))
score += 1;
}
}

发生的情况是,xyxy1 始终相同,当我用第二个指针触摸屏幕时,它们都会切换到新坐标,而不是具有xy 和 xy1 都有两个不同的 x,y。

最佳答案

您可以迭代所有指针,检查它们是否触摸屏幕,然后检查位置是否与 Sprite 位置重叠

    final int MAX_POINTERS = 5;

...

for(int i = 0; i < MAX_POINTERS; i++)
{
if( Gdx.input.isTouched(i) )
{
int x = Gdx.input.getX(i);
int y = Gdx.input.getY(i);

if( sprite.getBoundingRectangle().contains(x, y) ) //instead of checking one sprite iterate over sprites array
{
System.out.println("The sprite is touched!");
}

//if... - or just add more ifs
}
}

你需要定义最大的指针数来迭代它 - 据我所知 Libgdx 支持最多 20 个指针

<小时/>

关于编辑:

当然,它们是相同的...:) 您将赋予 vector 相同的值(value)。我上面的例子比你需要的更通用 - 如果你知道你有两个指针,你可以使用:

if( Gdx.input.isTouched(0) && Gdx.input.isTouched(1) ) //because if two pointers are touching screen there is a chance that they are touching two sprites
{
xy.set(Gdx.input.getX(0), Gdx.input.getY(0), 0);
xy1.set(Gdx.input.getX(1), Gdx.input.getY(1), 0);

//checking if pointer 1 is touching sprite 1 and pointer 2 is touching sprite 2 OR VICE VERSA
if( (Spr.getBoundingRectangle().contains(xy.x, xy.y) && Spr1.getBoundingRectangle().contains(xy1.x, xy1.y))
||
(Spr.getBoundingRectangle().contains(xy1.x, xy1.y) && Spr1.getBoundingRectangle().contains(xy.x, xy.y))
)
{
score += 1;
}
}

或者只是创建一个函数,如果您传递给它的所有 Sprite 都被触摸,该函数将返回 true (实际上可以处理两个以上的 Sprite )

boolean allTouched(Array<Sprite> sprites)
{
int spritesCount = sprites.size;
int spritesTouched = 0;

for(int i = 0; i < MAX_POINTERS; i++)
{
if( Gdx.input.isTouched(i) )
{
for(Sprite sprite : sprites)
{
if( sprite.getBoundingRectangle().contains(Gdx.input.getX(i), Gdx.input.getY(i)) )
{
spritesTouched++;
sprites.removeValue(sprite, true); //to not doubling the same sprite
}
}
}
}

return spritesCount == spritesTouched ;
}

关于java - 如何检测两个 Sprite 是否同时被触摸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33053488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com