zoukankan      html  css  js  c++  java
  • cocos2d(背景图片循环滚动)

    背景图片循环滚动 使用action 实现的:

    主要有两个背景图片交替循环滚动:我选的两个背景图片的宽度都是1024的 ,所以定义了#define BGIMG_WIDTH 1024

    代码如下:

    在HelloWorld.h的头文件中声明两个背景图片精灵

    #import "cocos2d.h"
    
    // HelloWorldLayer
    @interface HelloWorldLayer : CCLayer 
    {
        CCSprite *bagSprite1;
        CCSprite *bagSprite2;
    }
    

    在.m文件中实现的部分代码:

    #import "HelloWorldLayer.h"
    
    #import "AppDelegate.h"
    
    #pragma mark - HelloWorldLayer
    
    #define BGIMG_WIDTH 1024
    
    
    // HelloWorldLayer implementation
    @implementation HelloWorldLayer
    
    
    -(id) init
    {
    	
    	if( (self=[super init]) ) {
            CGSize winSize=[CCDirector sharedDirector].winSize;
                    
            bagSprite1=[CCSprite spriteWithFile:@"bag1.jpg"];
            bagSprite2=[CCSprite spriteWithFile:@"bag2.jpg"];
            
            bagSprite1.anchorPoint=ccp(0,0);
            bagSprite2.anchorPoint=ccp(0,0);
            [bagSprite1 setScaleY:winSize.height/bagSprite1.textureRect.size.height];   //修改背景图片的高度
            [bagSprite2 setScaleY:winSize.height/bagSprite2.textureRect.size.height];
            bagSprite1.position=ccp(0,0);
            bagSprite2.position=ccp(-BGIMG_WIDTH,0);    //第二张图片的起始位置在第一张的左边
            //添加精灵
            [self addChild:bagSprite1 z:1];
            [self addChild:bagSprite2 z:1];
            
            CCMoveBy *bagSprite1MoveBy=[CCMoveBy actionWithDuration:6.0f position:ccp(BGIMG_WIDTH,0)];
            CCMoveBy *bagSprite2MoveBy=[CCMoveBy actionWithDuration:6.0f position:ccp(BGIMG_WIDTH,0)];
            CCCallBlock *bagSprite1Finish=[CCCallBlock actionWithBlock:^(void){[self actionFinishedWithSprite:bagSprite1];}];
            CCCallBlock *bagSprite2Finish=[CCCallBlock actionWithBlock:^(void){[self actionFinishedWithSprite:bagSprite2];}];
            
            [bagSprite1 runAction:[CCSequence actions:bagSprite1MoveBy,bagSprite1Finish,nil]];
            [bagSprite2 runAction:[CCSequence actions:bagSprite2MoveBy,bagSprite2Finish,nil]];
            
            
    	}
    	return self;
    }
    -(void)actionFinishedWithSprite:(CCSprite*)theSprite{
        if(theSprite.position.x==0){
            CCMoveBy *bagSpriteMoveBy=[CCMoveBy actionWithDuration:6.0f position:ccp(BGIMG_WIDTH,0)];
            CCCallBlock *bagSpriteFinish=[CCCallBlock actionWithBlock:^(void){[self actionFinishedWithSprite:theSprite];}];
            [theSprite runAction:[CCSequence actions:bagSpriteMoveBy,bagSpriteFinish,nil]];
        }else if(theSprite.position.x==BGIMG_WIDTH){
            [theSprite setPosition:ccp(-BGIMG_WIDTH,0)];
            CCMoveBy *bagSpriteMoveBy=[CCMoveBy actionWithDuration:6.0f position:ccp(BGIMG_WIDTH,0)];
            CCCallBlock *bagSpriteFinish=[CCCallBlock actionWithBlock:^(void){[self actionFinishedWithSprite:theSprite];}];
            [theSprite runAction:[CCSequence actions:bagSpriteMoveBy,bagSpriteFinish,nil]];
        }
    }
    
    
    @end
    

    运行结果:










  • 相关阅读:
    第五:Nutanix的Prism管理手册
    第四:Nutanix的开关机步骤
    Exchange2016DR(异地容灾)环境:重要
    博客的开始
    sql查询日期型内容+oracle
    expdp导出oracle数据库中指定表空间下数据
    oracle 锁表的解决sql语句(pl/sql 删除表中数据锁表)
    centos 关闭防火墙+开启ssh服务
    显示桌面 我的电脑
    查看电脑连接过的wifi—通过命令行
  • 原文地址:https://www.cnblogs.com/lixingle/p/3707694.html
Copyright © 2011-2022 走看看