按下按钮前的设置位置 Libgdx
Setting position before button is pressed Libgdx
在我的 create() 方法中,我创建了一个 table 并插入了一些按钮,如下图所示。
http://www2.pic-upload.de/thumb/29190899/Unbenannt.png
每次用户按下按钮时,一个新的可拖动纹理应该出现在他的 finger/button 位置下方。
我尝试了以下方法:
sourceImage.addListener(controller);
testbutton.get(2).addListener(new ClickListener() {
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
sourceImage.setVisible(true);
sourceImage.setPosition(vec.x, vec.y);
return super.touchDown(event, x, y, pointer, button);
}
});
效果很好,但我想让用户在手指上获得纹理,而不必再次按下它来拖动它。
所以我尝试在开始触摸之前将图像放置到按钮上。
问题是,我无法获取 table 按钮的位置,因为 table 将在应用程序启动后呈现,而不是在 create() 中,请纠正我,如果我错了。
当我尝试在我的 create()
中获取实际的 table 位置时,它返回 0,0
我在论坛找到了解决方法:
Getting Stage coordinates of Actor in Table in libGDX
public static Vector2 getStageLocation(Actor actor) {
return actor.localToStageCoordinates(new Vector2(0, 0));
}
在我的 render()
vec = getStageLocation(testbutton.get(2));
它给了我 table 中按钮的正确位置,但我不知道在按下按钮之前我必须在何时何地设置纹理的位置?
您应该添加一个输入处理程序:
Gdx.input.setInputProcessor( new InputHandler());
然后在你的新 class
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
return true;
}
@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
return false;
}
@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
rendrerWhatever.drawTextures(screenX, screenY);
return false;
}
每次按住点击(触摸)的位置发生变化时都会调用 touchDragged 函数,您可以使用它的 screenX 和 screenY 为渲染纹理的位置提供坐标。
您是正确的,因为您需要使用 localToStageCoordinates
方法来获取演员在 table 中的舞台位置,并且此方法不会产生所需的结果,直到在 之后,stage/table 至少渲染了一次,即设置了table 元素的坐标时。
一种可能的方法是在添加所有 table 元素之后,在 create
方法中提前渲染屏幕一次。您可以调用 render(0)
(如果您要扩展 Game
或 Screen
类),或者调用包含 [=25] 的阶段的 draw
方法=].在那之后,localToStageCoordinates
应该会为您提供所需的值,您可以继续执行 create
方法任务。
在我的 create() 方法中,我创建了一个 table 并插入了一些按钮,如下图所示。
http://www2.pic-upload.de/thumb/29190899/Unbenannt.png
每次用户按下按钮时,一个新的可拖动纹理应该出现在他的 finger/button 位置下方。
我尝试了以下方法:
sourceImage.addListener(controller);
testbutton.get(2).addListener(new ClickListener() {
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
sourceImage.setVisible(true);
sourceImage.setPosition(vec.x, vec.y);
return super.touchDown(event, x, y, pointer, button);
}
});
效果很好,但我想让用户在手指上获得纹理,而不必再次按下它来拖动它。
所以我尝试在开始触摸之前将图像放置到按钮上。
问题是,我无法获取 table 按钮的位置,因为 table 将在应用程序启动后呈现,而不是在 create() 中,请纠正我,如果我错了。
当我尝试在我的 create()
中获取实际的 table 位置时,它返回 0,0我在论坛找到了解决方法: Getting Stage coordinates of Actor in Table in libGDX
public static Vector2 getStageLocation(Actor actor) {
return actor.localToStageCoordinates(new Vector2(0, 0));
}
在我的 render()
vec = getStageLocation(testbutton.get(2));
它给了我 table 中按钮的正确位置,但我不知道在按下按钮之前我必须在何时何地设置纹理的位置?
您应该添加一个输入处理程序:
Gdx.input.setInputProcessor( new InputHandler());
然后在你的新 class
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
return true;
}
@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
return false;
}
@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
rendrerWhatever.drawTextures(screenX, screenY);
return false;
}
每次按住点击(触摸)的位置发生变化时都会调用 touchDragged 函数,您可以使用它的 screenX 和 screenY 为渲染纹理的位置提供坐标。
您是正确的,因为您需要使用 localToStageCoordinates
方法来获取演员在 table 中的舞台位置,并且此方法不会产生所需的结果,直到在 之后,stage/table 至少渲染了一次,即设置了table 元素的坐标时。
一种可能的方法是在添加所有 table 元素之后,在 create
方法中提前渲染屏幕一次。您可以调用 render(0)
(如果您要扩展 Game
或 Screen
类),或者调用包含 [=25] 的阶段的 draw
方法=].在那之后,localToStageCoordinates
应该会为您提供所需的值,您可以继续执行 create
方法任务。