Java 如何拖放LibGDX图像参与者
我有一个LibGDX场景和几个图像(Actor子类)。我想把一张图片拖到另一张上面。我从位于的源代码开始。因为我基本上希望源代码是有效负载,所以我尝试修改Java 如何拖放LibGDX图像参与者,java,drag-and-drop,libgdx,Java,Drag And Drop,Libgdx,我有一个LibGDX场景和几个图像(Actor子类)。我想把一张图片拖到另一张上面。我从位于的源代码开始。因为我基本上希望源代码是有效负载,所以我尝试修改payload.setDragActor以使用源图像。这是一种工作方式,我需要添加代码以将负载参与者放回舞台,但这不是我的问题 我的问题是,负载(当它是源参与者或单独的参与者时)没有真正被拖动。相反,所发生的是负载参与者将自身稍微向下定位到鼠标光标的右侧。我想要放置有效载荷,而不是指向我想要放置有效载荷的位置。它一点也不想拖动,它感觉有东西在跟
payload.setDragActor
以使用源图像。这是一种工作方式,我需要添加代码以将负载参与者放回舞台,但这不是我的问题
我的问题是,负载(当它是源参与者或单独的参与者时)没有真正被拖动。相反,所发生的是负载参与者将自身稍微向下定位到鼠标光标的右侧。我想要放置有效载荷,而不是指向我想要放置有效载荷的位置。它一点也不想拖动,它感觉有东西在跟着光标。我在Android emulator上看到的行为与我在桌面版应用程序上看到的行为相同。您没有显示任何代码,因此很难知道您实际在做什么。根据您的描述,听起来您是在将有效负载放置在光标所在的位置,而不是在开始拖动后将其移动到与光标移动相同的偏移量 假设您使用的是ActorGestureListener,这就是我在应用程序中所做的
float touchX, touchY;
public void touchDown(InputEvent ev, float x, float y, int pointer, int button) {
touchX = x;
touchY = y;
...
}
public void pan(InputEvent ev, float x, float y, float dx, float dy) {
moveBy(x - touchX, y - touchY);
...
}
通过这种方式,你移动你的演员的量与鼠标光标移动的量相同,所以它就像指针“粘”在你接触演员的地方一样。另外,我相信libgdx中的事件会使您在光标在actor内部移动一点之前不会收到pan事件,因此在测试时要注意这一点(仅移动光标几个像素不会触发pan事件).我在LibGDX源代码中查找
com.badlogic.gdx.scenes.scene2d.utils.dragandrop
,找到了答案。代码将有效负载+14放置在光标的X方向上,将(-20-payLoadActor.getHeight())放置在Y方向上,这就是我无法直观地拖动有效负载的原因。有一种setDragActorPosition
方法可用于纠正位置。如果始终希望拖动的有效负载位于光标下方的中心,可以执行以下操作:
final DragAndDrop dragAndDrop = new DragAndDrop();
dragAndDrop.setDragActorPosition(-(sourceImage.getWidth()/2), sourceImage.getHeight()/2);
如果希望拖动的有效负载保持其在光标/手指下的位置,则在dragStart
方法中调用setDragActorPosition
时必须使用光标位置
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);
}
});
正如我所说,我使用的代码是我没有放置任何东西,
com.badlogic.gdx.scenes.scene2d.utils.DragAndDrop
应该根据我的理解为我处理这个问题,但位置是给演员的(有效载荷)当光标移动时,看起来很愚蠢,而且在视觉上与拖动不一致。我明白了为什么你错过了我链接到的源代码,我正在使用的源代码-有人编辑了我链接到类名的链接,使它很容易错过。我想有一点bug-减号在x参数上。它应该位于y参数上:“dragAndDrop.setDragActorPosition(sourceImage.getWidth()/2,-(sourceImage.getHeight()/2))”