加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Cocos2d游戏开发无限滚动地图--以Cocos2d-x游戏开发之旅为例课

发布时间:2020-12-14 19:41:06 所属栏目:百科 来源:网络整理
导读:此书第89页指出了如何实现无限滚动地图,在这里,我们一起分析一下算法: 地图需要2张背景图连在一起,首先把一张地图进行水平翻转,用Ps说明如下: 翻转前: 背景 1 : m_bgSprite1 翻转后: 背景 2 : m_bgSprite2 把翻转后的这两张地图进行相连,一张地图


此书第89页指出了如何实现无限滚动地图,在这里,我们一起分析一下算法:

地图需要2张背景图连在一起,首先把一张地图进行水平翻转,用Ps说明如下:

翻转前:

背景1m_bgSprite1


翻转后:

背景2

m_bgSprite2



把翻转后的这两张地图进行相连,一张地图代表屏幕尺寸大小,这样就能构成无限滚动地图的前提条件。在我们这个程序里,我们是在voidTollgateScene::initBG()里用了m_bgSprite2->setFlipX(true); // 水平翻转精灵 ,相当于第二张地图通过第一张地图进行翻转得到了。

接下来我们分析如何实现无限滚动地图,原书程序代码如下:

void TollgateScene::update(floatdelta) {

intposX1 = m_bgSprite1->getPositionX(); //背景地图1x坐标

intposX2 = m_bgSprite2->getPositionX(); //背景地图2x坐标

intiSpeed =3; // 地图滚动速度

/*两张地图向左滚动(两张地图是相邻的,所以要一起滚动,否则会出现空隙)*/

posX1-= iSpeed;

posX2-= iSpeed;

/*地图大小 */

CCSize mapSize = m_bgSprite1->getContentSize();

/*当第1个地图完全离开屏幕时,让第2个地图完全出现在屏幕上,同时让第1个地图紧贴在第2个地图后面*/

if(posX1< -mapSize.width /2) {

posX2= mapSize.width / 2;

posX1= mapSize.width + mapSize.width / 2;

}

/*同理,当第2个地图完全离开屏幕时,让第1个地图完全出现在屏幕上,同时让第2个地图紧贴在第1个地图后面*/

if(posX2< -mapSize.width / 2) {

posX1= mapSize.width / 2;

posX2= mapSize.width + mapSize.width / 2;

}

m_bgSprite1->setPositionX(posX1);

m_bgSprite2->setPositionX(posX2);

// 以下这个函数的其它代码,与无限滚动地图无关,因此以下代码略去

…………此部分代码已经略去

}

从以上代码可以看到,最关键的代码如下,以第1个图片为例:

/* 当第1个地图完全离开屏幕时,让第2个地图完全出现在屏幕上,同时让第1个地图紧贴在第2个地图后面*/

if(posX1< -mapSize.width /2) {

posX2= mapSize.width / 2;

posX1= mapSize.width + mapSize.width / 2;

首先明确的是,每一张背景地图都是和屏幕的尺寸的一样大的,这样才能覆盖住屏幕。屏幕的坐标是在屏幕的中心点。这三句话,我们可以用如下图片来表达,这样更清楚:


(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读