首页 > 代码库 > cocos2dx 3.x(一张背景图实现循环轮播)

cocos2dx 3.x(一张背景图实现循环轮播)

 1 //
 2 //  MainScene.hpp
 3 //  helloworld
 4 //
 5 //  Created by apple on 16/9/19.
 6 //
 7 //
 8 
 9 #ifndef MainScene_hpp
10 #define MainScene_hpp
11 
12 #include <stdio.h>
13 #include "cocos2d.h"
14 using namespace cocos2d;
15 //定义一个场景类
16 
17 class MainScene : public cocos2d::Layer{
18 private:
19     // 成员变量(私有的)
20     cocos2d::Sprite *sprite;//定义一个精灵成员变量
21     cocos2d::Sprite *sprite2;
22     
23 public:
24     virtual bool init(); // 虚函数,返回值为布尔类型,没有函数
25 //    static CCScene * scene();
26     static cocos2d::Scene* createScene();//static是一个类方法返回场景
27     
28     void movebd(float times);//注册自定义定时调用方法函数
29     
30     CREATE_FUNC(MainScene);
31 };
32 
33 
34 #endif /* MainScene_hpp */

 

 

 

 1 //
 2 //  MainScene.cpp
 3 //  helloworld
 4 //
 5 //  Created by apple on 16/9/19.
 6 //
 7 //
 8 
 9 #include "MainScene.hpp"
10 Scene * MainScene::createScene()
11 {
12      auto scene = Scene::create();
13     //创建层
14     MainScene *layer = MainScene::create();
15     scene->addChild(layer);
16     return scene;
17 }
18 bool MainScene::init(){
19     if (!Layer::init()) {
20         return false;
21     }
22     
23     
24     
25     //定义初始位置
26     sprite = Sprite::create("Cow100_background.png");
27     sprite ->setPosition(0, 25);
28     sprite->setAnchorPoint(Vec2(0, 0));//设置精灵的锚点
29     sprite ->setScale(2.4f);//放大精灵尺寸2.4倍
30     //    sprite ->setContentSize(Size(200, 100));
31     this->addChild(sprite);// 添加到层
32     
33     
34     sprite2 = Sprite::create("Cow100_background.png");//与上面背景精灵一样的,只是坐标点不一样
35     sprite2 ->setPosition(480, 25);//两张图并行紧贴一起,下面调用定时器实现两张图一起循环移动
36     sprite2->setAnchorPoint(Vec2(0, 0));
37     sprite2 ->setScale(2.4f);
38     //    sprite2 ->setContentSize(Size(200, 100));
39     this->addChild(sprite2);// 添加到层
40 
41     
42     
43     //    this->schedule(schedule_selector(MainScene::movebd));
44     schedule(schedule_selector(MainScene::movebd), 0.05);// 创建自定义定时器0.05秒调用一次
45     
46     return true;
47 }
48 
49 
50 void MainScene::movebd(float times)
51 {
52     
53     // 获取到当前精灵的坐标,X轴-1,Y轴不-
54     sprite->setPosition(Point(sprite->getPositionX()-1,sprite->getPositionY()));
55     sprite2->setPosition(Point(sprite2->getPositionX()-1,sprite2->getPositionY()));
56     if(sprite->getPositionX() == -480){//这里是根据自己的屏幕尺寸设定的,判断精灵X轴坐标的移动长度,也就是背景的长度
57         sprite ->setPosition(480, 25);//重置背景图坐标点
58         
59     }
60     if(sprite2->getPositionX() == -480){//这是第二张背景图
61         sprite2 ->setPosition(480, 25);
62     }
63     
64     
65 }

 

cocos2dx 3.x(一张背景图实现循环轮播)