0

libgdx を使用して touchDragged リスナーを実装することに固執しています。

これが私のコードです。ユーザーが画像に触れて指を動かしたときに画像をドラッグする方法を誰かが提案できますか?

私はステージとアクターを使用しており、アクターで touchDragged イベントをキャッチしたいと考えています。

ありがとう。

public void create () {
    Texture.setEnforcePotImages(false);

    stage = new Stage();
    Gdx.input.setInputProcessor(stage);
    // create a SpriteBatch with which to render the sprite
    batch = new SpriteBatch();

    // load the sprite's texture. note: usually you have more than
    // one sprite in a texture, see {@see TextureAtlas} and {@see TextureRegion}.
    texture = new Texture(Gdx.files.internal("ball3.png"));
    Skin skin = new Skin();
    skin.add("default", new Label.LabelStyle(new BitmapFont(), Color.WHITE));
    skin.add("ball", texture);
    Image sourceImage = new Image(skin, "ball");
    sourceImage.setBounds(50, 125, 100, 100);
    stage.addActor(sourceImage);

    // create an {@link OrthographicCamera} which is used to transform
    // touch coordinates to world coordinates.
    camera = new OrthographicCamera();

    // we want the camera to setup a viewport with pixels as units, with the
    // y-axis pointing upwards. The origin will be in the lower left corner
    // of the screen.
    camera.setToOrtho(false);
}

public void render () {
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    stage.act(Gdx.graphics.getDeltaTime());
    stage.draw();
    Table.drawDebug(stage);



    // if a finger is down, set the sprite's x/y coordinate.
    if (Gdx.input.isTouched()) {
        // the unproject method takes a Vector3 in window coordinates (origin in
        // upper left corner, y-axis pointing down) and transforms it to world
        // coordinates.
        camera.unproject(spritePosition.set(Gdx.input.getX(), Gdx.input.getY(), 0));
    }
}
4

2 に答える 2

2

手順は次のとおりです。

  1. 指が移動したいオブジェクトに触れているかどうかを確認する必要があります。指の位置を取得するための便利な方法を次に示します。

    Gdx.input.getX();
    Gdx.input.getY();
    
  2. タッチ時に指が動いているかどうかを追跡するには、変数を使用する必要があります。

  3. 変数がtrueの場合、オブジェクトの位置を指の位置​​に変更します。

  4. 指が画面に触れなくなったら、変数を無効にします。

于 2013-05-21T05:02:02.183 に答える
1

InputProcessor を使用することをお勧めします。

public class MyInputProcessor implements InputProcessor{
    @Override
    public boolean keyDown(int keycode){
        return false;
    }
    @Override
    public boolean keyUp(int keycode){
        return false;
    }
    @Override
    public boolean touchDown(int screenX, int screenY, int pointer, int button){
        return false;
    }
    @Override
    public boolean touchUp(int screenX, int screenY, int pointer, int button){
        return false;
    }
    @Override 
    public boolean keyTyped(char character){
           return false;
    }
    @Override 
    public boolean touchDragged(int screenX, int screenY, int pointer){
        return false;
    }
    @Override 
    public boolean mouseMoved(int screenX, int screenY){
        return false;
    }
    @Override 
            public boolean scrolled(int amount) {
                    return false;
            }   
}

それをフィールドにします:

MyInputProcessor inputProcessor;

そして onCreate() で:

inputProcessor = new MyInputProcessor();
Gdx.input.setInputProcessor(inputProcessor);

そうすれば、コードを touchDragged コールバックに実装するだけです。

于 2013-05-22T04:18:01.890 に答える