战争迷雾2

转载请注明,原文地址: http://benmutou.com/blog/archives/468

 

1. 创建TMX地图

现在,打开我们的Tiled地图编辑器,新建一个地图:【新建】->【新建文件】,地图宽为10,地图高为10

 

然后将瓦片图素拖动到图块区域,添加图块,宽高分别为128像素,边距和间距都为0

 

然后,最重要的一步来了!选中第一个图素,涂满地图,效果如下:

 

(小若:喂,什么意思?涂满地图了?为什么还是空白的!)

于是,我们完成了这张复杂的TMX地图了,好好保存起来吧!【文件】-【保存】。

(小若:你是不是故意忽略我的啊!)

啊,对了,图素图片如下:

 

图素在TMX格式地图中按从左到右,从上到下,从1开始编号,如下图所示:

 

由于图素1是全透明的,所以我们画出来的地图看起来是空白的,实际上全都填充了图素1的瓦片。

(小若:我就知道有问题!)

 

OK,我把地图文件保存为“cloudMap.tmx

 

2. 在Cocos2d-x加载地图

好,进入正题,先新建一个Cocos2d-x项目(我就不列出详细步骤了,默认大家都有基础)。然后,直接打开HelloWorldScene.cppinit函数,把默认的代码删除,添加如下代码:

  1. bool HelloWorld::init()  
  2.    
  3. {  
  4.    
  5.     bool bRet = false;  
  6.    
  7.     do   
  8.    
  9.     {  
  10.    
  11.         CCLayerColor::initWithColor(ccc4(255, 255, 255, 255));  
  12.    
  13.     
  14.    
  15. cloudMap = CCTMXTiledMap::create("cloudMap.tmx");  
  16.    
  17.     
  18.    
  19. this->addChild(cloudMap);  
  20.    
  21.     
  22.    
  23. this->setTouchEnabled(true);  
  24.    
  25.         bRet = true;  
  26.    
  27.     } while (0);  
  28.    
  29.     
  30.    
  31.     return bRet;  
  32.    
  33. }  
cloudMap 是成员变量,我们来看看头文件:
  1. class HelloWorld : public cocos2d::CCLayerColor  
  2.    
  3. {  
  4.    
  5. public:  
  6.    
  7.     virtual bool init();    
  8.    
  9.     static cocos2d::CCScene* scene();  
  10.    
  11.     CREATE_FUNC(HelloWorld);  
  12.    
  13.     
  14.    
  15. virtual bool ccTouchBegan( CCTouch *pTouch, CCEvent *pEvent );  
  16.    
  17.     
  18.    
  19. virtual void registerWithTouchDispatcher( void );  
  20.    
  21.     
  22.    
  23. private:  
  24.    
  25. CCTMXTiledMap* cloudMap;  
  26.    
  27. };  
 

(小若:不对!有问题!你是不是写多了很多东西啊!)

被发现了,是的,因为我们将要用的屏幕触摸事件,所以我在init函数里添加了一句代码:

this->setTouchEnabled(true);

然后重写了ccTouchBeganregisterWithTouchDispatch函数,在registerWithTouchDispatch函数执行以下代码,这样才能获取屏幕触摸事件:

  1. void HelloWorld::registerWithTouchDispatcher( void )  
  2.    
  3. {  
  4.    
  5. CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);  
  6.    
  7. }  


 

已经懂的朋友请耐心等待,我得照顾不太熟悉Cocos2d-x的朋友们。

(小若:我知道你在说我,你就直接说吧!)

那么,编译运行项目,我们将看到以下效果:

 

(小若:不对!我发现你刚刚的代码是CCLayerColor,而不是CCLayer,这是为什么?)

是的,在这里要解释一下,因为我们的迷雾是黑色,而CCLayer默认的屏幕背景也是黑色的,这样即使我们的迷雾消失了,那背景还是黑色的,根本看不出效果。

(小若:我明白了!黑布上面盖一层黑雾,即使黑雾消失了,那看到的还是黑色的!)

好了,这一节基本上是铺垫,下一节还要继续铺垫。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值