使用Delphi编写棋牌类游戏 -- 基础篇(3)

本文介绍使用Asphyre 3.10开发棋牌游戏的方法,包括客户端开发、粒子效果实现及AsphyreManager使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想要实现很炫的棋牌类游戏的效果,一定要用很好的开发工具。DELPHIX自然是很不错的选择,但是使用起来比较麻烦。而使用Asphyre来开发则会方便很多<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

下面我们来探讨一下如何使用Asphyre3.10开发棋牌类游戏的客户端、以及如何实现粒子效果的问题。

1:使用Asphyre开发游戏。

安装Asphyre

Asphyre3.10可以安装在DELPHI7下。和其它的第三方控件一样,安装完成后可以在组件栏里显示出

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

安装好Asphyre后,我们就可以利用它来开发游戏了。

首先我们创建一个项目,并在窗体上放上Asphyre组件TAsphyreDeviceMyDevice)、AsphyreTimerMyTimer)、TAsphyreCanvasMyCanvas)、TAsphyreImagesMyImages)、TASDbMyASDB)。

然后我们设置组件MyASDB的属性。我在这里设置成My.asdb。文件My.asdb是一个资源文件,它包含了所有游戏中使用到的图片。这个资源包可以使用Asphyre自带的工具AsphyreManager来编辑。具体的编辑方法我后面会讲到。

设置好MyASDB的属性后我们就可以开始编程了。

 

FormCreate中写入初始化代码:

  if (not MyDevice.Initialize()) then
  begin
   Close();
   Exit;
  end;

MyDeviceOnInitialize事件中写入代码:

 Success:=MyImages.LoadFromASDb(MyASDB);
 MyTimer.Enabled:= Success;

这两行代码的意思是将资源文件加载进MyImages中,并启动组件MyTimer

MyTimer的事件OnTimer中写入绘制背景代码

MyDevice.Render(0, True);

MyDevice.Flip();

在组件MyDeviceOnRender事件中开始绘制游戏界面中的各项信息。

MyCanvas.Draw(MyImages.Image['Gameback.image'], 0, 0, 0, fxBlend);

Draw函数说明:

MyImages.Image['Gameback.image']是需要绘制的图片名称。此名称必须和ASDB文件中的文件名称一致。

后面两个00指的是绘制的实际坐标。

对于第30说明我们使用Gameback.image图片中的第几个图片,我会在后面结合AsphyreManager的使用来说明。

通过以上的代码我们可以将一个背景图绘制在窗体上。

那我们应该如何绘制一个按钮呢?

使用Asphyre来绘制一个按钮是一件比较麻烦的事情。

首先我们需要定义这个按钮的绘制区域,例如:

//最大化区域

MaxRect:TRect=(Left:722;Top:2;Right:756;Bottom:24);

然后定义一个变量来记录显示按钮的状态。

MaxButStatus:Integer;   //最大化按钮状态

其次就是我们对用户点击区域的处理了。

在界面的OnMouseDown事件中判断用户是否按下了最大化区域。

IF 按下的是最大化按钮区域 THEN

BEGIN

  MaxButStatus:=2;

END;

在窗体的OnMouseUp事件中判断用户是否放开了最大化按钮区域

IF 鼠标抬起的是最大化按钮区域 THEN

BEGIN

  MaxButStatus:=0;

END;

在窗体的OnMouseMove事件中判断用户是否用鼠标划过最大化按钮区域

IF 鼠标划过的是最大化按钮区域 THEN

BEGIN

  MaxButStatus:=1;

END;

 

然后在在组件MyDeviceOnRender事件中绘制相关的最大化状态图

MyCanvas.Draw(MyImages.Image['Max.image'], 0, 0, MaxButStatus, fxBlend);

 

Asphyre是不停的在使用MyCanvas.Draw来刷新窗体的。所以如果我们将Label组件放在窗体上是不会看到的。但是像ButtonImageListView这类组件是不会被Asphyre覆盖的。所以我们在开发游戏的时候可以尽可能的使用Asphyre和组件结合的办法。

 

接下来我们探讨一下AsphyreManager的使用方法,以及函数MyCanvas.Draw中的倒数第二个参数的用法。

以下是AsphyreManager的运行界面。

 

点击选择需要加载的资源图片。

 

一般我们会将最大化按钮的几种状态做在一张图上。在Pattern Size中输入每一张图的大小。

并点击ADD

那如何在游戏中调用图片中的相应状态呢?

调用相应的状态就是靠着MyCanvas.Draw函数的倒数第二个状态来确定的。第一个状态图为0,依次类推。

2:在游戏中实现粒子效果。

有的时候我们会看到有些游戏会在胜利的时候放出礼花的效果。这些都是使用了粒子效果来实现的,以下是我使用粒子实现的一个效果。

 

要实现粒子效果首先需要加入粒子效果的单元文件:XParticles_UnitXparticlesSmoothColorUnit

 

定义一个粒子对象结构:
//显示开始特效
  RPropSetInfo = record
    PSS:  TXParticleSystemSettings;
    PMgr: TXParticleManager;
    PSys: TXParticleSystem;
  end;

 

(1):在主界面的public中定义粒子结构的对象m_Bomb:RPropSetInfo;并定义全局变量Delta: integer = 0;
(2):在主界面的OnCreate事件中加入对粒子对象的初始化代码:
m_Bomb.PMgr:=TXParticleManager.Create();
  m_Bomb.PMgr.Canvas:= MyDevice;
  if (not ASDb.ReadStream('BOMB.pss', Stream)) then
  begin
    ShowMessage('Unable to load ParticleSystem settings');
  end;
  Stream.Position:= 0;
  Stream.Read(m_Bomb.Pss, SizeOf(TXParticleSystemSettings));
  Stream.Free();
其中BOMB.pss是我们使用粒子效果编辑器编辑的文件。
(3):在MyDeviceOnRender事件中加入m_Bomb.PMgr.Render;

(4)MyTimerOn Process事件中加入m_Bomb.PMgr.Update(Delta);

这样粒子效果就已经实现了,当需要显示粒子的时候调用:

m_Bomb.PSys:= m_Bomb.PMgr.SpawnPS(m_Bomb.PSS, MyImages.Image['bomb.image'],460,300);

就可以了。

 

通过以上3篇文章,我们大致的讨论了一下编写棋牌类游戏所需要的基础知识。从下一篇开始,将讨论棋牌类游戏的设计部分。一个好的游戏框架设计会对以后的开发和扩展带来很大的好处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值