Cocos2d-x   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了cocos2d-x游戏开发(三)无限滚动地图大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_262_0@ 欢迎转载:http://blog.csdn.net/fylz1125/article/details/8498603

@H_262_0@

@H_262_0@ 一般打飞机类游戏都是飞机不动,背景图滚动,造成飞机在天空飞的效果。

@H_262_0@ @H_256_1@moonWarriors的背景有两层,一个远景天空,一个近景漂浮物,这两层背景滚动速度不一样,形成一种纵深感。

@H_262_0@ 如图:

@H_262_0@

@H_262_0@ 图有点模糊,实际效果跟html5的一样(根本就是照着它写的,嘿嘿)

@H_262_0@ 前面说了,背景分为两部分,天空和漂浮物,下面分别解释一下

@H_262_0@ 1,天空背景

@H_262_0@ 源图是一张320*576的jpg图片。加载的时候实质上是分两次进行的。

@H_262_0@

[cpp] view plain copy print @L_675_4@
  1. @H_610_58@m_BACkSky=CCSprite::create(s_bg01);
  2. @H_299_57@m_BACkSky->setAnchorPoint(ccp(0,0));
  3. @H_299_57@m_BACkSkyHeight=m_BACkSky->getContentSize().height;
  4. addChild(m_BACkSky,-10);
这是初始初始状态,加载后执行一个动作 @H_262_0@

@H_262_0@

?
    @H_610_58@m_BACkSky->runAction(CCMoveBy::create(3,ccp(0,-48)));
就是移动48像素。然后调用一个重复的任务调度来重复滚动; @H_262_0@

@H_262_0@

?
    schedule(schedule_SELEctor(GameLayer::movingBACkground),3);
@H_262_0@

@H_262_0@

?
    来看下这个滚动函数:
  1. voidGameLayer::movingBACkground()
  2. {
  3. @H_299_57@m_BACkSky->runAction(CCMoveBy::create(3,-48)));
  4. @H_299_57@m_BACkSkyHeight-=48;
  5. if(m_BACkSkyHeight<=winSize.height){
  6. if(!m_isBACkSkyReload){
  7. @H_299_57@m_BACkSkyRe=CCSprite::create(s_bg01);
  8. @H_299_57@m_BACkSkyRe->setAnchorPoint(ccp(0,0));
  9. addChild(m_BACkSkyRe,-10);
  10. @H_299_57@m_BACkSkyRe->setPosition(ccp(0,winSize.height));
  11. @H_299_57@m_isBACkSkyReload=true;
  12. }
  13. @H_299_57@m_BACkSkyRe->runAction(CCMoveBy::create(3,248)">
  14. if(m_BACkSkyHeight<=0){
  15. @H_299_57@m_BACkSkyHeight=m_BACkSky->getContentSize().height;
  16. this->removeChild(m_BACkSky,true);
  17. @H_299_57@m_BACkSky=m_BACkSkyRe;
  18. @H_299_57@m_BACkSkyRe=NULL;
  19. @H_299_57@m_isBACkSkyReload=false;
  20. }
可以看到,实质上是有两个CCSpite轮换加载来滚的。第一张滚加载完后图片比屏幕要高一些,它向下滚,滚到顶部到屏幕顶部的时候加载第二张,同时反转Reload标志位,第二张紧接着滚也滚进屏幕,当第一张滚出屏幕的时候,第一张节点被remove,但指针指向第二个精灵,第二个指针则被释放,同时标志位反转,这就完成了一个周期。整个过程不断重复。 @H_262_0@

@H_262_0@ 2.近景漂浮物滚动

@H_262_0@ 思路跟上面那个一模一样,但是这个的图片不一样,这是一个tmx,使用瓦片地图的方式加载。

@H_262_0@ 初始加载

@H_262_0@

?
    @H_610_58@m_BACkTileMap=CCTMXTiledMap::create(s_level01);
  1. addChild(m_BACkTileMap,-9);
  2. @H_299_57@m_BACkTileMapHeight=m_BACkTileMap->getMapSize().height*m_BACkTileMap->getTileSize().height;
  3. @H_299_57@m_BACkTileMapHeight-=200;
  4. @H_299_57@m_BACkTileMap->runAction(CCMoveBy::create(3,-200)));

@H_262_0@ 滚动部分:

@H_262_0@

?
    @H_610_58@m_BACkTileMap->runAction(CCMoveBy::create(3,-200)));
  1. if(m_BACkTileMapHeight<=winSize.height){
  2. if(!m_isBACkTileReload){
  3. @H_299_57@m_BACkTileMapRe=CCTMXTiledMap::create(s_level01);
  4. this->addChild(m_BACkTileMapRe,-9);
  5. @H_299_57@m_BACkTileMapRe->setPosition(0,winSize.height);
  6. @H_299_57@m_isBACkTileReload=true;
  7. @H_299_57@m_BACkTileMapRe->runAction(CCMoveBy::create(3,-200)));
  8. if(m_BACkTileMapHeight<=0){
  9. @H_299_57@m_BACkTileMapHeight=m_BACkTileMap->getMapSize().height*m_BACkTileMap->getTileSize().height;
  10. this->removeChild(m_BACkTileMap,248)"> @H_299_57@m_BACkTileMap=m_BACkTileMapRe;
  11. @H_299_57@m_BACkTileMapRe=NULL;
  12. @H_299_57@m_isBACkTileReload=false;
  13. }

打完收工 @H_262_0@

@H_262_0@

?
    <pre></pre>
  1. <pre></pre>
  2. <pre></pre>
  3. <divstyle="padding-top:20px">
  4. <pstyle="font-size:12px;">版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/dawn_moon</p>
  5. </div>

大佬总结

以上是大佬教程为你收集整理的cocos2d-x游戏开发(三)无限滚动地图全部内容,希望文章能够帮你解决cocos2d-x游戏开发(三)无限滚动地图所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:cocoscocos2ddx地图开发无限游戏滚动
猜你在找的Cocos2d-x相关文章
其他相关热搜词更多
phpJavaPython程序员load如何string使用参数jquery开发安装listlinuxiosandroid工具javascriptcap