3

我正在尝试为游戏制作 TCard 组件。我应该从哪个类派生它?

这适用于像 MTG 或 yu gi oh 这样的纸牌游戏。卡片应该有一个空白图像,创建后它将加载正面或背面视图。

如果它加载前视图,那么它必须有一些标签(对于像 power/cost/def/text 这样的属性)。卡片必须是可点击的。

 type
   TCard = class(zzzzzzzzz)
   private

现在一旦完成,我是否必须向构造函数/析构函数添加任何内容?目前我有:

constructor TCard.Create(AOwner: Tcomponent);
begin
  inherited Create(AOwner);
end;

{******************************************************************************}
{ Free any resources allocated to component                                    }
destructor TCard.Destroy;
begin
  inherited Destroy;
end;

另外我认为我添加了 onclick 部分,但不确定。在已发表的区域中,我有

 {Inherited properties}

 property OnMouseDown;
 property OnMouseMove;
 property OnMouseUp;
 property OnClick;
 property OnDblClick;

ETC...

4

1 回答 1

6

这取决于您想要做什么,但通常有两个可见控件的祖先:

  • TGraphicControl:这是为您实现 Canvas 的 TControl 的后代。您可以重写 Paint 方法来开始绘图。像这样的控件支持鼠标交互,但不能获得键盘焦点。

  • TCustomControl:这是 TWinControl 的后代。它还实现了一个 Canvas 并允许您覆盖 Paint 方法来绘制任何内容。因为它是从 TWinControl 继承而来的,所以它实际上有一个句柄,可以获取键盘焦点并处理键盘消息。

另一个不错的候选者是 TPanel(或者更确切地说是 TCustomPanel)。它继承自 TCustomControl,因此具有相同的图形属性,但还包含绘制边框和对齐子控件的功能。不过,我怀疑你是否需要这个。

当然,您可以直接从 TControl 或 TWinControl 派生,但是您必须自己处理其中的一些内容。

请注意,最好将实际的纸牌游戏逻辑放在一个单独的类中,并且只创建用于绘图的可视控件。如果您这样做,您仍然可以选择是否要为每张卡片设置单独的控件,或者您可以选择在单个控件上绘制整个纸牌游戏,甚至直接在表单上绘制。我怀疑像 Free Cell 和 Solitaire 这样的 Windows 纸牌游戏是否有超过 50 个图形控件。

于 2013-09-27T06:21:43.337 回答