我坚持在这个阶段,如何将3个塔添加到StackPane以及如何仅使用没有Scene Builder的JavaFX代码移动窗格内的砖块(例如1-2-3)?我会很感激任何答案!
图片:
我的建议:
您创建了一个类"Tower",它扩展了类Pane并包含一个磁盘列表 . 该类有一个方法"accept",它返回布尔值取决于你是否可以放一个磁盘 .
创建塔类的3个实例 .
然后创建一个类"Disk",它扩展了类Rectangle . 创建8个不同宽度的实例,并将它们添加到第一个塔,即塔类列表 .
每个磁盘将使用Drag nodes like in a patience/Klondike card game中描述的mouselistener . 该机制与您的需求非常相似 .
在鼠标监听器的鼠标处理程序中,您可以检查磁盘是否位于塔顶,因此是否可以拖动它 .
在鼠标监听器的鼠标释放处理程序中,您只需检查磁盘是否与给定塔相交(请参阅boundsInParent和intersects) . 如果确实如此,并且accept方法返回true,则将其删除 . 如果accept方法返回false,则让它飞回原来的位置 .
当塔有所有磁盘时你就完成了 .
基本上就是这样 .
哦,不要使用StackPane,而是使用Pane . 而且你不需要图像 . 您显示的图片可以仅由矩形创建 .
1 回答
我的建议:
您创建了一个类"Tower",它扩展了类Pane并包含一个磁盘列表 . 该类有一个方法"accept",它返回布尔值取决于你是否可以放一个磁盘 .
创建塔类的3个实例 .
然后创建一个类"Disk",它扩展了类Rectangle . 创建8个不同宽度的实例,并将它们添加到第一个塔,即塔类列表 .
每个磁盘将使用Drag nodes like in a patience/Klondike card game中描述的mouselistener . 该机制与您的需求非常相似 .
在鼠标监听器的鼠标处理程序中,您可以检查磁盘是否位于塔顶,因此是否可以拖动它 .
在鼠标监听器的鼠标释放处理程序中,您只需检查磁盘是否与给定塔相交(请参阅boundsInParent和intersects) . 如果确实如此,并且accept方法返回true,则将其删除 . 如果accept方法返回false,则让它飞回原来的位置 .
当塔有所有磁盘时你就完成了 .
基本上就是这样 .
哦,不要使用StackPane,而是使用Pane . 而且你不需要图像 . 您显示的图片可以仅由矩形创建 .