2016-02-09 8 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

1

Если вы хотите использовать как ApplicationAdapter и InputProcessor в вас классе, вы должны использовать интерфейсы, а не абстрактно: Изменить вам класс подпись Prac1 implements ApplicationListener, InputProcessor

Проверьте здесь для полного учебника: http://www.gamefromscratch.com/post/2013/10/24/LibGDX-Tutorial-5-Handling-Input-Touch-and-gestures.aspx

2

Поскольку вам нужно получать события касания от изображения, вы можете сделать это с помощью Stage и Actors. Вам нужно создать сцену и Image с вашей текстурой, затем добавить Touchable атрибуты:

 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); 
Смежные вопросы