1.介绍
实现屏幕背景的自动滚动是游戏常遇到的功能,这样我们就不用绘制很长的背景图片,只要设计一张就可以,省时省力。这章将实现这个功能,并把源代码贡献给大家,废话不多说,先上个图,其实是动态的,只是截动态图有点麻烦。
2.代码实现部分
屏幕的动态滚动主要是一个刷新机制的问题。
第一步,还是进入HelloWorldLayer.h中定义一些节点的对象
<span style="color:#362e2b">#import <GameKit/GameKit.h> // When you import this file, you import all the cocos2d classes #import "cocos2d.h" // HelloWorldLayer @interface HelloWorldLayer : CCLayer <GKAchievementViewControllerDelegate, GKLeaderboardViewControllerDelegate> { CCParallaxNode *backgroundNode;//</span><span style="color:#ff6666">这个节点是实现滚动的关键节点</span><pre name="code" class="objc" style="color:rgb(54,46,43); line-height:26px"></pre><span style="color:#362e2b"> CCSprite *mainBg; CCSpriteBatchNode *batchNode; }// returns a CCScene that contains the HelloWorldLayer as the only child+(CCScene *) scene;@end</span>
第二步当然是来到HelloWorldLayer.m中。
返回栏目页:http://www.bianceng.cnhttp://www.bianceng.cn/OS/extra/
首先来写一下刷新的函数
- (void)updateBackground:(ccTime)dt { CGSize size = [CCDirector sharedDirector].winSize; CGPoint backgroundScrollVel = ccp(-size.width, 0); backgroundNode.position = ccpAdd(backgroundNode.position, ccpMult(backgroundScrollVel, dt)); CGSize winSize = [CCDirector sharedDirector].winSize; NSArray *backgrounds = [NSArray arrayWithObjects:mainBg,nil]; for (CCSprite *background in backgrounds) { if ([backgroundNode convertToWorldSpace:background.position].x < -background.contentSize.width) { //if中判断是如果屏幕超出图片范围 backgroundNode.position = ccp(winSize.width*4,0);//图片就以这个速度移动 } } }
接着,将上一个函数加到update中,实现实时更新。
//实时更新 - (void)update:(ccTime)dt { [self updateBackground:dt]; }
修改init函数
<span style="color:#362e2b">-(id) init { // always call "super" init // Apple recommends to re-assign "self" with the "super's" return value if( (self=[super init]) ) { CGSize winSize = [CCDirector sharedDirector].winSize; // 1) 创建 CCParallaxNode视差滚动节点 backgroundNode = [CCParallaxNode node]; [self addChild:backgroundNode z:-2]; // 2) 创建需要添加到CCParallaxNode视差滚动节点的精灵对象 mainBg = [CCSprite spriteWithFile:@"bg.png"]; // 3) 设置云彩的浮动速度 和背景速度 CGPoint bgSpeed = ccp(0.05, 0.05); // 4) 将精灵对象添加为CCParallaxNode视差滚动节点的子节点 [backgroundNode addChild:mainBg z:-1 parallaxRatio:bgSpeed positionOffset:ccp(200,winSize.height*0.5)]; [self scheduleUpdate];//</span><span style="color:#ff6666">调用update,注意了,这个调用方法很奇特</span><span style="color:#362e2b"> } return self; } </span>
源代码资源下载地址:http://download.csdn.net/detail/gshengod/6425997
作者:csdn博客 李博Garvin
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索cocos2d
, cocos2d x
, position
, 滚动
, 节点
, cocos2d x教程
, 屏幕
, cocos2d x json
, 内存管理cocos2d x
, Self
, 视差
, NSSize(CGSize)
, CCScene
CCSprite
cocos2dx 滚动条、cocos2dx 实例、cocos2dx 循环滚动、cocos2d 游戏开发实例、cocos2dx 滚动字幕,以便于您获取更多的相关知识。