cocos2dx中的实现地图卷动的两种方式
在游戏当中,实现地图卷动是最基本的功能,具体的实现的方法,大致有两类:
方法一:加载两张图片,轮流显示,
优点: 1.无论是地图上下卷动,还是左右卷动都可以
2.支持各种图片,(png,jpg...)
缺点: 1.前提是会创建两个背景精灵,稍微浪费内存,
2.且要求作为背景地图的图片需要大于窗口的大小
/*
*给游戏主战斗场景添加滚动的背景地图
*/
void GameMainScene::addbackground()
{
Texture2D* texture = TextureCache::getInstance()->getTextureForKey("groundLevel.jpg");
_spriteBgH = Sprite::createWithTexture(texture);
_spriteBgH->setAnchorPoint(Vec2(, ));
_spriteBgH->setPosition(, );
this->addChild(_spriteBgH); _lowPos = -_spriteBgH->getContentSize().height;//必须设置地图的下限,且必须使用contentsize(),不能用winSize
//_lowPos = -winSize.height;//错误 _spriteBgL = Sprite::createWithTexture(TextureCache::getInstance()->getTextureForKey("groundLevel.jpg"));
_spriteBgL->setAnchorPoint(Vec2(, ));
_spriteBgL->setPosition(, _lowPos);
this->addChild(_spriteBgL); this->scheduleUpdate();
} /*
*帧循环定时器,实现背景地图的卷动
*/
void GameMainScene::update(float dt)
{
_spriteBgH->setPositionY(_spriteBgH->getPositionY() - );//地图向下移动的速度
_spriteBgL->setPositionY(_spriteBgL->getPositionY() - );//每帧向下移动2个像素 if (_spriteBgL->getPositionY() < _lowPos)//判断下面的地图是否移出下限
{
_spriteBgL->setPositionY(_spriteBgH->getPositionY()+_spriteBgH->getContentSize().height);//如果移出,则直接设置到第一张地图的上面
}
if (_spriteBgH->getPositionY() < _lowPos)
{
_spriteBgH->setPositionY(_spriteBgL->getPositionY()+_spriteBgL->getContentSize().height);
}
}
方法二:使用Texture2D::TexParams,只需要一张图片,重复绘制,设置textureRect,即可
优点:1.只需要加载一张图片,更省内存
缺点:1.需要额外设置textureRect的大小,且支持的图片类型有限(支持部分jpg),png类型的未试过
/*
* 卷动背景地图
*/
void GameMainScene::addMoveBackground()
{
xScroll = ;
sprite1 = Sprite::create("groundLevel.jpg");//只需要创建一个背景精灵 sprite1->setAnchorPoint(Vec2(, ));
sprite1->setPosition(, );
addChild(sprite1);
Texture2D::TexParams texRepeat = { GL_LINEAR, GL_LINEAR, GL_CLAMP_TO_EDGE, GL_REPEAT };//这些openGL的参数不是对所有的图片类型都适合
sprite1->getTexture()->setTexParameters(texRepeat);//设置精灵渲染时获得纹理的方式为:重复渲染
schedule(schedule_selector(GameMainScene::moveBackground), 0.01f);
}
/*
* 通过改变y轴的坐标,实现TextureRect渲染矩形的区域的改变,实现地图卷动的视觉效果
*/
void GameMainScene::moveBackground(float dt)
{
sprite1->setTextureRect(Rect(, (xScroll-=), winSize.width, winSize.height+)); //y轴的坐标每帧都递减(向下卷动),如果是递增,则地图向上卷动,如果是x轴坐标变化,则地图左右移动
}
cocos2dx中的实现地图卷动的两种方式的更多相关文章
- Android中EditText显示明文与密文的两种方式
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 记录输入框显示.隐藏密码的简单布局以及实现方式. 效果图 代码分析 方式一 /**方式一:*/ private void sh ...
- 在eclipse中使用Maven建web工程的两种方式
Eclipse版本:Neon Release (4.6.0) Maven版本:3.3.9 第一种方式: 右键新建maven工程,勾选创建一个简单工程 填入信息,注意打包方式要改为war 点击完成,创建 ...
- js中构造函数的原型添加成员的两种方式
首先,js中给原型对象添加属性和方法. 方式一:对象的动态特效 给原型对象添加成员 语法:构造函数.prototype.方法名=function (){ } 方式二:替换原型对象(不是覆盖,而是替换, ...
- Android中界面实现全屏显示的两种方式
在开发android的应用当中,我们会遇到将一些界面设置为全屏显示的格式,有两种实现的方法.其一是在Java代码中实现,其二是在配置文件中实现. 1. 在Java代码中设置 super.onCreat ...
- 安卓中使用OkHttp发送数据请求的两种方式(同、异步的GET、POST) 示例-- Android基础
1.首先看一下最终效果的截图,看看是不是你想要的,这个年代大家都很忙,开门见山很重要! 简要说下,点击不同按钮可以实现通过不同的方式发送OkHttp请求,并返回数据,这里请求的是网页,所以返回的都是些 ...
- Linux中crontab下scp文件传输的两种方式
Linux下文件传输一般有两个命令scp.ftp(工具需要下载安装) 本文主要讲讲scp的文件传输脚本 1.scp ssh-keygen -t rsa免输入密码,传输 这里假设主机A 用来获到主机B的 ...
- Android中EditText显示明文与密码的两种方式
效果图如下所述: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and ...
- 页面中word文本框的编辑,两种方式
大致效果图(对其中的功能可以增减): 实现方法1:调用js <link href="../../platform/js/kindeditor/themes/default/defaul ...
- java中设置代理的两种方式
1 前言 有时候我们的程序中要提供可以使用代理访问网络,代理的方式包括http.https.ftp.socks代理.比如在IE浏览器设置代理. 那我们在我们的java程序中使用代理呢,有如下两种方式. ...
随机推荐
- ASP.Net 验证控件 RegularExpressionValidator
定义和用法 RegularExpressionValidator 控件用于验证输入值是否匹配指定的模式. 注释:除非浏览器不支持客户端验证或 EnableClientScript 属性被设置为 fal ...
- PowerDesigner 工具面板 association,inheritance,association link 不可用 解决方法
PowerDesigner 画E-R 图,关联,继承及关联实体连接不可用. 如图: 解决方法: tools->modeloptions->Notation 改为"E/R+Meri ...
- 10款很酷的HTML5动画和实用的HTML5应用
1.HTML5的画布花朵生成器可生成多种样式的花朵 HTML5非常流行,利用HTML5制作动画也非常方便,今天要分享一款利用HTML5 Canvas制作的花朵生成器,我们只需要在Canvas画布上点击 ...
- hibernate get VS load
1. 执行get方法:会立即加载对象 而执行load方法,若不适用该对象,则不会立即执行查询操作,而返回一个代理对象 get立即检索,load延迟检索 2. load方法可能 ...
- OpenGL第15,16,17讲小结
这三讲没有什么特别的感觉,15讲把纹理贴到3D字体上,16讲讲了雾的生成,17讲是通过以事先保存好的纹理贴图的字体来显示2D文字,这样子不用调用windows的字体,而是使用纹理中的字体.这样也在一定 ...
- virtualbox安装增强包及配置共享文件夹
因为需要在host及虚拟机间传输数据,想使用共享文件夹.但是单独设置了共享文件夹后在centos里找不到共享文件夹,看了下要安装增强包.好吧,顺 便也解决下鼠标切换的问题,省的老是按右CTL切换 ...
- The-ith-Element
Brief: the-ith-element,given a array A with n element , return the i-th element of A. A(n,i) this p ...
- java.util.TreeMap源码分析
TreeMap的实现基于红黑树,排列的顺序根据key的大小,或者在创建时提供的比较器,取决于使用哪个构造器. 对于,containsKey,get,put,remove操作,保证时间复杂度为log(n ...
- Tabbar视图切换,返回上一视图,添加item
前面有一篇博文iOS学习之Tab Bar的使用和视图切换 这是在AppDelegate里使用Tabbar,这样的程序打开就是TabbarView了,有时候我们需要给程序做一些帮助页面,或者登录页面,之 ...
- 《Apache之虚拟主机的配置》——RHEL6.3
1.安装httpd软件包: Yum install httpd 2.启动apache服务: [root@redhat Desktop]# /etc/init.d/httpd start Startin ...