Cocos2d游戏开发无限滚动地图--以Cocos2d-x游戏开发之旅为例课本第5章little runner

Cocos2d游戏开发无限滚动地图--以Cocos2d-x游戏开发之旅为例课本第5章little runner,第1张

概述     此书第89页指出了如何实现无限滚动地图,在这里,我们一起分析一下算法:  地图需要2张背景图连在一起,首先把一张地图进行水平翻转,用Ps说明如下:  翻转前:   背景1:m_bgSprite1   翻转后: 背景2: m_bgSprite2 把翻转后的这两张地图进行相连,一张地图代表屏幕尺寸大小,这样就能构成无限滚动地图的前提条件。在我们这个程序里,我们是在voidTollgateSc


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

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

@H_403_10@翻转前:@H_403_10@

@H_403_10@背景@H_403_10@1@H_403_10@:@H_403_10@m_bgSprite1


翻转后:@H_403_10@

背景@H_403_10@2@H_403_10@:@H_403_10@

m_bgSprite2



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

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

voID@H_403_10@ TollgateScene@H_403_10@::update(float@H_403_10@delta@H_403_10@) {

int@H_403_10@posX1 = m_bgSprite1->getpositionX(); //@H_403_10@背景地图@H_403_10@1@H_403_10@的@H_403_10@x@H_403_10@坐标@H_403_10@

int@H_403_10@posX2 = m_bgSprite2->getpositionX(); //@H_403_10@背景地图@H_403_10@2@H_403_10@的@H_403_10@x@H_403_10@坐标@H_403_10@

int@H_403_10@iSpeed =3; // @H_403_10@地图滚动速度@H_403_10@

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

posX1-= iSpeed;

posX2-= iSpeed;

/*@H_403_10@地图大小@H_403_10@ */@H_403_10@

CCSize@H_403_10@ mapSize = m_bgSprite1->getContentSize();

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

if@H_403_10@(posX1< -mapSize.wIDth /2) {

posX2= mapSize.wIDth / 2;

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

}

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

if@H_403_10@(posX2< -mapSize.wIDth / 2) {

posX1= mapSize.wIDth / 2;

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

}

m_bgSprite1->setpositionX(posX1);

m_bgSprite2->setpositionX(posX2);

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

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

}

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

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

if@H_403_10@(posX1< -mapSize.wIDth /2) {

posX2= mapSize.wIDth / 2;

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

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


总结

以上是内存溢出为你收集整理的Cocos2d游戏开发无限滚动地图--以Cocos2d-x游戏开发之旅为例课本第5章little runner全部内容,希望文章能够帮你解决Cocos2d游戏开发无限滚动地图--以Cocos2d-x游戏开发之旅为例课本第5章little runner所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1018871.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存