gpt4 book ai didi

java - 如何拖放 LibGDX Image actor

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:47:31 26 4
gpt4 key购买 nike

我有一个包含几个图像(Actor 子类)的 LibGDX 场景。我想将一个图像拖放到另一个图像上。我从位于 DragDropTest.java 的源代码开始.因为我基本上希望源成为负载,所以我尝试修改 payload.setDragActor 以使用源图像。这有点管用,我需要添加代码以将有效载荷 actor 放回舞台,但这不是我的问题。

我的问题是负载(当它是源参与者或单独的参与者时)并没有真正被拖拽。取而代之的是有效负载 actor 将自身定位在鼠标光标的右侧。我想放置有效载荷,而不是指向我想要放置有效载荷的位置。一点拖拽的感觉都没有,感觉有什么东西在跟着光标走。我在 Android 模拟器上看到的行为与在桌面版应用程序上看到的行为相同。

最佳答案

我为 com.badlogic.gdx.scenes.scene2d.utils.DragAndDrop 挖掘了 LibGDX 源代码并找到了答案。代码将有效载荷放置在光标的 X 方向上 +14,并在 Y 方向上放置 (-20 - payLoadActor.getHeight()),这就是我无法直观地拖动有效载荷的原因。有一个 setDragActorPosition可以用来纠正位置的方法。如果您始终希望拖动的有效载荷在光标下方居中,您可以这样做:

final DragAndDrop dragAndDrop = new DragAndDrop();
dragAndDrop.setDragActorPosition(-(sourceImage.getWidth()/2), sourceImage.getHeight()/2);

如果您希望拖动的负载保持其在光标/手指下的位置,而不是在调用 setDragActorPosition 时必须使用光标位置在dragStart方法。

final DragAndDrop dragAndDrop = new DragAndDrop();
dragAndDrop.addSource(new DragAndDrop.Source(sourceImage) {
public DragAndDrop.Payload dragStart (InputEvent event, float x, float y, int pointer) {
DragAndDrop.Payload payload = new DragAndDrop.Payload();
payload.setDragActor(sourceImage);
dragAndDrop.setDragActorPosition(-x, -y + sourceImage.getHeight());
return payload;
}
public void dragStop (InputEvent event, float x, float y, int pointer, Target target) {
sourceImage.setBounds(50, 125, sourceImage.getWidth(), sourceImage.getHeight());
if(target != null) {
sourceImage.setPosition(target.getActor().getX(), target.getActor().getY());
}
virtualStage.addActor(sourceImage);
}
});

关于java - 如何拖放 LibGDX Image actor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22062429/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com