在Java中实施“ Kings'Corners ”(美化多人游戏纸牌)。
我试图允许玩家将牌(图像)从他们的手拖到桌子上的其他地方。问题是玩家的手被“扇动”,因此卡片的图像会旋转并重叠。
以下是一只手的示例:
我考虑过将每张卡片设为JPanel
,但问题是我必须将卡片在矩形 JPanel
内旋转,因为它们自己不能旋转。理想情况下,我想避免使用mouse-x,y公式来确定选择哪张卡。
使用事件驱动的方法,我如何确定从手中选择哪张卡?
答案 0 :(得分:5)
AWT(和Swing)组件通常是矩形的(与轴对齐)。
但事实并非如此 - 虽然真实边界必须是矩形,但组件使用的实际区域可能更小。 Component支持contains(Point)
方法,只要问题出现在一个点属于哪个组件(例如鼠标点击),它就会被事件调度机制调用。 (不同组件的重叠将由父容器内的z顺序处理。)
您可以使用仿射变换矩形作为形状,基于Shape.contains()
方法实现此方法。每个旋转的组件都会知道它自己的形状(或者从它的AffineTransform中动态生成它,同样也可以用于绘制它自己)。
有一个自定义LayoutManager来安排你的卡片。 (不要使用CardLayout,尽管名称。)
我不确定我是否会遵循为每张卡片设置单独组件的方式,但你肯定需要一些代表旋转矩形的对象。