如何检测,如果一个精灵被感动了在Java中libGDX? [英] How do I detect if a sprite was touched in Java libGDX?
问题描述
在过去的几天里,我一直在我的游戏( Apopalypse )移植到Android移动平台。我已经做了精灵的触摸检测谷歌快速搜索,但没有发现任何有用的。每个气球会弹出一次感动,我只需要检测,如果是感动。 这是我的球产卵code:
渲染(X,Y,宽度和高度被随机):
公共无效渲染(){
Y + = 2;
balloon.setX(X);
balloon.setY(Y);
balloon.setSize(宽度,高度);
batch.begin();
balloon.draw(批);
batch.end();
}
在产卵主要的游戏类:
addBalloon(新气球());
公共静态无效addBalloon(气球B){
balloons.add(B);
}
这是我做到了,但根据您所使用的场景和可触及的元素,可以有这样做的稍微更优化的方式
公共GameScreen实现了屏幕,InputProcessor
{
@覆盖
公共无效展()
{
Gdx.input.setInputProcessor(本);
}
@覆盖
公共布尔触地(INT screenX,诠释screenY,INT指针,INT按钮)
{
浮pointerX = InputTransform.getCursorToModelX(WINDOWWIDTH,screenX);
浮pointerY = InputTransform.getCursorToModelY(WINDOWHEIGHT,screenY);
的for(int i = 0; I< balloons.size();我++)
{
如果(balloons.get(I)。载(pointerX,pointerY))
{
balloons.get(我).setSelected(真正的);
}
}
返回true;
}
@覆盖
公共布尔触(INT screenX,诠释screenY,INT指针,INT按钮)
{
浮pointerX = InputTransform.getCursorToModelX(WINDOWWIDTH,screenX);
浮pointerY = InputTransform.getCursorToModelY(WINDOWHEIGHT,screenY);
的for(int i = 0; I< balloons.size();我++)
{
如果(balloons.get(ⅰ)。载(pointerX,pointerY)及&安培; balloons.get(ⅰ).getSelected())
{
balloons.get(ⅰ).execute();
}
balloons.get(ⅰ).setSelected(假);
}
返回true;
}
公共类InputTransform
{
私有静态诠释appWidth = 480;
私有静态诠释appHeight = 320;
公共静态浮动getCursorToModelX(INT screenX,INT cursorX)
{
返程(((浮点)cursorX)* appWidth)/((浮点)screenX);
}
公共静态浮动getCursorToModelY(INT screenY,INT粗略)
{
返程((浮动)(screenY - 走马))* appHeight /((浮点)screenY);
}
}
In the past few days I've been porting my game (Apopalypse) to the Android Mobile platform. I've did a quick search on Google of sprite touch detection but didn't find anything helpful. Each balloon will pop once touched and I just need to detect if it's touched. Here's my balloon spawning code:
Rendering (x, y, width, and height are randomized):
public void render() {
y += 2;
balloon.setX(x);
balloon.setY(y);
balloon.setSize(width, height);
batch.begin();
balloon.draw(batch);
batch.end();
}
Spawning in main game class:
addBalloon(new Balloon());
public static void addBalloon(Balloon b) {
balloons.add(b);
}
This is how I did it, but depending on the scene you are using and the elements that can be touched, there can be slightly more optimized ways of doing this:
public GameScreen implements Screen, InputProcessor
{
@Override
public void show()
{
Gdx.input.setInputProcessor(this);
}
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button)
{
float pointerX = InputTransform.getCursorToModelX(windowWidth, screenX);
float pointerY = InputTransform.getCursorToModelY(windowHeight, screenY);
for(int i = 0; i < balloons.size(); i++)
{
if(balloons.get(i).contains(pointerX, pointerY))
{
balloons.get(i).setSelected(true);
}
}
return true;
}
@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button)
{
float pointerX = InputTransform.getCursorToModelX(windowWidth, screenX);
float pointerY = InputTransform.getCursorToModelY(windowHeight, screenY);
for(int i = 0; i < balloons.size(); i++)
{
if(balloons.get(i).contains(pointerX, pointerY) && balloons.get(i).getSelected())
{
balloons.get(i).execute();
}
balloons.get(i).setSelected(false);
}
return true;
}
public class InputTransform
{
private static int appWidth = 480;
private static int appHeight = 320;
public static float getCursorToModelX(int screenX, int cursorX)
{
return (((float)cursorX) * appWidth) / ((float)screenX);
}
public static float getCursorToModelY(int screenY, int cursorY)
{
return ((float)(screenY - cursorY)) * appHeight / ((float)screenY) ;
}
}
这篇关于如何检测,如果一个精灵被感动了在Java中libGDX?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!