想要实现很炫的棋牌类游戏的效果,一定要用很好的开发工具。
DELPHIX
自然是很不错的选择,但是使用起来比较麻烦。而使用
Asphyre
来开发则会方便很多
下面我们来探讨一下如何使用
Asphyre3.10
开发棋牌类游戏的客户端、以及如何实现粒子效果的问题。
1
:使用
Asphyre
开发游戏。
安装
Asphyre
。
Asphyre3.10
可以安装在
DELPHI7
下。和其它的第三方控件一样,安装完成后可以在组件栏里显示出
安装好
Asphyre
后,我们就可以利用它来开发游戏了。
首先我们创建一个项目,并在窗体上放上
Asphyre
组件
TAsphyreDevice
(
MyDevice
)、
AsphyreTimer
(
MyTimer
)、
TAsphyreCanvas
(
MyCanvas
)、
TAsphyreImages
(
MyImages
)、
TASDb
(
MyASDB
)。
然后我们设置组件
MyASDB
的属性。我在这里设置成
My.asdb
。文件
My.asdb
是一个资源文件,它包含了所有游戏中使用到的图片。这个资源包可以使用
Asphyre
自带的工具
AsphyreManager
来编辑。具体的编辑方法我后面会讲到。
设置好
MyASDB
的属性后我们就可以开始编程了。
在
Form
的
Create
中写入初始化代码:
if (not MyDevice.Initialize()) then
begin
Close();
Exit;
end;
在
MyDevice
的
OnInitialize
事件中写入代码:
Success:=MyImages.LoadFromASDb(MyASDB);
MyTimer.Enabled:= Success;
这两行代码的意思是将资源文件加载进
MyImages
中,并启动组件
MyTimer
。
在
MyTimer
的事件
OnTimer
中写入绘制背景代码
MyDevice.Render(0, True);
MyDevice.Flip();
在组件
MyDevice
的
OnRender
事件中开始绘制游戏界面中的各项信息。
MyCanvas.Draw(MyImages.Image['Gameback.image'], 0, 0, 0, fxBlend);
Draw
函数说明:
MyImages.Image['Gameback.image']
是需要绘制的图片名称。此名称必须和
ASDB
文件中的文件名称一致。
后面两个
0
,
0
指的是绘制的实际坐标。
对于第
3
个
0
说明我们使用
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;
然后在在组件
MyDevice
的
OnRender
事件中绘制相关的最大化状态图
MyCanvas.Draw(MyImages.Image['Max.image'], 0, 0, MaxButStatus, fxBlend);
Asphyre
是不停的在使用
MyCanvas.Draw
来刷新窗体的。所以如果我们将
Label
组件放在窗体上是不会看到的。但是像
Button
、
Image
、
ListView
这类组件是不会被
Asphyre
覆盖的。所以我们在开发游戏的时候可以尽可能的使用
Asphyre
和组件结合的办法。
接下来我们探讨一下
AsphyreManager
的使用方法,以及函数
MyCanvas.Draw
中的倒数第二个参数的用法。
以下是
AsphyreManager
的运行界面。
点击
选择需要加载的资源图片。
一般我们会将最大化按钮的几种状态做在一张图上。在
Pattern Size
中输入每一张图的大小。
并点击
ADD
。
那如何在游戏中调用图片中的相应状态呢?
调用相应的状态就是靠着
MyCanvas.Draw
函数的倒数第二个状态来确定的。第一个状态图为
0
,依次类推。
2
:在游戏中实现粒子效果。
有的时候我们会看到有些游戏会在胜利的时候放出礼花的效果。这些都是使用了粒子效果来实现的,以下是我使用粒子实现的一个效果。
要实现粒子效果首先需要加入粒子效果的单元文件:
XParticles_Unit
,
Xparticles
,
SmoothColorUnit
定义一个粒子对象结构:
//
显示开始特效
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)
:在
MyDevice
的
OnRender
事件中加入
m_Bomb.PMgr.Render;
(4)
:
在
MyTimer
的
On
Process
事件中加入
m_Bomb.PMgr.Update(Delta);
这样粒子效果就已经实现了,当需要显示粒子的时候调用:
m_Bomb.PSys:= m_Bomb.PMgr.SpawnPS(m_Bomb.PSS, MyImages.Image['bomb.image'],460,300);
就可以了。
通过以上
3
篇文章,我们大致的讨论了一下编写棋牌类游戏所需要的基础知识。从下一篇开始,将讨论棋牌类游戏的设计部分。一个好的游戏框架设计会对以后的开发和扩展带来很大的好处。