01 FunCode C 入门

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

FunCode C语言实验教学指南入门篇
目录
入门 (3)
创建第一个项目 (3)
运行FunCode (3)
创建新项目 (4)
导入静态精灵 (6)
导入动画精灵 (7)
删除精灵 (9)
设计界面初步 (9)
运行游戏 (13)
项目改进 (14)
打开项目 (14)
安装目录及内容 ............................................................................. 错误!未定义书签。

给精灵起名称 (15)
设置精灵的速度 (17)
设置精灵的层次 (17)
精灵与世界边界的碰撞 (19)
精灵与精灵的碰撞 (20)
导入地图模板 (21)
编写第一个小程序 (22)
打开VC++工程 (22)
文件的管理 (22)
代码文件的组成 (24)
主函数 (25)
用代码让鱼游起来 (26)
6个事件函数 (28)
键盘的按下事件 (28)
键盘的弹起事件 (29)
鼠标的移动事件 (30)
鼠标的点击事件 (31)
精灵与世界边界碰撞事件 (32)
精灵与精灵碰撞事件 (33)
入门
创建第一个项目
运行FunCode
双击桌面FunCode快捷方式(如下图),打开FunCode。

FunCode会记录上一次打开项目的绝对路径,打开程序后,FunCode会根据该路径自动载入实验项目。

如果FunCode记录的绝对路径正好有FunCode实验项目,FunCode打开后的界面类似下图:
如果FunCode记录的绝对路径没有FunCode实验项目,FunCode打开后的界面类似下图:
创建新项目
根据打开后界面的不同,有两种方式创建新的FunCode项目。

对应第一种打开方式,点击软件的“项目”菜单,如果要创建C语言实验项目,点击“创建C语言工程”,如下图:
对应第二种打开方式,点击“创建”窗口,如下:
跳出一个窗口,选择项目相应的编程语言。

比如,我们要创建一个C语言的实验项目,选择如下:
点击确定,跳出如下窗口:(以下步骤,两种方式都相同)
“工程名”只能由字母和数字组成,且不能用数字开头(否则可能导致图片处理出现问题)。

我们给该项目取名为seafish。

“工程路径”是实验项目的文件夹位置,可任意设置。

开发工具支持VC6.0,2008和2010三个版本,根据需要选择。

点击“确定”,出现如下界面:
如果我们忘记项目的保存路径,或者需要复制工程文件或者整个工程时,点击“项目”面板中的“打开工程文件夹”,可以打开该项目所在的文件夹。

项目面板工程文件中的内容
导入静态精灵
创建FunCode项目后,我们首先需要给这个项目添加各种资源,用于游戏界面设计。

精灵是游戏中的一种术语,一切游戏资源都称为精灵,如图片、动画、特效、文字、声音等。

静态精灵即静态图片。

首先,点击软件右侧的“资源”面板,如下:
在“资源”面板下方是一排工具按钮,点击第一个按钮“添加一个新的图片资源”,如下:
点击按钮后,跳出一个“图片资源”窗口,该窗口展示了FunCode自带的图片资源,窗口左侧是显示图片的名称,右侧是图片预览。

用鼠标点击某个名称,右侧会出现图片的预览。

用上下方向键可方便选择不同的图片。

点击左侧第一个名称backgroundImage,如下图:
点击“添加到工程”按钮,图片就会被添加到工程中,出现资源面板的“静态精灵”框中。

如下:
一张图片被导入后,相应名称会在“图片资源”窗口中消失,避免被两次选中。

练习:
按上述操作,把名称为rocksfarImage和rocksnearImage的图片导入到工程中。

效果如下:
导入动画精灵
点击第二个按钮“添加一个新的动画”,可以从FunCode自带的动画资源库中寻找合适的动画导入到工程项目中。

如下图:
点击按钮后,跳出一个窗口,点击名称“seahorse2sheetImageMapAnimation”,如下图:
导入动画精灵的操作与导入静态精灵的操作相同。

导入的精灵会出现在“资源”面板的“动画精灵”框中,如下图(在软件中,下图的海马是活动的):
与此同时,构成该动画精灵一组图片也会出现在“资源”面板的“动画精灵”框中,如下图:
画红圈的1/4说明海马动画是由四张静态图片组成的。

在后面我们会进一步讲解静态图片和动画之间关系,以及如何利用静态图片制作动画。

在这个工程中,我们既可以使用海马的动画,也可以使用海马的图片。

练习:
将名为“angelfish1sheetImageMapAnimation”“angelfish2sheetImageMapAnimation”的动画添加到工程中,效果如下:
导入项目模板
因为每次添加精灵都十分的繁琐,所以FunCode提供了一种比较简单的方式来添加精灵,那就是导入模板,模板中不仅给出了我们在实验中所需要的精灵,而且还给精灵起好了名字,这就方便简单了我们的操作。

具体的方式如下:
首先打开软件,找到“项目”选项,如下图:
然后点击“导入地图模板”,就会弹出如下对话框,
选中你所需要的地图模板就可以了。

当然,你也可以制作自己的地图模板,将你想要添加的精灵添加进去之后,就可以点击“项目”,在“导入地图模板”的下边有一个“保存地图为模板”,点击这个就可以将自己做好的地图保存为模板了。

删除精灵
如果我们要删除某些导入的工程中的资源,操作方法如下:
鼠标左键点击“资源”面板中的某个精灵图标不放,然后拖曳到最后一个按钮“拖曳一个图片到此删除”,如下:
删除按钮
删除过程如下:
鼠标左键点击要删除的精灵图标,如下:
按住鼠标左键不放,拖动到删除按钮位置上,如下:
放开鼠标后,跳出一个图片按钮,如下:
点击“确定”,删除该精灵图片,相应资源从面板中消失。

练习:
导入一个静态精灵和一个动画精灵到FunCode工程中,然后将它们删除。

设计界面初步
在软件中间是“场景预览”区域(以下简称为“场景区域”),要在工程中实际使用的精灵必须拖曳到该区域,如下图.。

其中,红色箭头所指的暗绿色方框所包围的区域为游戏运行时的可见区域(以下简称为“可见区域”)。

场景区域中方框以外区域在游戏运行时不可见,称为“不可见区域”。

只有拖放到场景区域中的精灵,代码才能进行控制。

用鼠标左键点击“资源”面板中的某个精灵图标不放,然后拖曳到场景区域。

操作如下:
Step 1: 鼠标左键点击某张精灵图标。

Step 2:按住鼠标左键不放,拖到场景区域
Step3:放开鼠标左键,精灵恢复实际大小。

Step 4:点击鼠标左键选中精灵不放,可以随意布置精灵的位置
Step 5:鼠标左键点击下图红圈标识的8个节点,拖动鼠标可以放到和缩小精灵图片。

如果同时按照shift键,则可以保持精灵图片的长宽比不变。

step6:改变精灵图片大小,使其刚好与游戏可见区域大小相等。

step 7:在设计过程中,我们可以通过鼠标上的滚动滑轮,放大或缩小游戏可见区域,从而方便界面设计。

缩小
放大
step8:当界面设计涉及到多张图片时,直接在场景区域点击图片,容易点击到其他图片,通过点击“精灵列表”中精灵的名称,也可以选中场景区域中的图片。

练习:
将静态精灵中的两张图片拖到场景区域中,并按照上述操作步骤,
布置成如下场景。

运行游戏
软件菜单栏下方有一排菜单栏,其中有一个按钮为“运行游戏”按钮,如下图:
点击该按钮,可运行该游戏。

运行时,会跳出一个游戏窗口。

如下图:其中Lesson是游戏窗口的名称,后面我们会讲到如何修改游戏窗口的名称。

练习:
将两个动画精灵,如右图,拖到场景区域中。

其中黄色的鱼放在可见区域,蓝色的与放在不可见区域,并适当调整鱼的大小,如下图。

运行程序,看看是什么效果。

项目改进
打开项目
如果我们要使用已经创建好的实验项目,对应也有两种方式:
第一种、当打开FunCode出现如下界面:
第二种、当打开FunCode出现如下界面:
点击菜单“文件”->“打开项目…”,如下图:
跳出文件窗口,寻找实验项目的文件夹。

当在文件窗口中打开一个实验项目的文件夹后,文件夹的内容如下图。

project.funProj 是工程文件,SourceCode目录包含实验项目的源代码,Bin目录包含游戏资源。

选择project
文件打开,FunCode就打开相应的实验项目。

练习:
关闭FunCode,然后重新打开,找到seafish项目重新载入。

给精灵起名称
通过设置精灵属性,我们可以实现更多的界面设计效果。

选中某个精灵,然后点击“编
辑”面板,可以设置精灵的属性。

一框中给精灵取名。

精灵名称只能用英文和数字,且不能用数字开头。

如下:
给精灵起名称有两个作用:
一、用代码操作精灵时,需要用到精灵名称。

这点我们在后续会详细讲述。

二、当场景区域中有多个精灵时,通过鼠标点击的方式选择精灵就不太方便。

当给精
灵起了名字后,该名字会出现在“精灵列表”面板中。

通过点击列表中相应的名
称,也就相应选择了场景区域里的精灵。

练习:
给蓝色的鱼取名为bluefish;
给对应的精灵取名为sea;
给对应的精灵取名为rocksback;
给对应的精灵取名为rocksfront。

设置精灵的速度
选择精灵yellowfish,打开“编辑”面板,展开“物理”框,其中“速度”是用来设置精灵x轴和y轴方向线性速度。

如下图:
这里,我们了解一下FunCode的坐标知识。

FunCode的可见区域的中心点位坐标原点(0, 0),X坐标从左到右逐渐变大,Y坐标从上到下逐渐变大。

角度按顺时针方向从0到360度。

如下图:
因此,如果我们希望yellowfish斜向下游动,应该给该精灵的x轴和y轴方向速度均设为正值。

设置如下图:
每次对场景区域中精灵进行修改,包括:删除精灵(选择该精灵,点击Delete键),修改精灵属性,改变精灵大小等,应该点击工具栏中的“保存”按钮,然后再运行程序。

练习:
选择bluefish,在“编辑”面板的“基本属性”框中的选中“水平翻转”,如右图。

看看bluefish会如何变化?
让bluefish以10的速度,从右向左水平游动。

设置精灵的层次
当精灵被拖放到场景区域中,精灵的基本属性中,有个“层”的属性,缺省被设置为0。

如右图:。

场景区域中有多张图片重叠时,先拖进场景区域的精灵放置在后面,后拖进场景区域的精灵放置在前面。

如果我们想改变精灵的前后顺序,可以使用基本属性中后置/前置按钮。

如右图:。

将yellowfish和bluefish相互重叠,如下方左图。

选择bluefish,然后点击“后置”,效果如下方右图。

更灵活的办法不同的精灵设置为不同的层。

层数越大,精灵越显示在后方。

比如,将yellowfish的层设为0,bluefish的层设为5,将两个精灵重合在一起,yellowfish显示在前方,bluefish显示在后方。

如下图:
练习:
要实现下方的效果,图层设置从后往前依次应该是sea,rocksback,bluefish,rocksfront 和yellowfish。

设置完毕后运行程序,查看动画效果。

精灵与世界边界的碰撞
FunCode提供了六个事件,用来实现复杂的游戏效果。

精灵与世界边界的碰撞就是其中之一。

选择bluefish,然后将鼠标停留在bluefish上,这时在bluefish上方会出现一排按钮,如下图:
其中,最后一个按钮是“更改此精灵的世界边界设置”,点击该按钮,场景区域发生变化,如下图:
深色被方框框中的区域就是bluefish的世界,带有8个矩形小节点的方框就是世界边界。

任何精灵的初始世界边界的正好与屏幕重合。

用鼠标拖动那8个矩形小节点,可以改变精灵的世界边界。

给精灵设置好合适的世界边界后,按ESC键,场景区域又恢复原状,精灵的新的世界边界就保存下来。

给精灵设置了世界边界以后,当精灵活动到它的世界边界时,FunCode就会发出一个“精灵与世界边界碰撞”的事件。

注意:当精灵的世界边界设置好以后,它是一个固定区域,并不会随精灵的活动而移动。

另外,精灵的世界边界必须比精灵图片本身大。

不过,精灵单有世界边界还不能起任何作用,我们还需要设置事件发生后的处理模式。

仍然选择bluefish,展开“编辑”模板中的“世界边界限制”框,如下图:
限制模式的选项有六个,意义如下:
OFF ——世界边界关闭。

世界边界不起任何作用。

NULL ——当精灵碰到世界边界时,精灵的响应由用户的程序决定。

我们在后续编程时,主要使用这个选项。

CLAMP ——当精灵碰到世界边界时,精灵逐步停止下来。

BOUNCE ——当精灵碰到世界边界时,精灵以相同速度按相反方向游动
STICKY ——当精灵碰到世界边界时,精灵停在边界不动。

在一般情况下,认为与CLAMP选项的效果相同。

KILL ——当精灵碰到世界边界时,精灵被删除。

给bluefish选择STICKY选项,运行程序,看看游戏效果。

练习:
改变bluefish的世界边界大小,分别比屏幕小或者比屏幕大,看看游戏运行效果。

给yellowfish设置世界边界,然后选择不同限制模式,看看游戏运行效果。

精灵与精灵的碰撞
精灵与精灵的碰撞也是FunCode提供的六个事件之一。

比如:当两条鱼碰在一起,其中较小的一条鱼消失,从而实现大鱼吃小鱼的游戏效果。

这里就必须要用到精灵与精灵的碰撞这个事件。

FunCode中,当一个精灵具有“发出碰撞”的属性,另外一个精灵具有“接受碰撞”的属性,这两个精灵图片碰在一起时,就发出一个“精灵与精灵碰撞”事件。

选择yellowfish,打开“编辑”模板,展开“碰撞”框,把“发送碰撞”勾上,如右图:。

选择bluefish,同样操作,但是把“接受碰撞”选上。

说明:哪个是发
送方,哪个是接受方,并不重要。

只要其中一个是发送方,一个是接受方即可。

在以后的练习中,我们是通过程序代码来响应精灵与精灵碰撞事件,上面的处理就已经够了。

不过如果我们需要由FunCode来响应该事件,我们还需要将其中一个精灵设置为“发送物理碰撞”,另外一个精灵设置为“接受物理碰撞”。

该属性设置也在“碰撞”框中。

最后,我们要给精灵设置物理碰撞响应。

如下图:
物理碰撞反应的选项有六个,意义如下:
OFF ——关闭。

物理碰撞不起任何作用。

CLAMP ——当该精灵与其他精灵碰撞时,该精灵渐渐停止不动。

BOUNCE ——当该精灵与其他精灵碰撞时,该精灵以相同速度按相反方向游动
STICKY ——当该精灵与其他精灵碰撞时,该精灵停止不动。

在一般情况下,认为与CLAMP选项的效果相同。

KILL ——当该精灵与其他精灵碰撞时,该精灵被删除。

RIGID ——当该精灵与其他精灵碰撞时,该精灵被刚性反弹。

CUSTOM ——当该精灵与其他精灵碰撞时,该精灵按原来的。

把yellowfish的物理碰撞反应设置为KILL,bluefish的设为STICKY,运行程序观看结果。

练习:
因为物理碰撞的最终效果,取决于两方精灵反应的叠加。

随意设置两方精灵的碰撞反应,看看碰撞的最终效果。

导入地图模板
点击“项目”菜单中的“导入地图模板”,如下:
跳出一个对话框,点击其中一个名称,点击“导入到工程”按钮,可以直接将事先制作好的游戏地图(游戏界面)导入到新工程中。

使用该功能,可以最快速设计一个新游戏的界面。

如下:
我们制作的游戏地图,通过点击“项目”菜单中的“保存地图为模板”保存到软件当中,可供下次开发别的程序时,快速使用。

编写第一个小程序
打开VC++工程
FunCode支持VC++ 6.0,2008和2010三种版本编写C语言实验项目。

有两种方式可以打开实验项目对应的VC++工程。

操作步骤如下:
1)打开FunCode,并打开相应的实验项目。

这里,我们打开seafish项目。

2)点击“项目”面板中的“创建VC工程”按钮,如下图。

当我们创建FunCode项目时,会相应选择一个VC工程版本(具体参考第一章第一节“创建第一个项目”)。

如果我们要使用VC版本与创建时一致,可以跳过这步。

seafish创建时,使用的是VC++ 6.0。

假设我们要创建2010版本,点击“VC2010”按钮。

跳出如下窗口,点击“确定”即可。

3)点击“项目”面板中的“设置启动VC工程”,选择6.0,2008还是2010版本。

第一次使用时设置。

以后只要不更换VC工程的版本,就无需在操作该步骤。

说明:
在学校的机房中,学生机的硬盘都是写保护的。

因此,电脑一旦重启,之前的设置
就作废了,必须重新设置。

4)点击“项目”面板中的“启动VC工程”,它会根据第三步中设置VC工程的版本,用相应版本的VC++打开工程代码文件。

比如启动VC工程设置为VC6.0,以后我
们每次打开FunCode后,只需要直接点击“启动VC工程”,都能打开VC6.0,从
而简化了操作步骤。

文件的管理
VC6.0中“工作区”窗口是用来管理VC++工程各种资源的,包括各种文件。

窗口如下图:
工作区底部有三个tab 页,点击“FileView ”,该页面通过文件夹的形式来管理工程文件。

展开“Source Files ”,其中Main.cpp 是FunCode 事先创建好的,实验项目的程序框架(或初始代码)就写在该文件中。

如果打开VC6.0没有看到工作区窗口,点击“查看”菜单中的“工作区”,该窗口就会出现在VC 中。

如下图:
如果是VC2008或2010,“工作区”改名为“解决方案资源管理器”,“FileView ”也称为为“解决方案资源管理器”,其他则基本相同,如下方左图。

如果打开VC2008或2010,“解决方案资源管理器”看不见,点击“视图”菜单的“解决方案资源管理器”,如下方右图。

FunCode C语言程序包含2个文件:Main.cpp和CommonAPI.h。

其中,Main.cpp文件包含程序的主函数以及6个事件函数。

CommonAPI.h声明了FunCode的C语言API库。

Main.cpp文件顶部:
#include"CommonAPI.h"
这样,在该文件能够使用FunCode提供的API。

学习程序框架
双击Source Files中的Main.cpp图标,打开Main.cpp文件。

一个未经修改过的Main.cpp 文件包含3个方面的代码。

1、预编译指令
在文件顶部有一句:#include “CommonAPI.h”。

其中,CommonAPI.h是个头文件,它包含了FunCode API的函数声明,从而让用户可以直接调用FunCode事先预定义的一些函数,这些函数提供了一系列对图形、图像、声音进行操作的功能,从而简化用户开发游戏的难度。

这些预定义,从而方便程序员进行开发的函数又称为API(Application Programming Interface 应用程序接口)。

CommonAPI.h文件路径如下,与使用什么版本的VC无关:
\实验项目路径\SourceCode\Header
用记事本等编辑工具可以打开该文件,可查看所需API的函数声明和注释。

2、主函数
任何一个C语言程序都有一个主函数作为程序入口。

FunCode主函数名称为WinMain,名称虽然不叫main,但作用是一样的。

该函数的参数的具体含义我们不需要关心。

我们在后续章节中会做进一步了解主函数中的代码。

3、6个事件函数
在主函数下方,定义了6个事件函数,分别是dOnMouseMove ,dOnMouseClick ,dOnKeyDown ,dOnKeyUp ,dOnSpriteColSprite 和dOnSpriteColWorldLimit 。

其中,dOnSpriteColSprite 和dOnSpriteColWorldLimit 分别对应精灵与精灵碰撞事件、精灵与世界边界碰撞事件。

这两个事件,我们在“项目改进”一节中已经讲过。

另外四个函数分别对应鼠标滑动、鼠标点击、键盘按下、键盘弹起事件。

主函数
在Main.cpp 文件中定义了WinMain 函数,该函数是工程的主函数。

其结构如下:
int PASCAL WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// 初始化游戏引擎
if( !dInitGameEngine( hInstance, lpCmdLine ) )
return 0;
// To do : 在此使用API 更改窗口标题
dSetWindowTitle("Lesson");
// 引擎主循环,处理屏幕图像刷新等工作
while( dEngineMainLoop() )
{
// 获取两次调用之间的时间差,传递给游戏逻辑处理
float fTimeDelta = dGetTimeDelta();
};
// 关闭游戏引擎
dShutdownGameEngine();
return 0;
}
其中
1、调用dInitGameEngine 函数初始化游戏引擎。

如果失败,直接return ,程序不再执行。

因此,我们写的必须在该函数下方。

只有游戏引擎启动以后,执行的代码才有意义。

2、调用dSetWindowTitle 函数用来修改游戏的名称,只需要将“Lesson ”中的字符修改,就可以变成你想要的游戏的名称。

本项目中,我们修改成“seafish ”
3、游戏主循环。

每循环一次,执行一次dEngineMainLoop 函数。

该函数的功能是运行游戏引擎,刷新游戏屏幕,将最新结果展示在游戏屏幕上。

此外,当发生鼠标移动、鼠标点击、键盘按下、键盘弹起、精灵与精灵碰撞、精灵与世界边界碰撞这六个事件时,1 2 3 4
dEngineMainLoop会调用相应的事件函数。

这个我们在下一节会具体介绍。

游戏单线程的程序,比如游戏上有100辆坦克在移动,程序依次移动这100辆坦克,移动完毕后,就刷新一次屏幕,也就是while循环执行一次。

而不是我们感觉的多线程游戏,100辆坦克运动,就有一百个线程在并发执行。

4、当游戏运行时,dEngineMainLoop函数始终返回一个true值,游戏一直在while循环中运行。

当我们关闭游戏屏幕时,dEngineMainLoop返回false值,循环结束。

然后执行dShutGameEngine函数做清理工作,并关闭游戏引擎,整个游戏结束。

用代码让鱼游起来
我们通过一个简单例子,来了解一下程序应该怎么写。

Step1:
创建一个FunCode C语言工程,导入一条鱼命名为“yellowfish”,我们的目标,是让yellowfish从左向右以10个单位的速度水平游动。

界面如下:
Step2:
在dSetWindowTitle的上面或者下面添加以下语句:
//设置yellowfish的X方向速度为20,Y方向速度为0
dSetSpriteLinearVelocity("yellowfish", 20, 0);
该函数的意思是设置精灵的线性速度,在CommonAPI.h中可以查找到相关函数。

/* dSetSpriteLinearVelocity:设置精灵移动速度
* 参数szName:精灵名字
* 参数fVelX:X方向速度
* 参数fVelY:Y方向速度
*/
extern void dSetSpriteLinearVelocity( const char *szName, const float fVelX, const float fVelY );
Step3:
:编译运行即可看到yellowfish以速度为20在x方向上运动。

这样是不是很简单啊!
函数命名规则:
1、望文生义,通过函数名称了解函数功能;
2、函数名称中,除名称首字母外,每个单词的第一个字母要大写,便于识别。

FunCode API的命名规则,以dOnSpriteColSprite为例说明:
d:前缀,表明是FunCode提供的函数。

目的是避免与用户自定义的函数名称重复。

On:Windows编程中,习惯用On表示“当某某事件发生”
Sprite:精灵
Col:collision的缩写,碰撞。

因此,该名称的含义的就是:当精灵与精灵发生碰撞事件发生。

所有的FunCode API 通过这种读法,都能从字面上了解函数的功能。

通过单词首字母大写,虽然该名称由多个单词组成,也能一眼识别。

变量命名规则:
在游戏设计中,变量的命名一般采用“匈牙利命名法”。

基本原则是:
变量名= 属性+ 类型+ 对象描述。

常用的属性有:
g_:全局变量(global)
c_:常量(const)
s_:静态变量(static)
常用的类型:
浮点型(float) f
字符串(String)sz 其中z表示zero,因为在c中任何字符串的结束标记为’\0’双精度浮点(double) d
字符(char)ch
整型(Integer)i
一些描述:
最大Max
最小Min
初始化Init
临时变量T(或Temp)
源对象Src
目的对象Dest
举例说明:
szName - 这个变量是用来保存精灵名称的,名称一般都用字符串来表示。

sz就指明了这个变量指向一个字符串,Name则说明他是一个名字。

iColSide - i表示integer,即整型,ColSide是描述部分,Collsion Side的缩写,表示碰撞的边界,组合在一起表示:该变量的类型为整型,它用来表示精灵与世界边界碰撞的方位。

掌握上述命名规则,可以增强我们的程序代码的可读性,也会显得程序员更加的“专业”,希望同学们在以后的编程实践中逐步养成这种习惯。

练习:
1、让yellowfish水平从左往右游动;
2、yellowfish放置到屏幕右侧,头朝向左方,从右往左水平游动;
3、yellowfish放置到屏幕右上角,头朝向左方,向屏幕左下角游动。

6个事件函数
主函数下方,定义了6个事件函数,分别是
dOnMouseMove 鼠标移动事件
dOnMouseClick 鼠标点击事件
dOnKeyDown 键盘按下事件
dOnKeyUp 键盘弹起事件
dOnSpriteColSprite 精灵与精灵碰撞事件
dOnSpriteColWorldLimit 精灵与世界边界碰撞事件
主函数执行游戏主循环时,dEngineMainLoop函数会判断是否有这六个事件发生,如果有就调用相应的事件函数。

因此,要处理相应事件时,我们只需要把代码写在相应的事件函数内容。

当事件发生后,程序会调用并执行相应事件函数内的代码。

键盘的按下事件
当按下一个键盘时,dEngineMainLoop调用dOnKeyDown函数。

实验要求
按下D键,鱼向右移动。

思路阐述
在dOnKeyDown函数中判断是否按下D键。

如果是,给yellowfish设置一个向右的速度,则yellowfish向右游动。

在CommonAPI.h中找到相应的键盘按下事件函数:
/* dOnKeyDown:键盘被按下后将被调用的函数,可在此函数体里(Main.cpp)增加自己* 的响应代码
* 参数iKey:被按下的键,值见enum KeyCodes 宏定义
* 参数iAltPress, iShiftPress,iCtrlPress:键盘上的功能键Alt,Ctrl,Shift当前是否* 也处于按下状态(0未按下,1按下)
*/
extern void dOnKeyDown( const int iKey, const int iAltPress, const int iShiftPress, const int iCtrlPress );
代码详解
Step1:
将前面设置鱼的速度的语句屏蔽掉
//设置yellowfish的X方向速度为20,Y方向速度为0
//dSetSpriteLinearVelocity("yellowfish", 20, 0);
Step2:
在Main.cpp中dOnKeyDown事件函数中添加代码:。

相关文档
最新文档