奇怪的行为与touchDragged
我有一个简单的问题 - 我试图阻止拖动演员,但我看到奇怪的效果 - 当我试图拖动演员开始闪烁并随机更改位置。这里是一个简短的视频:https://youtu.be/KpGujQ7KHc0奇怪的行为与touchDragged
演员很简单:
public class Item extends Actor {
private String id;
private TextureRegion texture;
public Item() {
this.id = "passport";
texture = PicturesData.getPicture(getId());
setSize(texture.getRegionWidth(), texture.getRegionHeight());
addListener(new DragListener() {
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
return true;
}
@Override
public void touchDragged(InputEvent event, float x, float y, int pointer) {
Log.add("Dragged: " + x + ", " + y);
setPosition(x, y);
}
});
}
public String getId() {
return id;
}
@Override
public void draw(Batch batch, float parentAlpha) {
batch.draw(texture, getX(), getY());
}
}
屏幕是基本太:
public class GameScreen implements Screen {
private Stage stage;
public GameScreen() {
stage = new Stage(new StretchViewport(800, 600));
Gdx.input.setInputProcessor(stage);
Item item = new Item();
stage.addActor(item);
}
@Override
public void show() {
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
stage.act(delta);
stage.draw();
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void hide() {
}
@Override
public void dispose() {
}
}
我不知道为什么它的发生,你能帮帮我吗?
Pasha,您的DragListener没有任何问题。使用这个项目(起始位置硬编码):
public class Item extends Image {
private String id;
public Item(String id) {
super(PicturesData.getPicture(getId());
this.id = id;
setPosition(50, 50);
addListener(new DragListener() {
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
return true;
}
@Override
public void touchDragged(InputEvent event, float x, float y, int pointer) {
moveBy(x - getWidth()/2, y - getHeight()/2);
}
});
}
public String getId() {
return id;
}
}
同样的错误对我来说。你使用什么样的libgdx版本?可以吗?我的版本是1.9。 3,但我也试过1.9.1 ...也许我应该在libgdx的github中报告它... – Pasha
立即尝试代码:-) – WonderfulWorld
是的,它的工作原理!他们应该在javadoc中写入'touchDragged'中的'X'和'Y'不是新的位置,而是与前一个位置的delta!非常感谢你! – Pasha
我认为你的DragListener
不能正常工作的原因是因为你已经覆盖了touchDown
函数,这是侦听器正常工作所必需的。只需将您的代码更改为:
addListener(new DragListener() {
@Override
public void drag(InputEvent event, float x, float y, int pointer) {
Log.add("Dragged: " + x + ", " + y);
setPosition(x, y);
}
});
还有其它地方在你的代码中这个演员的位置发生变化? –
不,我用屏幕代码更新了我的帖子。这也是非常基本的。 – Pasha