如何自己制作一个小游戏制作软件软件?

14278人阅读
3.1 Cocos2d-x(22)
&&&&& 本文实践自 Ray Wenderlich 的文章《》,文中使用Cocos2D,我在这里使用Cocos2D-x 2.0.4进行学习和移植。这个游戏是关于一个忍者在沙漠中寻找西瓜的故事。
&&&&& 在这部分内容,将会学习到如何用Tile创建一个地图,如何加载地图到游戏,如何让地图跟随玩家滚动,以及如何使用对象层。下一部分内容,将介绍如何在地图中创建可碰撞的区域,如何使用Tile属性,如何创建可拾取的物品和动态修改地图,以及如何确保忍者不会吃撑掉。
步骤如下:
1.新建Cocos2d-win32工程,工程名为&TileGame&,去除&Box2D&选项,勾选&Simple Audio Engine in Cocos Denshion&选项;
2.下载本游戏所需的资源,将资源放置&Resources&目录下;
3.使用Tiled工具制作地图。首先,下载开源的工具,当前版本为0.8.1,建议使用QT版本。在Tiled工具,点击菜单栏→&文件&→&新文件&,在弹出的对话框中,填入如下内容:
地图方向分为:正常、45度。地图大小填入的是tile单位。块大小是资源每个tile的实际像素大小,在本篇中,使用32x32大小。点击&确定&。
4.接着,把所需要的tile集合加入到工具中。菜单栏→&地图&→&新图块&,填入如下内容:
点击&浏览&,选择&Resources&目录下的tmw_desert_spacing.png文件,会自动填充&名称&内容。块的宽高都为32像素。边距就是当前tile块开始计算实际像素时,应该跳过多少像素,宽高一样。间距就是两个tile块之间的像素距离,宽高一样。看看tmw_desert_spacing.png文件,可以看到每个tile块都1像素的黑色边框,这就是为什么要设置边距和间距为1像素。
点击&确定&。
5.可以看到tile块出现在&图块&窗口中。现在可以开始画地图。点击菜单栏→&视图&→&显示网格&,可以开启网格参照线。点击工具栏&图章刷&,然后在&图块&窗口点选一个tile块,接着在地图中,点击放入你所想要的位置。
用工具栏&填充&,把地图背景填充成同一个tile块,这里为沙漠背景。可以从&图块&窗口点选多个tile块,可按Ctrl键多选,这样可以一次性将多个tile块放入地图中。进行制作地图,确保至少有一对建筑在地图上,因为后面需要一些东西来做碰撞。一旦完成了地图的制作,双击&图层&窗口中的当前层&块层
1&,重命名为&Background&。然后点击工具栏&保存&,命名为&TileMap.tmx&,保存在&Resources&目录下。
6.将Tile地图加入到场景中。在HelloWorldScene.h文件中,添加如下代码:
CC_SYNTHESIZE_RETAIN(cocos2d::CCTMXTiledMap*,&_tileMap,&TileMap);
CC_SYNTHESIZE_RETAIN(cocos2d::CCTMXLayer*,&_background,&Background);
在HelloWorldScene.cpp文件中,构造函数添加如下:
HelloWorld::HelloWorld()
&&&&_tileMap&=&NULL;
&&&&_background&=&NULL;
初始化init函数,修改如下:
bool&HelloWorld::init()
&&&&bool&bRet&=&false;
&&&&&&&&CC_BREAK_IF(!&CCLayer::init());
&&&&&&&&this-&setTileMap(CCTMXTiledMap::create(&TileMap.tmx&));
&&&&&&&&this-&setBackground(_tileMap-&layerNamed(&Background&));
&&&&&&&&this-&addChild(_tileMap,&-1);
&&&&&&&&bRet&=&true;
&&&&}&while&(0);
&&&&return&bR
7.编译运行,可以看到整个地图的左下角,如下图所示:
要让它成为一个游戏,还需要三件事:玩家、玩家初始点、移动视图以便能够看到玩家。
8.Tiled支持两种类型层:tile层和对象层。对象层允许你在地图上可能发生事件的区域绘制矩形。比如:你可能需要一个怪物出生区域,或者一个一进入就会挂掉的区域。在这里,我们给玩家创建一个出生地。菜单栏→&图层&→&添加对象层&,命名为&Objects&,点击工具栏&插入对象&,在地图上选择一个位置并点击它,这时会出现一个灰色的矩形框,右键选择&对象属性&,名称填入&SpawnPoint&,如下图所示:
按&确定&按钮。保存地图。
9.在HelloWorldScene.h文件中,添加如下声明:
CC_SYNTHESIZE_RETAIN(cocos2d::CCSprite*,&_player,&Player);
在HelloWorldScene.cpp构造函数中,添加如下:
_player&=&NULL;
在init初始化函数,添加如下:
CCTMXObjectGroup&*objects&=&_tileMap-&objectGroupNamed(&Objects&);
CCAssert(objects&!=&NULL,&&Objects'&object&group&not&found&);
CCDictionary&*spawnPoint&=&objects-&objectNamed(&SpawnPoint&);
CCAssert(spawnPoint&!=&NULL,&&SpawnPoint&object&not&found&);
int&x&=&spawnPoint-&valueForKey(&x&)-&intValue();
int&y&=&spawnPoint-&valueForKey(&y&)-&intValue();
this-&setPlayer(CCSprite::create(&Player.png&));
_player-&setPosition(ccp(x,&y));
this-&addChild(_player);
this-&setViewpointCenter(_player-&getPosition());
添加一个方法setViewpointCenter,代码如下:
void&HelloWorld::setViewpointCenter(CCPoint&position)
&&&&CCSize&winSize&=&CCDirector::sharedDirector()-&getWinSize();
&&&&int&x&=&MAX(position.x,&winSize.width&/&2);
&&&&int&y&=&MAX(position.y,&winSize.height&/&2);
&&&&x&=&MIN(x,&(_tileMap-&getMapSize().width&*&_tileMap-&getTileSize().width)&-&winSize.width&/&2);
&&&&y&=&MIN(y,&(_tileMap-&getMapSize().height&*&_tileMap-&getTileSize().height)&-&winSize.height&/&2);
&&&&CCPoint&actualPosition&=&ccp(x,&y);
&&&&CCPoint&centerOfView&=&ccp(winSize.width&/&2,&winSize.height&/&2);
&&&&CCPoint&viewPoint&=&ccpSub(centerOfView,&actualPosition);
&&&&this-&setPosition(viewPoint);
用户传任何的坐标过来,但是有一些点不希望显示出来,比如,我们不想屏幕移出地图边界,那里只是一片空白。如图:
摄像机的中心若是小于winSize.width/2或winSize.height/2,部分的视图将会在屏幕之外。同样的,我们需要检查边界条件。到目前为止,我们一直把这个函数看作是设置摄像机中心的位置。但是,这并不是我们实际做的。实际做的是移动整个层。看下图:
想象一下,身处在一个巨大的世界中,我们能看到的区域是从0到winSize.height/width的这部分。我们视野的中心是centerOfView,并且我们知道要让中心在哪儿(actualPosition)。所以要让我们视野的中心向上向右移动到actualPosition,我们只需要让地图相对的向下向左移动即可。这一步是通过actualPosition与centerOfView坐标相减得到的,然后把HelloWorld层的坐标设为这个结果。
10.编译运行,可以看到忍者在屏幕中,如下图所示:
11.接下来,让忍者可以移动。在HelloWorldScene.cpp文件init函数中,添加如下代码:
this-&setTouchEnabled(true);
开启触摸,然后重载registerWithTouchDispatcher函数,代码如下:
void&HelloWorld::registerWithTouchDispatcher(void)
&&&&&CCDirector::sharedDirector()-&getTouchDispatcher()-&addTargetedDelegate(this,&0,&true);
注册触摸事件,这样单点触摸ccTouchBegan和ccTouchEnded会被调用。重载ccTouchBegan函数,代码如下:
bool&HelloWorld::ccTouchBegan(CCTouch&*pTouch,&CCEvent&*pEvent)
&&&&return&true;
返回true表明接受这个触摸。添加setPlayerPosition方法,来设置玩家坐标,代码如下:
void&HelloWorld::setPlayerPosition(CCPoint&position)
&&&&_player-&setPosition(position);
重载ccTouchEnded方法,代码如下:
void&HelloWorld::ccTouchEnded(CCTouch&*pTouch,&CCEvent&*pEvent)
&&&&CCPoint&touchLocation&=&this-&convertTouchToNodeSpace(pTouch);
&&&&CCPoint&playerPos&=&_player-&getPosition();
&&&&CCPoint&diff&=&ccpSub(touchLocation,&playerPos);
&&&&if&(abs(diff.x)&&&abs(diff.y))
&&&&&&&&if&(diff.x&&&0)
&&&&&&&&&&&&playerPos.x&+=&_tileMap-&getTileSize().
&&&&&&&&}&
&&&&&&&&else
&&&&&&&&&&&&playerPos.x&-=&_tileMap-&getTileSize().
&&&&&&&&if&(diff.y&&&0)
&&&&&&&&&&&&playerPos.y&+=&_tileMap-&getTileSize().
&&&&&&&&}&
&&&&&&&&else
&&&&&&&&&&&&playerPos.y&-=&_tileMap-&getTileSize().
&&&&&&&&}&&&&&&&
&&&&if&(playerPos.x&&=&(_tileMap-&getMapSize().width&*&_tileMap-&getTileSize().width)&&&
&&&&&&&&playerPos.y&&=&(_tileMap-&getMapSize().height&*&_tileMap-&getTileSize().height)&&&
&&&&&&&&playerPos.y&&=&0&&&&playerPos.x&&=&0)
&&&&&&&&setPlayerPosition(playerPos);
&&&&setViewpointCenter(_player-&getPosition());
计算触摸点与玩家坐标之间的差值,来决定玩家的移动方向。
12.编译运行,点击屏幕,让忍者动起来,如下图所示:
参考资料:
1.How To Make a Tile-Based Game with Cocos2D
2.如何使用Cocos2D制作一款基于tile的游戏
3.(译)如何使用cocos2d制作基于tile地图的游戏教程:第一部分
非常感谢以上资料,本例子源代码附加资源下载地址:
如文章存在错误之处,欢迎指出,以便改正。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2617579次
积分:29396
积分:29396
排名:第123名
原创:381篇
转载:88篇
评论:3282条
联系方式:
(1)(3)(1)(1)(1)(1)(1)(1)(1)(2)(1)(1)(1)(1)(1)(3)(1)(1)(1)(1)(2)(1)(3)(3)(3)(1)(1)(3)(1)(1)(8)(1)(3)(2)(2)(3)(2)(3)(2)(1)(1)(2)(3)(6)(1)(4)(3)(1)(3)(5)(5)(5)(5)(1)(3)(5)(4)(4)(4)(5)(5)(1)(13)(11)(7)(5)(2)(5)(4)(5)(2)(7)(14)(18)(23)(19)(5)(35)(22)(21)(8)(10)(42)(49)全民弹弹首发福利礼包
热血帝王七夕礼包
全民突击高级礼包
全民大主宰礼包
圣斗士星矢礼包
新战国英雄VIP大礼包
2016LPL夏季赛
2016LPL夏季赛
2016LPL夏季赛
2016LPL夏季赛
2016LPL夏季赛
2016LPL夏季赛
2016LPL夏季赛&
2016LPL夏季赛
2016LPL夏季赛
2016LPL夏季赛北京汇众中关村动漫游戏学院
当前位置: & 正文
游戏软件如何制作?
游戏软件如何制作?怎么来制作游戏北京汇众教育中关村,培养国内大量紧缺的原创游戏制作人才,是国内首个系统化、专业化培养游戏人才的职业教育。学员经过系统学习,能够成为合格的游戏策划、游戏动画设计师、渲染师、原画师、手机游戏开发工程师、网络游戏开发工程师等。  汇众教育中关村游戏学院在经历了近五年的积累和沉淀后,总结出了一套更科学更先进的教育培训体系——“云培训体系”。独特的建构主义教学方式,带来教学模式的变革,以更精准、更前瞻、更实用、更人性化的课程设置,领跑亚洲游戏人才教育行业新标准。并且配合云培训体系的教学,搭建出一个领先业界的互联网教育平台--云世界,也可以理解为一款大型教育培训实战型网络游戏社区,是“云培训体系”的实现手段。这将改变传统的说教式、以技能培养为主或强调实战的培养模式,真正实现了综合型技能人才的培养。  北京汇众教育中关村游戏学院,以其在教学、管理、就业、学校环境、师资力量、学校硬件方面的优势,与北京1000多家动漫游戏企业合作,为行业输送了大量网络游戏开发、手机游戏开发、、游戏场景制作、游戏策划、游戏动画、3D动画等专业人才!
北京汇众教育中关村游戏学院一直专注于培训培养优秀的动漫设计与动漫制作人才,校区的深刻感悟是:没有最好,只有更好!北京汇众教育中关村游戏学院:更优雅的环境,更浓厚的学习氛围,更精良的师资队伍,更完善的就业推荐服务,让您站在更高的起跑线上 !
制作行业软件的标准学习过程,按如下顺序阅读相关书籍
1.基础知识与原理讲解
2.数据结构与算法实现
3.开发工具与案例代码
4.市场产品功能与参考
5.自我产品设计与发布
1.基础知识与原理讲解
&参考书目 :
《游戏架构设计与策划》
《游戏设计完全教程》
《游戏设计全方位学习/游戏编程大师系列》
《游戏程序设计概论/游戏编程大师系列》
《游戏开发与制作(附盘)》
2.数据结构与算法实现
&参考书目 :
《计算机图形学》清华大学出版社
《计算机图形学--用OpenGL实现(第2版国外经典教材计算机科学与技术)》
《3D计算机图形学(OpenGL版世界著名计算机教材精选)》
3.开发工具与案例代码
&参考书目 :
《3D游戏开发大全》
《3D游戏开发大全(高级篇)(附盘)》
《MUD游戏编程(附光盘)》
《AI游戏引擎程序设计(配光盘)(游戏开发经典丛书)》
《游戏脚本高级编程(附光盘)/》
《游戏关卡设计(附盘)(游戏开发技术系列丛书)》
《Visual C 游戏开发技术与实例(附光盘)》
《游戏编程精粹5(附盘)》
《网络游戏客户端编程》
《大型多人在线游戏开发(附光盘)》
《DirectX角色扮演游戏编程》(附光盘)含一个游戏引擎模型
《多玩家游戏程序设计》
《手机游戏开发全书-J2ME完整实例精解(附盘)》
4.市场产品功能与参考
5.自我产品设计与发布 学院名称: 学院地址:北京市海淀区海淀南路13号亿方大厦11层(中国人民大学西门) 交通路线:地铁10号线苏州街站B出口旁(交通十分便利) 咨询热线:010-节假日正常开通 学院网站:在线报名网址:
【点击咨询】 ↓↓↓
推荐阅读Recommended Reading
开班信息Class Information
就业指导Employment
学校详细地址:北京市海淀区中关村大街18号中关村互联网教育创新中心17层
全国服务咨询热线
京ICP备号北京汇众益智科技有限公司 地址:北京市海淀区上地东路35号颐泉汇3层 电话:010-

我要回帖

更多关于 手机自己制作游戏软件 的文章

 

随机推荐