在Java游戏中实现拖放
我正在做一个棋盘游戏,它是一个8x8网格,有5个不同颜色的图像。只要对象在行或列中彼此相邻,它们就可以交换。如果该开关导致一行或一列中有3个或更多对象相同,则将删除这些对象。如果切换结果不匹配,则切换不会发生。当对象被移除时,电路板会折叠,这样放置在移除对象上方的对象会下落以取代它们的位置,而新对象会从顶部下落以填充空间 我想知道一个实现拖动操作和物体下落的好方法。我应该使用分层窗格吗 任何想法都会对我有帮助在Java游戏中实现拖放,java,swing,user-interface,drag-and-drop,jlayeredpane,Java,Swing,User Interface,Drag And Drop,Jlayeredpane,我正在做一个棋盘游戏,它是一个8x8网格,有5个不同颜色的图像。只要对象在行或列中彼此相邻,它们就可以交换。如果该开关导致一行或一列中有3个或更多对象相同,则将删除这些对象。如果切换结果不匹配,则切换不会发生。当对象被移除时,电路板会折叠,这样放置在移除对象上方的对象会下落以取代它们的位置,而新对象会从顶部下落以填充空间 我想知道一个实现拖动操作和物体下落的好方法。我应该使用分层窗格吗 任何想法都会对我有帮助 拖动操作: 创建一个hashmap,它报告一个颜色索引(比如8x8网格中总共5种不同的
我遇到的问题是当鼠标被按下、拖动和释放时。当鼠标释放或鼠标拖动时,我得到的对象就是被按下的对象。因此,我没有得到鼠标被释放的网格的行和列。我如何计算鼠标被释放的网格位置。我被困在这里,无法继续 如果只使用mousePressedListener和mouseReleasedListener而不使用mouseMotionListener,则可以分别获取源网格对象和目标网格对象。但我认为您的目标是使用mouseMotionListener。因此,我有两种变体: 1。按下网格对象后不久,您将获得网格对象(即,您将获得此网格对象的边界)。例如,您单击第二行和第二列中的网格对象,然后您可以获得网格对象的成员行=1和冒号=1。假设每个网格的宽度和高度均为10(像素)。然后你得到这个网格对象的边界:(10,10)和(20,20)。现在你想拖入另一个网格。因此你需要在这个网格对象的mousererelease()函数中添加一个条件:如果当前释放的鼠标位置超出这个网格对象的边界,那么他的一个邻居现在就是目标网格对象。例如,如果(e.getX()>20&&e.getY())>10&&e.getY()<20){//然后目标网格对象位于源网格对象的右侧,其边界为(20,10),(30,10),即行=1,列=2}。通过该行和列,您可以从2D数组中找到目标网格对象。
2.但如果我是你,我不会给每个网格对象分配一个MouseStener和mouseMotionListener,而只会给包含这64个网格对象的面板分配一个MouseStener和一个mouseMotionListener。每次单击、拖动然后释放,你都会得到一个合适的位置,你可以轻松地将其转换为一行和一列h行和列您可以从2D数组中找到合适的网格对象。就是这样。希望这就是您想要的。请参见此和。非常感谢。我能够使用点p=SwingUtilities.convertPoint(e.getComponent(),e.getPoint(),container)从父坐标中获取行和列;