- 1、本文档共93页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
02 FunCode C 实验教学指南
实验教学
实验:海底世界
实现鱼来回游动
学习目标
用代码响应“精灵与世界边界碰撞”事件;
如何让精灵调头运动;
复习选择结构;
学习应用dSetSpriteFlipX和dSetSpriteFlipY函数;
学习应用strcmp函数。
在“入门”一章中,我们学会了如何设计游戏界面,也知道简单地编一点小程序。从这章开始,我们开始用代码写稍微复杂一些的小游戏。
在这个实验中,我们还是使用seafish项目。到目前为止,我们能让yellowfish游动了,但是它游出屏幕以后就不再回来了。现在,我们要求它游到屏幕左边界时,就调头向右游动;游到右边界时,就调头向左游动。
Step1:
创建C语言工程,工程的名字起为seafish,然后添加相应的精灵,鱼和背景图片。
Step2:让鱼水平游动
在WinMain的游戏初始化部分:先将yellowfish改为水平游动。修改dSetWindowTitle中的内容,将下列代码添加到dSetWindowTitle函数的下边:
dSetWindowTitle(“seafish”); //游戏的名字为seafish
dSetSpriteLinearVelocity (“yellowfish”, 10, 0); //初始化yellowfish的X方向速度
Step3:设置鱼的世界边界
在“入门”一章,我们已经学习了精灵与世界边界碰撞事件(具体查看“项目改进”之“精灵与世界边界的碰撞”)。在界面中将yellowfish的世界边界设计得与可见区域重合,然后将“限制模式”改为NULL。
现在我们通过代码实现精灵与世界边界碰撞模式的设置:
在step2的代码下面添加以下代码:
dSetSpriteWorldLimitMode(“yellowfish”, WORLD_LIMIT_NULL); //将碰撞模式设置为NULL
Step 4:精灵与世界边界碰撞的响应函数
这个响应函数就是dOnSpriteColWorldLimit函数,函数定义在Main.cpp文件中。WinMain函数中,每次循环调用dEngineMainLoop函数时,引擎会检查是否有精灵与世界边界碰撞事件发生。如果有,再检测限制模式是否是NULL。如果是NULL,就调用该函数并执行函数内部代码。函数定义如下:
void dOnSpriteColWorldLimit( const char *szName, const int iColSide )
{
}
其中,szName是与世界边界碰撞的精灵的名称。
iColSide用来表示与哪个边界碰撞,0 – 左边界,1 – 右边界,2 – 上边界,3-下边界。
因此,对该事件的处理代码,我们只需要写在这个函数中就可以了。
Step5:判断鱼碰到了那个边界
由step4可以知道,关于精灵与世界边界碰撞的处理都写在dOnSpriteColWorldLimit中,那么判断也应写在该函数中,代码如下:
if(0 == iColSide)
{
dSetSpriteLinearVelocity(yellowfish, 10, 0);
}
else if(1 == iColSide)
{
dSetSpriteLinearVelocity(yellowfish, -10, 0);
}
Step 6:鱼碰到右边界后调头
运行step5可以看到精灵虽然反向游动了,但是头还没有调转。这里我们学习两个新的API,用来将精灵沿着X轴或Y轴调转。
/* dSetSpriteFlipX:设置精灵图片X方向翻转显示
* 参数 szName:精灵名字
* 参数 iFlipX:1 翻转 0不翻转(恢复原来朝向)
*/
extern void dSetSpriteFlipX( const char *szName, const int iFlipX );
/* dSetSpriteFlipY:设置精灵图片Y方向翻转显示
* 参数 szName:精灵名字
* 参数 iFlipY:1 翻转 0不翻转(恢复原来朝向)
*/
extern void dSetSpriteFlipY( const char *szName, const int iFlipY );
如果我们要让yellowfish在X方向上来回的游动,应该怎么过办呢??
在step5中的if-else if语句中添加代码如下:
if(0 == iColSide)
{
dSetSpriteFlipX(“yellowfish”, 0); //yellowfish不进行水平翻转,可以试试不加 //这句有什么效果
dSetSpriteLinearVelocity(yellowfi
您可能关注的文档
最近下载
- 2025甘肃甘南州专业化管理的村党组织书记招聘45人笔试备考题库及一套答案详解.docx VIP
- 05G525_吊车轨道联结及车挡 .docx VIP
- 《交流电机的维护与检修》课件.ppt VIP
- 妇产科学教学课件:女性生殖系统生理.ppt VIP
- (通用)大学生人文知识竞赛题库及答案(通用版).pptx VIP
- DB42╱T 1528.1-2019 湖北省农业用水定额 第1部分:农田灌溉用水定额.docx VIP
- 财务风险管理及防范对策研究.pptx VIP
- 儿童特应性皮炎的药物治疗.pptx
- 一种在无有机模板剂条件下合成MCM-49型沸石分子筛的方法.pdf VIP
- 三相异步电动机的铭牌.pptx VIP
文档评论(0)