如何检测,如果一个精灵被感动了在Java中libGDX? [英] How do I detect if a sprite was touched in Java libGDX?

查看:92
本文介绍了如何检测,如果一个精灵被感动了在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆