Cocos3.4 横版游戏制作-《KillBear》-添加地图

前端之家收集整理的这篇文章主要介绍了Cocos3.4 横版游戏制作-《KillBear》-添加地图前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。
资源为网上寻找的,仅研究学习用,若是侵犯版权请通知本人整改。


此篇为第一篇,我们简单说明一下文件的结构.在新建一个文件的基础上,加入自制的瓦片地图.


开发环境


  • win64 : vs2010
  • Cocos2d-x v3.4Final
  • TexturePackerGUI
  • MapEdit

文件结构


参考的(转载的,我居然找不到原始博客了):

说明:
合理的文件结构有利于后续开发理解,之前犯了错,到最后结构混乱修改不便

开始制作

1.创建项目

文件夹下Shift+右键,选择:在此处打开命令行窗口,新建一个项目

2.获取资源

我重新找了主角资源和地图资源,放在附件链接中.(之后可能会在此更新制作资源方法)
首先是地图,通过Tiled重新做了一个地图

地图有3层:
第一层是Wall,主角和敌人不能跑到墙上去,设定为7层
第二层是floor,主角主要在这里活动,设定为3层
第三层是BlackGround,拿来当填充背景的
每隔瓦片设定都是32X32大小的,地图总大小为80X10

代码构建

其他Other

APPDelegate

修改APPDelegate.cpp,符合我们的屏幕大小

  1. auto director = Director::getInstance();
  2. auto eglView =director->getOpenGLView();
  3. if(!eglView) {
  4. eglView = GLViewImpl::create("My Game");
  5. eglView->setFrameSize(480,320);
  6. //WIN32下窗体大小,宽高
  7. director->setOpenGLView(eglView);
  8. }
  9. //director->setOpenGLView(eglView);
  10. eglView->setDesignResolutionSize(480,320,ResolutionPolicy::SHOW_ALL);
  11. ...
  12.  
  13. // create a scene. it's an autorelease object
  14. auto scene = GameScene::createScene();
  15.  
  16. // run
  17. director->runWithScene(scene);

GameScene

GameScene中添加我们需要的层

  1. Scene* GameScene::createScene()
  2. {
  3. auto scene = Scene::create();
  4.  
  5. auto gamelayer=GameLayer::create();
  6. scene->addChild(gamelayer,0);
  7.  
  8. auto operateLayer = OperateLayer::create();
  9. scene->addChild(operateLayer,1);
  10.  
  11. auto statelayer =StateLayer::create();
  12. scene->addChild(statelayer);
  13.  
  14. return scene;
  15. }

状态State

StateLayer

  1. bool StateLayer::init()
  2. {
  3. bool ret = false;
  4. do {
  5. CC_BREAK_IF( !Layer::init() );
  6.  
  7. ret = true;
  8. } while(0);
  9.  
  10. return ret;
  11. }

先空着

控制Operate

OperateLayer

  1. bool OperateLayer::init()
  2. {
  3. bool ret = false;
  4. do {
  5. CC_BREAK_IF( !Layer::init() );
  6.  
  7. ret = true;
  8. } while(0);
  9.  
  10. return ret;
  11. }

同上

游戏Game

游戏层包含地图层

地图层MapLayer

  1. class MapLayer : public Layer
  2. {
  3. public:
  4. MapLayer();
  5. ~MapLayer();
  6. virtual bool init();
  7. void update(float dt);
  8. void setViewpointCenter(Point pos);
  9. CREATE_FUNC(MapLayer);
  10. private:
  11. void initMapWithFile(const char * path);
  12. };
  • cpp
  1. bool MapLayer::init()
  2. {
  3. bool ret = false;
  4. do {
  5. CC_BREAK_IF( !Layer::init() );
  6. this->initMapWithFile("mymap.tmx");//地图初始化
  7. ret = true;
  8. } while(0);
  9.  
  10. return ret;
  11. }
  12. void MapLayer::initMapWithFile(const char * path)
  13. {
  14. TMXTiledMap *TileMap = TMXTiledMap::create(path);
  15. TileMap->setPosition(Vec2(0,0));
  16. this->addChild(TileMap);
  17. global->tileMap = TileMap;
  18. }

本体GameLayer

  • .h
  1. #ifndef _GAME_LAYER_H_
  2. #define _GAME_LAYER_H_
  3. #include "cocos2d.h"
  4. USING_NS_CC;
  5. #include "MapLayer.h"
  6. class GameLayer : public Layer
  7. {
  8. public:
  9. GameLayer();
  10. ~GameLayer();
  11. virtual bool init();
  12. CREATE_FUNC(GameLayer);
  13. };
  • .cpp
  1. bool GameLayer::init()
  2. {
  3. bool ret = false;
  4. do {
  5. CC_BREAK_IF( !Layer::init());
  6. _visibleSize = Director::getInstance()->getVisibleSize();
  7. _visibleOrigin = Director::getInstance()->getVisibleOrigin();
  8. SpriteFrameCache::getInstance()->addSpriteFramesWithFile("Boy.plist","Boy.pvr.ccz");
  9. SpriteFrameCache::getInstance()->addSpriteFramesWithFile("Enemy.plist","Enemy.pvr.ccz");
  10.  
  11.  
  12. auto map = MapLayer::create();
  13. this->addChild(map,-100);
  14. ret = true;
  15. } while(0);
  16. return ret;
  17. }

效果

至此我们的第一步已经完成了,运行下可以看到一个窗口中间有我们自己制作的地图:

结语

这是最简单的部分了,下一篇将加入一个Hero

猜你在找的Cocos2d-x相关文章