01FunCodeC入门word资料36页.docx

上传人:b****7 文档编号:9506763 上传时间:2023-02-05 格式:DOCX 页数:27 大小:60.06KB
下载 相关 举报
01FunCodeC入门word资料36页.docx_第1页
第1页 / 共27页
01FunCodeC入门word资料36页.docx_第2页
第2页 / 共27页
01FunCodeC入门word资料36页.docx_第3页
第3页 / 共27页
01FunCodeC入门word资料36页.docx_第4页
第4页 / 共27页
01FunCodeC入门word资料36页.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

01FunCodeC入门word资料36页.docx

《01FunCodeC入门word资料36页.docx》由会员分享,可在线阅读,更多相关《01FunCodeC入门word资料36页.docx(27页珍藏版)》请在冰豆网上搜索。

01FunCodeC入门word资料36页.docx

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通过这种读法,都能从字面上了解函数的功能。

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

变量命名规则:

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学反思汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1