cocos2d-x植物大战僵尸(1) (地图的加载)
2013-12-02 14:14
357 查看
//我在这里写文章是想和大家分享经验的,只是我个人感觉,前面我写的都是部分打码,即便是大家看了,也可能会觉得我写的太乱,无章可循;我当时开始写的时候,没考虑太多的结构和层次;以至于代码看上去很冗余;我在看别人博客的时候,特别是JACK的博客,大为欣赏他的结构模式,,层次也很鲜明;虽然关于植物大战僵尸我已经写到了第四部分。。不过我打算从新来写;
并把实现的代码一字不漏的写到博客上面;利于新手的学习也利于高手的指点;期待大家多交流这次呢,我不打算再使用背景图,而是使用地图,游戏的结构模式是这样的 : 它暂时先包含一个主场景;一个主游戏层 (包含多个子层);今天要实现的就是加载地图和改变窗口大小;(下面要进行的工作必须在cocos2d-x游戏引擎搭建好的条件下进行,我使用的是2.2v);
首先创建游戏场景类: GameScene 继承CCScene;
GameScene.h
接下来我们修改AppDelegate.cpp,
首先包含 GameScene.h
再改动一处:
好这里就可以产生一个空的黑色窗口了;
下面要写主游戏层了;加一个类GameLayer;下面是他的.h .cpp文件
GameLayer.h
只需要在GameScene.h中加入以下代码;
接下来我们要创建一个地图层MapLayer,在层里创建地图,并加入到GameLayer主层去;
MapLayer.h
下面我们把我们的地图层加入到我们的主游戏层里面去;
在GameLayer.h中加入下面的代码
在GameLayer.cpp进行定义
在GameLayer.cpp的构造函数中:进行下面的初始化
定义void initMapLayer();
在bool GameLayer::init()中加入初始化地图
好到这一部就可以显示一张游戏地图了:看下效果:
就这么大,我希望能显示全部的地图,这时候我们还需要改动一下AppDelegate.cpp,
下面就是修改窗口后的效果图:
,加载地图部分到这里就结束了。
游戏资源的链接:http://download.csdn.net/detail/u010296979/6685103
并把实现的代码一字不漏的写到博客上面;利于新手的学习也利于高手的指点;期待大家多交流这次呢,我不打算再使用背景图,而是使用地图,游戏的结构模式是这样的 : 它暂时先包含一个主场景;一个主游戏层 (包含多个子层);今天要实现的就是加载地图和改变窗口大小;(下面要进行的工作必须在cocos2d-x游戏引擎搭建好的条件下进行,我使用的是2.2v);
首先创建游戏场景类: GameScene 继承CCScene;
GameScene.h
#pragma once #include "e:\cocos2d-x\cocos2d-x-2.2\cocos2d-x-2.2\cocos2dx\layers_scenes_transitions_nodes\ccscene.h" #include "cocos2d.h" class GameScene :public cocos2d::CCScene { public: GameScene(void); ~GameScene(void); CREATE_FUNC(GameScene); //创建create方法,它里面包含初始化init()方法 virtual bool init(); };GameScene.cpp
#include "GameScene.h" USING_NS_CC; GameScene::GameScene(void) { } GameScene::~GameScene(void) { } bool GameScene::init() { if(!CCScene::init()) //重写基类中的init()方法 { return false ; } return true; }
接下来我们修改AppDelegate.cpp,
首先包含 GameScene.h
#include "AppDelegate.h" #include "HelloWorldScene.h"//我们还是尽量保留引擎自带helloworld文件,不必去改动或删除它 #include "GameScene.h" //就是这里(包含 GameScene.h ) USING_NS_CC; AppDelegate::AppDelegate() { } AppDelegate::~AppDelegate() { }
再改动一处:
bool AppDelegate::applicationDidFinishLaunching() { // initialize director CCDirector* pDirector = CCDirector::sharedDirector(); CCEGLView* pEGLView = CCEGLView::sharedOpenGLView(); pDirector->setOpenGLView(pEGLView); // turn on display FPS pDirector->setDisplayStats(true); // set FPS. the default value is 1.0/60 if you don't call this pDirector->setAnimationInterval(1.0 / 60); // create a scene. it's an autorelease object CCScene *pScene = GameScene::create(); //就是这里(把Helloworld::scene()改成GameScene::create()); // run pDirector->runWithScene(pScene); return true; }
好这里就可以产生一个空的黑色窗口了;
下面要写主游戏层了;加一个类GameLayer;下面是他的.h .cpp文件
GameLayer.h
#pragma once
#include "e:\cocos2d-x\cocos2d-x-2.2\cocos2d-x-2.2\cocos2dx\layers_scenes_transitions_nodes\cclayer.h"
#include "cocos2d.h" class GameLayer :public cocos2d::CCLayer { public: GameLayer(void); ~GameLayer(void); virtual bool init(); CREATE_FUNC(GameLayer); };GameLayer.cpp
#include "GameLayer.h" USING_NS_CC; GameLayer::GameLayer(void) { } GameLayer::~GameLayer(void) { } bool GameLayer::init() { if(!CCLayer::init()) { return false; } return true; }下面我们把主游戏层加到GameScene场景当中去;
只需要在GameScene.h中加入以下代码;
#include "GameLayer.h"
void initGameLayer(); //这里声明一个初始化游戏层得函数我们在GameScene.cpp中进行定义;void initGameLayer();
void GameScene::initGameLayer() { GameLayer* gameLayer = GameLayer::create(); this->addChild(gameLayer); }最后把这个定义的函数加到 bool GameScene::init()中
this->initGameLayer();
接下来我们要创建一个地图层MapLayer,在层里创建地图,并加入到GameLayer主层去;
MapLayer.h
#pragma once #include "e:\cocos2d-x\cocos2d-x-2.2\cocos2d-x-2.2\cocos2dx\layers_scenes_transitions_nodes\cclayer.h" #include "cocos2d.h" class MapLayer :public cocos2d::CCLayer { public: MapLayer(void); ~MapLayer(void); CREATE_FUNC(MapLayer); virtual bool init(); void initMap();//初始化地图函数 cocos2d::CCTMXTiledMap* _map ; //声明地图的全局变量 };MapLayer.cpp
#include "MapLayer.h" USING_NS_CC; MapLayer::MapLayer(void) { } MapLayer::~MapLayer(void) { } bool MapLayer::init() { if(!CCLayer::init()) { return false; } this->initMap(); return true; } void MapLayer::initMap() { this->_map =CCTMXTiledMap::create("map_list.tmx");//地图文件,是由tile软件做的,这块应该不怎么难,这张地图 用了两个层 this->addChild(this->_map); }
下面我们把我们的地图层加入到我们的主游戏层里面去;
在GameLayer.h中加入下面的代码
#include "MapLayer.h"
MapLayer* _mapLayer; //声明地图层得全局变量 void initMapLayer();//声明初始化地图
在GameLayer.cpp进行定义
在GameLayer.cpp的构造函数中:进行下面的初始化
GameLayer::GameLayer(void) { this->_mapLayer =NULL; }
定义void initMapLayer();
void GameLayer::initMapLayer() { this->_mapLayer =MapLayer::create(); this->addChild(this->_mapLayer); }
在bool GameLayer::init()中加入初始化地图
this->initMapLayer();
好到这一部就可以显示一张游戏地图了:看下效果:
就这么大,我希望能显示全部的地图,这时候我们还需要改动一下AppDelegate.cpp,
bool AppDelegate::applicationDidFinishLaunching() { // initialize director CCDirector* pDirector = CCDirector::sharedDirector(); CCEGLView* pEGLView = CCEGLView::sharedOpenGLView(); pEGLView->setFrameSize(1350, 500);//就是在这里我们修改下绘图窗口,注意位置不能弄错了 pDirector->setOpenGLView(pEGLView);
下面就是修改窗口后的效果图:
,加载地图部分到这里就结束了。
游戏资源的链接:http://download.csdn.net/detail/u010296979/6685103
相关文章推荐
- cocos2d-x游戏开发系列教程-坦克大战游戏加载地图的编写
- Cocos2d-x游戏实例-《跑跑跑》制作教程(第一篇)——加载地图
- cocos2d-x游戏开发系列教程-坦克大战游戏加载地图的编写
- 【木头Cocos2d-x 009】游戏实例-《跑跑跑》制作教程(第一篇)——加载地图
- 【木头Cocos2d-x 009】游戏实例-《跑跑跑》制作教程(第一篇)——加载地图
- cocos2d-x系列笔记(6)---加载一张地图
- Cocos2d-X游戏【泰然网《跑酷》】JS到C++移植9:Map Loop【地图循环加载】
- cocos2d 加载地图总结
- cocos2d-android - 1.地图动态加载原理(世界地图的实现)
- cocos2d-x学习之旅(十一):制作TXM游戏地图,并加载到游戏场景中
- cocos2d-android - 1.地图动态加载原理(世界地图的实现)
- 如何将万能地图下载器下载的卫星地图加载到Autodesk InfraWorks 360内进行道路规划设计
- 地图加载问题
- qgis 加载在线地图
- 【cocos2d-x 大型ARPG手游研发----地图活起来了】
- cocos2d-x - 2d跑酷游戏地图素材(TiledMap)
- Cocos2D-Android- 地图,粒子系统与声音引擎
- google map结合数据库加载地图
- GMap地图的加载和现实
- WebView 加载地图