cocos2dx 3.x(一张背景图利用定时器实现循环轮播)

时间:2022-09-12 20:09:14
 //
// MainScene.hpp
// helloworld
//
// Created by apple on 16/9/19.
//
// #ifndef MainScene_hpp
#define MainScene_hpp #include <stdio.h>
#include "cocos2d.h"
using namespace cocos2d;
//定义一个场景类 class MainScene : public cocos2d::Layer{
private:
// 成员变量(私有的)
cocos2d::Sprite *sprite;//定义一个精灵成员变量
cocos2d::Sprite *sprite2; public:
virtual bool init(); // 虚函数,返回值为布尔类型,没有函数
// static CCScene * scene();
static cocos2d::Scene* createScene();//static是一个类方法返回场景 void movebd(float times);//注册自定义定时调用方法函数 CREATE_FUNC(MainScene);
}; #endif /* MainScene_hpp */
 //
// MainScene.cpp
// helloworld
//
// Created by apple on 16/9/19.
//
// #include "MainScene.hpp"
Scene * MainScene::createScene()
{
auto scene = Scene::create();
//创建层
MainScene *layer = MainScene::create();
scene->addChild(layer);
return scene;
}
bool MainScene::init(){
if (!Layer::init()) {
return false;
} //定义初始位置
sprite = Sprite::create("Cow100_background.png");
sprite ->setPosition(, );
sprite->setAnchorPoint(Vec2(, ));//设置精灵的锚点
sprite ->setScale(2.4f);//放大精灵尺寸2.4倍
// sprite ->setContentSize(Size(200, 100));
this->addChild(sprite);// 添加到层 sprite2 = Sprite::create("Cow100_background.png");//与上面背景精灵一样的,只是坐标点不一样
sprite2 ->setPosition(, );//两张图并行紧贴一起,下面调用定时器实现两张图一起循环移动
sprite2->setAnchorPoint(Vec2(, ));
sprite2 ->setScale(2.4f);
// sprite2 ->setContentSize(Size(200, 100));
this->addChild(sprite2);// 添加到层 // this->schedule(schedule_selector(MainScene::movebd));
schedule(schedule_selector(MainScene::movebd), 0.05);// 创建自定义定时器0.05秒调用一次 return true;
} void MainScene::movebd(float times)
{ // 获取到当前精灵的坐标,X轴-1,Y轴不-
sprite->setPosition(Point(sprite->getPositionX()-,sprite->getPositionY()));
sprite2->setPosition(Point(sprite2->getPositionX()-,sprite2->getPositionY()));
if(sprite->getPositionX() == -){//这里是根据自己的屏幕尺寸设定的,判断精灵X轴坐标的移动长度,也就是背景的长度
sprite ->setPosition(, );//重置背景图坐标点 }
if(sprite2->getPositionX() == -){//这是第二张背景图
sprite2 ->setPosition(, );
} }