01FunCodeC入门word资料36页.docx
- 文档编号:9506763
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:27
- 大小:60.06KB
01FunCodeC入门word资料36页.docx
《01FunCodeC入门word资料36页.docx》由会员分享,可在线阅读,更多相关《01FunCodeC入门word资料36页.docx(27页珍藏版)》请在冰豆网上搜索。
01FunCodeC入门word资料36页
FunCodeC语言实验教学指南入门篇
入门
创建第一个项目
运行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工程中,然后将它们删除。
设计界面初步
在软件中间是“场景预览”区域(以下简称为“场景区域”),要在工程中实际使用的精灵必须拖曳到该区域,如下图.。
其中,红色箭头所指的暗绿色方框所包围的区域为游戏运行时的可见区域(以下简称为“可见区域”)。
场景区域中方框以外区域在游戏运行时不可见,称为“不可见区域”。
只有拖放到场景区域中的精灵,代码才能进行控制。
用鼠标左键点击“资源”面板中的某个精灵图标不放,然后拖曳到场景区域。
操作如下:
Step1:
鼠标左键点击某张精灵图标。
Step2:
按住鼠标左键不放,拖到场景区域
Step3:
放开鼠标左键,精灵恢复实际大小。
Step4:
点击鼠标左键选中精灵不放,可以随意布置精灵的位置
Step5:
鼠标左键点击下图红圈标识的8个节点,拖动鼠标可以放到和缩小精灵图片。
如果同时按照shift键,则可以保持精灵图片的长宽比不变。
step6:
改变精灵图片大小,使其刚好与游戏可见区域大小相等。
step7:
在设计过程中,我们可以通过鼠标上的滚动滑轮,放大或缩小游戏可见区域,从而方便界面设计。
缩小
放大
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”,该页面通过文件夹的形式来管理工程文件。
展开“SourceFiles”,其中Main.cpp是FunCode事先创建好的,实验项目的程序框架(或初始代码)就写在该文件中。
如果打开VC6.0没有看到工作区窗口,点击“查看”菜单中的“工作区”,该窗口就会出现在VC中。
如下图:
如果是VC2008或2010,“工作区”改名为“解决方案资源管理器”,“FileView”也称为为“解决方案资源管理器”,其他则基本相同,如下方左图。
如果打开VC2008或2010,“解决方案资源管理器”看不见,点击“视图”菜单的“解决方案资源管理器”,如下方右图。
代码文件的组成
FunCodeC语言程序包含2个文件:
Main.cpp和CommonAPI.h。
其中,Main.cpp文件包含程序的主函数以及6个事件函数。
CommonAPI.h声明了FunCode的C语言API库。
Main.cpp文件顶部:
#include"CommonAPI.h"
这样,在该文件能够使用FunCode提供的API。
学习程序框架
双击SourceFiles中的Main.cpp图标,打开Main.cpp文件。
一个未经修改过的Main.cpp文件包含3个方面的代码。
1、预编译指令
在文件顶部有一句:
#include“CommonAPI.h”。
其中,CommonAPI.h是个头文件,它包含了FunCodeAPI的函数声明,从而让用户可以直接调用FunCode事先预定义的一些函数,这些函数提供了一系列对图形、图像、声音进行操作的功能,从而简化用户开发游戏的难度。
这些预定义,从而方便程序员进行开发的函数又称为API(ApplicationProgrammingInterface应用程序接口)。
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函数,该函数是工程的主函数。
其结构如下:
intPASCALWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intnCmdShow)
{
//初始化游戏引擎
if(!
dInitGameEngine(hInstance,lpCmdLine))
return0;
//Todo:
在此使用API更改窗口标题
dSetWindowTitle("Lesson");
//引擎主循环,处理屏幕图像刷新等工作
while(dEngineMainLoop())
//获取两次调用之间的时间差,传递给游戏逻辑处理
floatfTimeDelta=dGetTimeDelta();
4
//关闭游戏引擎
dShutdownGameEngine();
return0;
其中
1、调用dInitGameEngine函数初始化游戏引擎。
如果失败,直接return,程序不再执行。
因此,我们写的必须在该函数下方。
只有游戏引擎启动以后,执行的代码才有意义。
2、调用dSetWindowTitle函数用来修改游戏的名称,只需要将“Lesson”中的字符修改,就可以变成你想要的游戏的名称。
本项目中,我们修改成“seafish”
3、游戏主循环。
每循环一次,执行一次dEngineMainLoop函数。
该函数的功能是运行游戏引擎,刷新游戏屏幕,将最新结果展示在游戏屏幕上。
此外,当发生鼠标移动、鼠标点击、键盘按下、键盘弹起、精灵与精灵碰撞、精灵与世界边界碰撞这六个事件时,dEngineMainLoop会调用相应的事件函数。
这个我们在下一节会具体介绍。
游戏单线程的程序,比如游戏上有100辆坦克在移动,程序依次移动这100辆坦克,移动完毕后,就刷新一次屏幕,也就是while循环执行一次。
而不是我们感觉的多线程游戏,100辆坦克运动,就有一百个线程在并发执行。
4、当游戏运行时,dEngineMainLoop函数始终返回一个true值,游戏一直在while循环中运行。
当我们关闭游戏屏幕时,dEngineMainLoop返回false值,循环结束。
然后执行dShutGameEngine函数做清理工作,并关闭游戏引擎,整个游戏结束。
用代码让鱼游起来
我们通过一个简单例子,来了解一下程序应该怎么写。
Step1:
创建一个FunCodeC语言工程,导入一条鱼命名为“yellowfish”,我们的目标,是让yellowfish从左向右以10个单位的速度水平游动。
界面如下:
Step2:
在dSetWindowTitle的上面或者下面添加以下语句:
//设置yellowfish的X方向速度为20,Y方向速度为0
dSetSpriteLinearVelocity("yellowfish",20,0);
该函数的意思是设置精灵的线性速度,在CommonAPI.h中可以查找到相关函数。
/*dSetSpriteLinearVelocity:
设置精灵移动速度
*参数szName:
精灵名字
*参数fVelX:
X方向速度
*参数fVelY:
Y方向速度
externvoiddSetSpriteLinearVelocity(constchar*szName,constfloatfVelX,constfloatfVelY);
Step3:
:
编译运行即可看到yellowfish以速度为20在x方向上运动。
这样是不是很简单啊!
函数命名规则:
1、望文生义,通过函数名称了解函数功能;
2、函数名称中,除名称首字母外,每个单词的第一个字母要大写,便于识别。
FunCodeAPI的命名规则,以dOnSpriteColSprite为例说明:
d:
前缀,表明是FunCode提供的函数。
目的是避免与用户自定义的函数名称重复。
On:
Windows编程中,习惯用On表示“当某某事件发生”
Sprite:
精灵
Col:
collision的缩写,碰撞。
因此,该名称的含义的就是:
当精灵与精灵发生碰撞事件发生。
所有的FunCodeAPI通过这种读法,都能从字面上了解函数的功能。
通过单词首字母大写,虽然该名称由多个单词组成,也能一眼识别。
变量命名规则:
在游戏设计中,变量的命名一般采用“匈牙利命名法”。
基
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 01 FunCodeC 入门 word 资料 36