我正在尝试为游戏制作一个TCard组件.我应该从哪个班级派生出来?
这是一个像MTG或yu gi哦的纸牌游戏.该卡应具有空白图像,并且在创建时将加载前视图或后视图.
如果它加载前视图,则必须有一些标签(对于power/cost/def/text等属性).卡必须是可点击的.
type
TCard = class(zzzzzzzzz)
private
Run Code Online (Sandbox Code Playgroud)
现在一旦完成,我是否必须向构造函数/析构函数添加任何内容?目前我有:
constructor TCard.Create(AOwner: Tcomponent);
begin
inherited Create(AOwner);
end;
{******************************************************************************}
{ Free any resources allocated to component }
destructor TCard.Destroy;
begin
inherited Destroy;
end;
Run Code Online (Sandbox Code Playgroud)
另外我认为我添加了onclick部分,但不确定.在我发表的出版物中
{Inherited properties}
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnClick;
property OnDblClick;
Run Code Online (Sandbox Code Playgroud)
等等...
这取决于你想做什么,但通常有两个祖先用于可见控件:
TGraphicControl:这是TControl的后代,为您实现Canvas.您可以覆盖Paint方法以开始绘制.像这样的控件支持鼠标交互,但无法获得键盘焦点.
TCustomControl:这是TWinControl的后代.它还实现了Canvas,允许您覆盖Paint方法以绘制任何内容.因为它来自TWinControl,它实际上有一个句柄,可以获得键盘焦点和处理键盘消息.
另一个好的候选人是TPanel(或者更确切地说是TCustomPanel).它继承自TCustomControl,因此它具有相同的图形属性,但它还包含绘制边框和对齐子控件的功能.不过,我怀疑你是否需要这个.
当然你可以直接从TControl或TWinControl派生,但是你必须自己处理这些东西.
请注意,最好将实际的纸牌游戏逻辑放在一个单独的类中,并且只为绘图创建可视控件.如果您这样做,您仍然可以选择是否要为每张卡片分别设置控件,或者您可以选择在单个控件上甚至直接在表单上绘制整个纸牌游戏.我怀疑像Free Cell和Solitaire这样的Windows牌游戏是否拥有50多个图形控件.