加载进度条和滚动背景

最后更新于:2022-04-01 20:15:12

我们之前学习了打飞机的游戏,但是我们可能觉得枯燥的画面很不舒服,现在我们就来学习进度条的加载和背景的滚动show 1.首先来看看loadingbar的动态加载 1)首先在哎loading.h文件中加入如下的属性 ~~~ CCProgressTimer *progress; float progressInterval; ~~~ 2)。m文件的实现如下 ~~~ -(id) init { if ( ( self = [ super init] ) ) { winSize = [[CCDirector sharedDirector] winSize]; winCenter = ccp(winSize.width / 2, winSize.height / 2); progress = [CCProgressTimer progressWithSprite:[CCSprite spriteWithFile:@"progressbar.png"]]; [progress setPercentage:0]; //设置bar的初始化为0 progress.scale = 0.5f; //缩小一半 progress.midpoint = ccp(0, 0.5); //进度条动画的起始位置,默认是图片的中点。如果想从头开始加载,必须改成(0,y); progress.barChangeRate = ccp(1, 0); //沿x轴方向加载,y轴不变 progress.type = kCCProgressTimerTypeBar; [progress setPosition:winCenter]; [self addChild:progress]; CCLabelTTF *loadingText = [CCLabelTTF labelWithString:@"Loading..." fontName:@"Arial" fontSize:20]; loadingText.position = ccpAdd(winCenter, ccp(0,50)); [self addChild:loadingText]; } return self; } ~~~ 3)更新progressUpdate方法 ~~~ -(void) progressUpdate { if (--assetCount) { [progress setPercentage:(100.0f - (progressInterval *assetCount))]; //留着后面显示进度条用 } else { CCProgressFromTo *ac = [CCProgressFromTo actionWithDuration:0.5 from:progress.percentage to:100]; CCCallBlock *callBack = [CCCallBlock actionWithBlock:^(){ [self loadingComplete]; CCLOG(@"All done loading assets."); }]; id action = [CCSequence actions:ac,callBack, nil]; [progress runAction:action]; } } ~~~ 2.使用CCFollow 和CCParallaxNode 动作添加滚动背景 1)Helloworld.h中加入如下的属性 ~~~ //添加滚动背景 CCParallaxNode *_backgroundNode; int _totalSeconds; //进行的游戏时长 ~~~ 2).m中更新 updatebackground方法,我们相应的也导入了api: ~~~ #import "CCParallaxNode-Extras.h" ~~~ ~~~ #pragma mark 背景的更新方法 - (void)updateBackground:(ccTime)dt { CCSprite *sprite; int index = 0; CCARRAY_FOREACH([_backgroundNode children],sprite) { CGPoint pt = [_backgroundNode convertToWorldSpace:sprite.position]; // CCLOG(@"pt.x = %f, pt.y = %f",pt.x, pt.y); if ( pt.y <= -sprite.contentSize.height) { CCLOG(@"==============="); [_backgroundNode incrementOffset:ccp(0,(sprite.contentSize.height - offset) * 2.0f) forChild:sprite]; } index++; } } ~~~ 3.init方法的修改 ~~~ //16.添加连续滚动背景 _backgroundNode = [CCParallaxNode node]; [self addChild:_backgroundNode z:-1]; CGPoint ratio = ccp(1.0,0.5); CCSprite *bgSprite1 = [CCSprite spriteWithSpriteFrameName:@"background_1.jpg"]; [[bgSprite1 texture] setAliasTexParameters]; bgSprite1.anchorPoint = ccp(0,0); [_backgroundNode addChild:bgSprite1 z:1 parallaxRatio:ratio positionOffset:ccp(0,0)]; CCSprite *bgSprite2 = [CCSprite spriteWithSpriteFrameName:@"background_2.jpg"]; [[bgSprite2 texture] setAliasTexParameters]; bgSprite2.anchorPoint = ccp(0,0); [_backgroundNode addChild:bgSprite2 z:1 parallaxRatio:ratio positionOffset:ccp(0,winSize.height - offset)]; //一定要注意,之前的背景设置要取消掉 } return self; } ~~~ 4.onEnter方法的修改 ~~~ - (void)onEnter { [super onEnter]; //一定要注意添加此方法,否则将停留在开始界面 CGSize winSize = [[CCDirector sharedDirector] winSize]; [CCMenuItemFont setFontSize:20]; [CCMenuItemFont setFontName:@"Arial"]; CCMenuItemFont *startItem = [CCMenuItemFont itemWithString:@"开始游戏" block:^(id sender) { _isGameStarted = YES; CCMenuItem *item = (CCMenuItemFont*)sender; item.visible = NO; //6.spawn enemy after 1.0 sec [self performSelector:@selector(spawnEnemy) withObject:nil afterDelay:1.0f]; //7.enable accelerometer self.isAccelerometerEnabled = YES; //9.enable touch self.isTouchEnabled = YES; //8.添加开始连续滚动背景的代码 const int MAX_LEVEL_WIDTH = 320; const int MAX_LEVEL_HEIGHT = 480 * 100; CCSprite *hiddenPlayerSprite = [CCSprite spriteWithSpriteFrameName:@"hero_1.png"]; hiddenPlayerSprite.position = ccp(winSize.width / 2, winSize.height / 2); [self addChild:hiddenPlayerSprite z:-4 tag:1024]; _totalSeconds = 60; id move = [CCMoveBy actionWithDuration:_totalSeconds position:ccp(0,MAX_LEVEL_HEIGHT)]; [hiddenPlayerSprite runAction:move]; //让背景开始滚动 [_backgroundNode runAction:[CCFollow actionWithTarget:hiddenPlayerSprite worldBoundary:CGRectMake(0, 0, MAX_LEVEL_WIDTH, MAX_LEVEL_HEIGHT)]]; }]; startItem.position = ccp(winSize.width / 2, -winSize.height / 2); _startGameMenu = [CCMenu menuWithItems:startItem, nil]; _startGameMenu.position = CGPointZero; [self addChild:_startGameMenu]; //7 基本动作 从原来的位置移动到新的位置 id moveBy = [CCMoveBy actionWithDuration:1.0 position:ccp(0, winSize.height)]; //位置的移动 [_startGameMenu runAction:moveBy]; //开始移动 //8 和位置有关的基本动作 //1 CCActionManager [[[CCDirector sharedDirector] actionManager ] pauseTarget:_startGameMenu];//暂停 [self schedule:@selector(resumeStartMenuAction:) interval:1.0]; //等待十秒之后才能开始移动 //2CCAction 抽象类,几乎所有的类都继承该类 //3.CCFiniteTimeAction 该类为有限时间动作,包含CCActionInstant 瞬时动作 和CCActionInterval 区间动作,他们包含了很多不同的动作 //4 CCRepaeatForever 无限重复的动作 //5跟随节点的动作CCFollow .可以替代Camera //6 CCSpeed 更还节点动作的速度。 // 7CCOrbitCamera 继承与CCActionCamera 。使用球坐标系围绕屏幕中心旋转摄像机的视角 } ~~~
';