【Cocosd2d实例教程六】Cocos2d实现屏幕背景的自动滚动

(转载请注明出处:http://blog.csdn.net/buptgshengod

1.介绍

   
实现屏幕背景的自动滚动是游戏常遇到的功能,这样我们就不用绘制很长的背景图片,只要设计一张就可以,省时省力。这章将实现这个功能,并把源代码贡献给大家,废话不多说,先上个图,其实是动态的,只是截动态图有点麻烦。

2.代码实现部分

     屏幕的动态滚动主要是一个刷新机制的问题。

第一步,还是进入HelloWorldLayer.h中定义一些节点的对象

#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;//这个节点是实现滚动的关键节点

CCSprite *mainBg; CCSpriteBatchNode *batchNode; }// returns a CCScene that contains the HelloWorldLayer as the only child+(CCScene *) scene;@end
第二步当然是来到HelloWorldLayer.m中。

首先来写一下刷新的函数

- (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函数

-(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];//调用update,注意了,这个调用方法很奇特
        	}
	return self;
}

源代码资源下载地址

时间: 2024-10-03 13:09:53

【Cocosd2d实例教程六】Cocos2d实现屏幕背景的自动滚动的相关文章

Cocosd2d实例教程(六) Cocos2d实现屏幕背景的自动滚动

1.介绍 实现屏幕背景的自动滚动是游戏常遇到的功能,这样我们就不用绘制很长的背景图片,只要设计一张就可以,省时省力.这章将实现这个功能,并把源代码贡献给大家,废话不多说,先上个图,其实是动态的,只是截动态图有点麻烦. 2.代码实现部分 屏幕的动态滚动主要是一个刷新机制的问题. 第一步,还是进入HelloWorldLayer.h中定义一些节点的对象 <span style="color:#362e2b">#import <GameKit/GameKit.h> //

Cocosd2d实例教程(五) Cocos2d添加虚拟摇杆控制器

1.介绍 cocos2d为我们提供了好用的摇杆控制器,主要是对ZJoystick.h和ZJoystick.m的添加,实现了如下图的功能.通过摇杆可以控制图中精灵的移动.(但是还有一个技术性问题亟待解决,就是精灵移动后会有一个重影留在初始位置) 2.摇杆的实现 1) 将资源中的ZJoystick文件夹加到工程中(页面下方提供下载地址), 精灵的添加以及移动前面已经讲了,不知道的同学可以看教程四.工程名字为ControlWalking 2)修改HelloWorldLayer.h文件.加入一些需要的节

Cocosd2d实例教程(三) Cocos2d瓦片地图的导入

上一节讲了如何使用Tiled制作瓦片地图,下面讲一下如何将地图导入游戏中. 第一步:将生成的文件导入resource中,如图,分别为地图和图片集 第二步:在HelloWorldLayer.h中修改代码,有一定基础的人还是比较好理解的. #import <GameKit/GameKit.h> // When you import this file, you import all the cocos2d classes #import "cocos2d.h" // Hello

【Cocosd2d实例教程七】Cocos2d实现超炫的粒子效果!!

(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.介绍      你想拥有炫酷的效果么,你想让你的应用亮瞎别人的狗眼么!!不要急,这里告诉大家怎么实现绚丽的粒子效果! 先上个图,点击界面产生火焰!(依旧是动态的,只是作者懒得截动态图) 2.实现部分      1)软件的安装     我们通过软件ParticleDesigner设计如图中的效果,在下面会给出这款软件的破解版!使用起来还是很简单的,安装了之后,打开进入如下界面,      任选一款双击可以进

【Cocosd2d实例教程五】Cocos2d添加虚拟摇杆控制器

(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.介绍     cocos2d为我们提供了好用的摇杆控制器,主要是对ZJoystick.h和ZJoystick.m的添加,实现了如下图的功能.通过摇杆可以控制图中精灵的移动.(但是还有一个技术性问题亟待解决,就是精灵移动后会有一个重影留在初始位置) 2.摇杆的实现    1) 将资源中的ZJoystick文件夹加到工程中(页面下方提供下载地址), 精灵的添加以及移动前面已经讲了,不知道的同学可以看教程四.工

【Cocosd2d实例教程八】Cocos2d实现碰撞检测(含实例)

(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.介绍      说到碰撞检测,最简单直观的例子就是超级玛丽里的吃金币功能,当两个物体碰撞在一起产生一定的效果.下面上图介绍下这章的实例.当机器人a走到机器人b的身上时,机器人b消失. 2.具体实现方式     其实思路很简单,就是规定每个精灵有他们自己的一个作用范围,当两个精灵的作用范围重叠时,一个精灵的不可见就可以了.      关于摇杆器控制精灵移动这些在前面的章节讲过了,就不多说.      首先在

Cocosd2d实例教程(八) Cocos2d实现碰撞检测(含实例)

1.介绍 说到碰撞检测,最简单直观的例子就是超级玛丽里的吃金币功能,当两个物体碰撞在一起产生一定的效果.下面上图介绍下这章的实例.当机器人a走到机器人b的身上时,机器人b消失. 2.具体实现方式 其实思路很简单,就是规定每个精灵有他们自己的一个作用范围,当两个精灵的作用范围重叠时,一个精灵的不可见就可以了. 关于摇杆器控制精灵移动这些在前面的章节讲过了,就不多说. 返回栏目页:http://www.bianceng.cnhttp://www.bianceng.cn/OS/extra/

Cocosd2d实例教程(四) Cocos2d实现人物原地走动

1.首先安装TexturePacker 1)TexturePacker介绍 这是一款图片集合软件,生成.plist文件,是一种动画效果.将png图片人物走动的不同瞬间传进去,之后publish,将生成一个.plist和一个.png文件.如图 2) 下载地址 破解版的下载下载地址:http://download.csdn.net/detail/gshengod/6406389 2.第二步,代码部分 1)切换到HelloWorldLayer.m的init方法 将上面讲的资源添加到resouce中,同

【Cocosd2d实例教程三】Cocos2d瓦片地图的导入

(转载请注明出处:http://blog.csdn.net/buptgshengod)    上一节讲了如何使用Tiled制作瓦片地图,下面讲一下如何将地图导入游戏中.     第一步:将生成的文件导入resource中,如图,分别为地图和图片集     第二步:在HelloWorldLayer.h中修改代码,有一定基础的人还是比较好理解的. #import <GameKit/GameKit.h> // When you import this file, you import all the