2016-02-09 74 views
3

我是LibGdx新手,并试图让我的iceCream图像触摸。 我想知道如何设置输入过程(通过触摸屏幕)。 我需要另外上课吗?当我尝试将我的Prac1类的输入过程实现为 时,JAVA不允许我在不更改类摘要的情况下实现。具体而言,我喜欢每当用户触摸图像 时,它都会计算触摸的次数。这是我的代码,谢谢你的帮助。LibGdx,如何处理触摸事件?

import com.badlogic.gdx.ApplicationAdapter; 
import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.graphics.GL20; 
import com.badlogic.gdx.graphics.OrthographicCamera; 
import com.badlogic.gdx.graphics.Texture; 
import com.badlogic.gdx.graphics.g2d.SpriteBatch; 

public class Prac1 extends ApplicationAdapter { 
    int w,h,tw,th =0; 
    OrthographicCamera camera; 
    SpriteBatch batch; 
    Texture img; 

    @Override 
    public void create() { 
     w = Gdx.graphics.getWidth(); 
     h = Gdx.graphics.getHeight(); 
     camera = new OrthographicCamera(w, h); 
     camera.position.set(w/2, h/2, 0); 
     camera.update(); 
     batch = new SpriteBatch(); 
     img = new Texture(Gdx.files.internal("iceCream.png")); 
     tw = img.getWidth(); 
     th = img.getHeight(); 
    } 

    @Override 
    public void render() { 
     Gdx.gl.glClearColor(0, 0, 0, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     batch.begin(); 
     batch.draw(img, camera.position.x - (tw/2), camera.position.y - (th/2)); 
     batch.end(); 
    } 
} 

回答

5

您可以使用

InputProcessor
处理用户输入。 像这样: -

import com.badlogic.gdx.ApplicationAdapter; 
import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.InputAdapter; 
import com.badlogic.gdx.graphics.GL20; 
import com.badlogic.gdx.graphics.OrthographicCamera; 
import com.badlogic.gdx.graphics.Texture; 
import com.badlogic.gdx.graphics.g2d.Sprite; 
import com.badlogic.gdx.graphics.g2d.SpriteBatch; 

public class Prac1 extends ApplicationAdapter { 
    float w,h,tw,th =0; 
    OrthographicCamera camera; 
    SpriteBatch batch; 
    Sprite img; 

    @Override 
    public void create() { 
     w = Gdx.graphics.getWidth(); 
     h = Gdx.graphics.getHeight(); 
     camera = new OrthographicCamera(w, h); 
     camera.position.set(w/2, h/2, 0); 
     camera.update(); 
     batch = new SpriteBatch(); 
     img = new Sprite(new Texture(Gdx.files.internal("iceCream.png"))); 

     tw = img.getWidth(); 
     th = img.getHeight(); 
     img.setBounds(camera.position.x - (tw/2), camera.position.y - (th/2),tw,th); 
     Gdx.input.setInputProcessor(new InputAdapter(){ 

      @Override 
      public boolean touchDown(int screenX, int screenY, int pointer, int button) { 

       if(img.getBoundingRectangle().contains(screenX, screenY)) 
         System.out.println("Image Clicked"); 

       return true; 
      } 

     }); 
    } 

    @Override 
    public void render() { 
     Gdx.gl.glClearColor(0, 0, 0, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     batch.begin(); 
     img.draw(batch); 
     batch.end(); 
    } 
} 

替换你的代码这个代码,你可以很容易地理解这里发生了什么。 你也可以实现

GestureListener
来处理手势事件。

+1

哦,我想你的答案是正确的:) – IAMBEAST

2

由于您需要从图像中获取触摸事件,因此可以使用舞台和演员来完成。你需要创建一个舞台上,并与Image你的纹理,然后加入可触摸的属性:

 iceCreamImg.setTouchable(Touchable.enabled); 
     iceCreamImg.addListener(new InputListener() { 
     public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { 
      Gdx.app.debug(TAG, "touchDown()"); 
      // must return true for touchUp event to occur 
      return true; 
     } 
     public void touchUp (InputEvent event, float x, float y, int pointer, int button) { 
      Gdx.app.debug(TAG, "touchUp()"); 
     } 
    }); 

,并添加图片到舞台上。在渲染方法你应该增加:

stage.act(); 
stage.draw(); 

,还可以设置输入处理器为你的舞台与

Gdx.input.setInputProcessor(stage);