Cocos2d-x学习之---2013年10月11日小记
2013-10-11 21:52
246 查看
1、关于安卓分辨率适配的一个折中方案
有的时候,在编写游戏的时候,想在不同分辨率的安卓手机上使用同一套背景资源图,就会出现黑边或者不能完全显示的问题。针对这些问题,网友和引擎都给出了解决方案,但是感觉好复杂,选择在学,觉得好难。前段时间在写自己的第一个小游戏的时候,想到了一个折中方案:
这是一段我自己写的代码,创建一个背景。背景资源的大小是854*480(横屏,即宽5854,高480)。这里我用到了两个方法:
对背景图进行拉伸,拉伸是按照获取到的屏幕宽高和资源的宽高的比例进行拉伸的,并不是简单的使用:
对资源进行拉伸。我觉得这样就应该可以一定程度上的根据手机大小进行拉伸或放缩了,并不会把资源的原有比例打破,不会使得显示扭曲。应该是个折中方案吧,应该有更好的方法,随着学习的加深再看吧。
2、新知道的
Cocos2d-x 2.1.5版本中(我一开始就是用这个版本,所以对之前的版本不了解)对于坐标系的转换问题,方法:
这样就直接实现了convertToGL()的转换。当然,关于GL坐标系,世界坐标系等之间的转换还是有点模糊的,还需要再理解。
关于精灵帧缓存:在游戏开始场景加载了,就可以在后面的场景直接使用,这在之前还不知道,现在知道了。
精灵帧缓存的加载与使用:
之前对这个不是很熟悉,现在用了几遍了,了解更多了。
精灵动画也可以用精灵帧缓存创建,之前虽然用了,但都不理解:
具体方法如上,通过:
方法可以获得一个精灵帧,再:
便将一个精灵帧加入到了animation中了。之前这样做过几次,但都不理解其中的缘由,现在理解清晰了些!
有的时候,在编写游戏的时候,想在不同分辨率的安卓手机上使用同一套背景资源图,就会出现黑边或者不能完全显示的问题。针对这些问题,网友和引擎都给出了解决方案,但是感觉好复杂,选择在学,觉得好难。前段时间在写自己的第一个小游戏的时候,想到了一个折中方案:
CCSize winSize=CCDirector::sharedDirector()->getWinSize(); CCSprite* background=CCSprite::create("Game/bg.png"); background->setScaleX(winSize.width/854); background->setScaleY(winSize.height/480);
这是一段我自己写的代码,创建一个背景。背景资源的大小是854*480(横屏,即宽5854,高480)。这里我用到了两个方法:
setScaleX() setScaleY()
对背景图进行拉伸,拉伸是按照获取到的屏幕宽高和资源的宽高的比例进行拉伸的,并不是简单的使用:
setScale()
对资源进行拉伸。我觉得这样就应该可以一定程度上的根据手机大小进行拉伸或放缩了,并不会把资源的原有比例打破,不会使得显示扭曲。应该是个折中方案吧,应该有更好的方法,随着学习的加深再看吧。
2、新知道的
Cocos2d-x 2.1.5版本中(我一开始就是用这个版本,所以对之前的版本不了解)对于坐标系的转换问题,方法:
CCTouch* pTouch;//假如是触摸传递过来的 CCPoint location=pTouch->getLocation();
这样就直接实现了convertToGL()的转换。当然,关于GL坐标系,世界坐标系等之间的转换还是有点模糊的,还需要再理解。
关于精灵帧缓存:在游戏开始场景加载了,就可以在后面的场景直接使用,这在之前还不知道,现在知道了。
精灵帧缓存的加载与使用:
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("bg/bg.plist","bg/bg.png"); //添加开始界面的背景图 CCSprite* startBG=CCSprite::createWithSpriteFrameName("background.png");
之前对这个不是很熟悉,现在用了几遍了,了解更多了。
精灵动画也可以用精灵帧缓存创建,之前虽然用了,但都不理解:
//精灵动画 CCArray* animatFrams=CCArray::createWithCapacity(4); char str[20]={0}; for (int i=1;i<5;i++) { sprintf(str,"game_loading%i.png",i); //CCLog(str); CCSpriteFrame* frame=CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(str); animatFrams->addObject(frame); } CCAnimation* loadingAnimation=CCAnimation::createWithSpriteFrames(animatFrams);
具体方法如上,通过:
CCSpriteFrameCache::sharedSpriteFrameCache->spriteFrameByName("缓存的帧的名字");
方法可以获得一个精灵帧,再:
CCAnimation* animation=CCAnimation::create(); animation->addSpriteFrame("精灵帧");
便将一个精灵帧加入到了animation中了。之前这样做过几次,但都不理解其中的缘由,现在理解清晰了些!
相关文章推荐
- Cocos2d-x学习之---2013年10月11日小记
- cocos2d-x 2.X demo学习笔记 9 ----MotionStreakTest 跟随条纹
- Cocos2d-x中的基础概念学习笔记 分类: cocos2d代码编写 2015-07-27 17:08 5人阅读 评论(0) 收藏
- cocos2d-x学习(10)----大鱼吃小鱼(二)
- Cocos2d-x 文件系统学习笔记
- Android电量测试工具battery-historian学习小记
- (2014.06.30-2014.07.6)七天的学习小记
- 我的Cocos2d-x学习笔记(一)Windows下程序如何开始运行
- Cocos2d从入门到睡觉:学习(一)
- [置顶] Matrix-Tree定理学习小记(详细介绍+证明)
- cocos2d-x - android 学习(集成NDK、配置开发环境)
- cocos2d-x学习知识点记录
- python logging 模块学习小记
- cocos2d-x 3.0学习-Android中集成Admob插页广告
- 学习小记 - Python爬虫 (1) 静态网页糗事百科的爬取
- cocos2d-x实例学习之常用类及其概要作用
- ExtJs 4.x 学习小记:使用FieldSet进行查询面板的布局
- cocos2d-x学习之(一)HelloWorld简介
- Cocos2d-x学习笔记(九)-------->Touch事件处理机制
- Cocos2d-X学习——Android移植,使用第三方库.so被删掉问题