採用双层背景。这样效果更好

.h

class BackgroundMove : public Layer
{
public:
BackgroundMove();
~BackgroundMove();
virtual bool init();
virtual void onEnterTransitionDidFinish(); //等进入场景之后在进行背景的移动
CREATE_FUNC(BackgroundMove); public:
void move(float dt);
private:
Sprite* m_background1;
Sprite* m_background2;
Sprite* m_background3;
Sprite* m_background4; enum
{
OFFSET = 3
};
};

背景无限滚动的方式有非常多,仅仅要不出现黑边就可以

.cpp

BackgroundMove::BackgroundMove() : m_background1(NULL), m_background2(NULL), m_background3(NULL), m_background4(NULL)
{ }
BackgroundMove::~BackgroundMove()
{
CC_SAFE_DELETE(m_background1);
CC_SAFE_DELETE(m_background2);
CC_SAFE_DELETE(m_background3);
CC_SAFE_DELETE(m_background4);
}
bool BackgroundMove::init()
{
bool bRect = false; do
{
if (!Layer::init())
return false; //载入背景图片
m_background1 = Sprite::createWithSpriteFrameName("backgroundTollgate2.png");
m_background1->setPosition(Point(0,0));
m_background1->setAnchorPoint(Vec2(0, 0)); this->addChild(m_background1,1); m_background2 = Sprite::createWithSpriteFrameName("backgroundTollgate2.png");
m_background2->setPosition(Point(0, 0));
m_background2->setAnchorPoint(Vec2(0, 0));
m_background2->setFlipY(true); this->addChild(m_background2,1); //载入背景图片
m_background3 = Sprite::createWithSpriteFrameName("backgroundTollgateThree.png");
m_background3->setPosition(Point(0, 0));
m_background3->setAnchorPoint(Vec2(0, 0)); this->addChild(m_background3, 0); m_background4 = Sprite::createWithSpriteFrameName("backgroundTollgateThree.png");
m_background4->setPosition(Point(0, 0));
m_background4->setAnchorPoint(Vec2(0, 0));
m_background4->setFlipY(true); this->addChild(m_background4, 0); CocosDenshion::SimpleAudioEngine::getInstance()->playBackgroundMusic("sound/BackgroundMusic.mp3", true); bRect = true;
} while (0); return bRect;
}
void BackgroundMove::onEnterTransitionDidFinish()
{
Layer::onEnterTransitionDidFinish();
this->schedule(SEL_SCHEDULE(&BackgroundMove::move), 0.01f);
} void BackgroundMove::move(float dt)
{
Vec2 origin = Director::getInstance()->getVisibleOrigin(); m_background1->setPositionY(m_background1->getPositionY() - OFFSET);
m_background2->setPositionY(m_background1->getPositionY() + m_background1->getContentSize().height);
if (m_background2->getPositionY() <= origin.y)
m_background1->setPositionY(0); m_background3->setPositionY(m_background3->getPositionY() + OFFSET);
m_background4->setPositionY(m_background3->getPositionY() - m_background3->getContentSize().height);
if (m_background4->getPositionY() >= origin.y)
m_background3->setPositionY(0); }

【cocos2d-x 3.7 飞机大战】 决战南海I (八) 背景移动的更多相关文章

  1. cocos2dx实现经典飞机大战

    游戏开始层 #ifndef __LayerGameStart_H__ #define __LayerGameStart_H__ #include "cocos2d.h" USING ...

  2. 【一】仿微信飞机大战cocos2d-x3.0rc1

    參考 [偶尔e网事] 的 [cocos2d-x入门实战]微信飞机大战  cocos2dx 2.0版本号,偶尔e网事他写的很具体,面面俱到,大家很有必要看下.能够通过以下链接跳转: cocos2d-x入 ...

  3. 微信5.0 Android版飞机大战破解无敌模式手记

    微信5.0 Android版飞机大战破解无敌模式手记 转载: http://www.blogjava.net/zh-weir/archive/2013/08/14/402821.html 微信5.0 ...

  4. 基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)

    最近接触过几个版本的cocos2dx,决定每个大变动的版本都尝试一下.本实例模仿微信5.0版本中的飞机大战游戏,如图: 一.工具 1.素材:飞机大战的素材(图片.声音等)来自于网络 2.引擎:coco ...

  5. Cocos2d-x飞机大战教程笔记

    咳咳~跟着大神的教程学做Cocos2d-x的飞机大战...鉴于我是那种跟着教程都会出非常多错的人,所以还是一路跟着做些笔记比較好.并且因为是用课余时间,所以仅仅能断断续续地做,写下来也好让自己别忘记~ ...

  6. js实例--飞机大战

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...

  7. 用Javascript模拟微信飞机大战游戏

    最近微信的飞机大战非常流行,下载量非常高. 利用JS进行模拟制作了一个简单的飞机大战[此源码有很多地方可以进行重构和优化] [此游戏中没有使用HTML5 任何浏览器都可以运行]. 效果图: 原理:利用 ...

  8. 飞机大战编写以及Java的面向对象总结

    面向对象课程完结即可编写一个简单的飞机大战程序.我觉得我需要总结一下 飞机大战中类的设计: 父类:FlyingObject(抽象类) 接口:Award .Enemy 子类:Hero.Bullet.Ai ...

  9. 用DIV+Css+Jquery 实现的旧版微信飞机大战。

    用jquery 实现的旧版微信飞机大战. 以前一直都是做后台和业务逻辑,前端很少去做, 现在个小游戏. 方向键控制方向,Ctrl 键 放炸弹(当然你的有炸弹,哈哈)! 主要都是用div+Css实现的, ...

随机推荐

  1. go的接口

    一.接口定义 接口类型 在讲基础数据类型时,我们曾提了一下 interface 数据类型,这个数据类型就是接口类型 什么是接口 Go 语言不是"传统"的面向对象的编程语言:它里面没 ...

  2. Integer应该用==还是equals

    问题引出:“Integer应该用==还是equals” 讨论这个问题之前我们先放一段代码 public static void main(String[] args) { Integer a1 = 2 ...

  3. 【POJ2248、LOJ#10021】 Addition Chains

    事先预警:由于我太蒻了,本做法只能在POJ.LOJ等小数据(N<=100)平台上通过,在UVa(洛谷)上大数据并不能通过 戳我获得更好的观看效果 本题不用看,爆搜就是了,但是纯爆搜显然会爆时间, ...

  4. Hbuilder 移动app

    ==========代码行快捷方法========== div*4div[class=""]*4div[id=""]*4 tr*4tr{<div>w ...

  5. JDBC的详细使用

    1.首先说一下需要用到的工具: ①我这里用的数据库是MySql5.6 ,MySql6.0开始被Oracle收购需要付费了,6.0以下版本免费. ②去Maven仓库下载JDBC的jar包 Maven仓库 ...

  6. 2B课程笔记分享_StudyJams_2017

    课程2B-创建交互式应用(下) 概述 课程2B的内容主要包括:使用变量来更新欲显示在屏幕上的内容,为按钮添加事件响应(联系XML属性与Java方法)逻辑等. 后续的课程会逐步深入地讲解使用Java开发 ...

  7. js-学习方法

    1:多实践,找例子,看别人是如何实现的,然后自己去实现,然后谷歌百度,最后总结. 2:如何读js英文书:不是自己不会读,是被吓着了.自己吓自己. 英文不好的话,先不要挨着排的从头到尾读. 应该首先读目 ...

  8. javascript匿名函数及闭包深入理解及应用

    1.匿名函数 函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没有函数名的函数. 1.1 函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式 第一种: ...

  9. Node.js标准的回调函数

    Node.js标准的回调函数:第一个参数代表错误信息,第二个参数代表结果. function (err, data) 当正常读取时,err参数为null,data参数为读取到的String.当读取发生 ...

  10. PAT_A1135#Is It A Red-Black Tree

    Source: PAT A1135 Is It A Red-Black Tree (30 分) Description: There is a kind of balanced binary sear ...