最近项目中用到了cocos2dx来开发一个基于陀螺仪的demo,忙了半个星期,一边学习一边开发,总算搞了出来。这里备份下开发中学习到的一些cocos2dx知识。
CONTENTS
如何适配不同分辨率下的坐标?
作者得到的需求是同一套UI下根据不同的分辨率设置不同的坐标。由于时间紧迫,作者就自己实现了一套坐标转换代码。备份如下:
自己实现的:
.h文件:
//coordinate utils class CU { private: /************************************************************************/ /* 0: iphone 4 1: iphone 5 */ /************************************************************************/ static cocos2d::CCSize visibleSize; static cocos2d::CCPoint orignPoint; static int currTarget; static cocos2d::CCPoint getPoint2(int targetid1, cocos2d::CCPoint p1, int targetid2, cocos2d::CCPoint p2); public: static void setSize(cocos2d::CCSize size, cocos2d::CCPoint orp); static cocos2d::CCPoint p(int id); /* ponit select */ static cocos2d::CCPoint ltp(int id); };
.cpp文件:
int CU::currTarget = 0; cocos2d::CCPoint CU::orignPoint = ccp(0,0); cocos2d::CCSize CU::visibleSize = CCSizeMake(0,0); cocos2d::CCPoint CU::getPoint2( int targetid1, cocos2d::CCPoint p1, int targetid2, cocos2d::CCPoint p2 ) { if (CU::currTarget == targetid1) { return p1; } if (CU::currTarget == targetid2) { return p2; } return ccp(0,0); } /* 根据不同的size设置获取坐标组合,这里简单的以高度来判断 */ void CU::setSize( cocos2d::CCSize size, cocos2d::CCPoint orp ) { CU::orignPoint = orp; CU::visibleSize = size; if (CU::visibleSize.height > 960) { CU::currTarget = 1; }else { CU::currTarget = 0; } } /* id指要获取的UI坐标的ID */ /* 比如10:代表按钮A */ cocos2d::CCPoint CU::p( int id ) { cocos2d::CCPoint lt = ltp(id); return( ccp( (lt.x + CU::orignPoint.x) , (CU::orignPoint.y + CU::visibleSize.height - lt.y) ) ); } cocos2d::CCPoint CU::ltp( int id ) { switch (id) {/* 此处坐标的基准点都是屏幕的左上角,便于美工给坐标 */ case 10 : return getPoint2(0,ccp(38,24),1,ccp(38,39));//按钮A的坐标 case 11 : return getPoint2(0,ccp(260,243),1,ccp(260,258));//按钮B的坐标 default: return ccp(0,0); } }
使用方式:
//初始化 //初始化其实可以不同初始化,可以通过单例或其他方式来隐藏掉初始化代码,但时间较紧,就直接这样写了。 CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin(); CU::setSize(visibleSize, origin); //使用 sprite->setPosition(CU::p(10));//sprite使用ID为10的坐标
其他网络资源:
http://www.ityran.com/archives/4809
备注:
由于时间紧张,作者没有详细的设计CU类,其仅仅能完成功能。后续需要优化。
发表评论