用Java实现“国王角落”(多人接龙)。
我正在尝试允许玩家将手中的一张卡牌(图片)拖到桌子上的其他地方。但问题是玩家的手牌是“扇形”的,因此卡牌的图像被旋转并且重叠在一起。
以下是手牌的示例:
我考虑将每张卡牌作为JPanel
,但问题是我必须在其矩形的 JPanel
中旋转卡牌,因为它们本身无法旋转。理想情况下,我想避免使用鼠标x、y公式来确定选择哪张卡牌。
使用基于事件的方法,如何确定从手中选择哪张卡牌?
用Java实现“国王角落”(多人接龙)。
我正在尝试允许玩家将手中的一张卡牌(图片)拖到桌子上的其他地方。但问题是玩家的手牌是“扇形”的,因此卡牌的图像被旋转并且重叠在一起。
以下是手牌的示例:
我考虑将每张卡牌作为JPanel
,但问题是我必须在其矩形的 JPanel
中旋转卡牌,因为它们本身无法旋转。理想情况下,我想避免使用鼠标x、y公式来确定选择哪张卡牌。
使用基于事件的方法,如何确定从手中选择哪张卡牌?
AWT(和Swing)组件通常是矩形的(沿轴对齐)。
但这不一定是必须的 - 虽然实际边界必须是矩形的,但组件实际使用的区域可以更小。组件支持一个contains(Point)
方法,每当事件分派机制需要确定一个点属于哪个组件时(例如,对于鼠标单击),该方法将被调用。(不同组件之间的重叠将由父容器内部的z顺序处理。)
您可以基于Shape.contains()
方法来实现此方法,使用仿射变换的矩形作为您的形状。您旋转的每个组件都将知道自己的形状(或根据其AffineTransform即时生成其形状,与用于绘制自身的AffineTransform相同)。
还需要一个自定义的LayoutManager来安排您的卡片。(不要使用CardLayout,尽管名字相似。)
我不确定是否要按照每张卡片分别创建单独的组件,但您肯定需要一些表示旋转矩形的对象。