1、改变窗口的大小
在AppDelegate.cpp
auto director = Director::getInstance();
auto glview = director->getOpenGLView();
if(!glview)
{
glview = GLView::create("My Game");
glview->setFrameSize(320,480); //设置窗口的大小
director->setOpenGLView(glview);
}
2、当加载背景图片等较大的图片时,使用Texture2D::setDefaultAlphaPixelFormat(Texture2D::PixelFormat::RGB565);16位的像素格式来加载。
3、事件监听(在init加入)
//事件监听
auto listener=EventListenerTouchOneByOne::create();
listener->setSwallowTouches(true);
listener->onTouchBegan=CC_CALLBACK_2(CLock::onTouchBegan,this);
listener->onTouchMoved=CC_CALLBACK_2(CLock::onTouchMoved,this);
listener->onTouchEnded=CC_CALLBACK_2(CLock::onTouchEnded,this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener,this); //_eventDispatcher已经在Node节点的类定义了,不用自己定义
//重写事件处理函数
bool CLock::onTouchBegan(Touch *touch, Event *unused_event)
{
return true;
}
void CLock::onTouchMoved(Touch *touch, Event *unused_event)
{
}
void CLock::onTouchEnded(Touch *touch, Event *unused_event)
{
}
4、移动背景时,设置防止超出图片的边界
Point boundLayerPos(Point newPos)
{
Point retval=newPos;
retval.x = MIN(retval.x, 0);
retval.x = MAX(retval.x, -m_pBackgroung->getContentSize().width+m_winSize.width);
retval.y = this->getPosition().y;
return retval;
}
void panForTranslation(Point translation)
{
Point newPos=this->getPosition()+translation;
this->setPosition(this->boundLayerPos(newPos));
}
5、获得随机的颜色值
Color4F(CCRANDOM_0_1(), CCRANDOM_0_1(), CCRANDOM_0_1(), 1);
6、获得随机数
- //产生随机数
- //CCRANDOM_0_1()获取一个0-1之间的float类型数,包括0和1
- //通过CCRANDOM_0_1()获得的随机数其实并不是随机的,要想获取接近真实的随机数需要设置一个种子
- //比较常用的方法是以当前时间为种子,在cocos2d-x中提供了获取时间的方法,而且获取的时间更精确
- //cc_timeval是个结构体,里边有俩个变量,一个是以秒为单位的,一个是以微妙为单位的
- cc_timeval tv;
- CCTime::gettimeofdayCocos2d(&tv,NULL);
- //都转化为毫秒
- unsigned long reed = tv.tv_sec*1000+tv.tv_usec/1000;
- //srand()中传入一个随机数种子
- srand(reed);
- this->schedule(schedule_selector(HelloWorld::random),1.0);
- bRet = true;
- } while (0);
- return bRet;
- }
- //如果要获得a~b之间的一个随机数,则应该是CCRANDOM_0_1*(b-a)+a,传入的参数就是a和b
- int HelloWorld::getRandomNumber(int start,int end)
- {
- return CCRANDOM_0_1()*(end-start)+start;
- }
//获取系统时间
//time_t是long类型,精确到秒,通过time()函数可以获得当前时间和1900年1月1日零点时间的差
time_t tt;
time(&tt);
struct tm *now;
//获取本地时间
now=localtime(&tt);
int year=now->tm_year+1900;
log("%d",year);
int month=now->tm_mon+1;
log("%d",month);
int day=now->tm_mday;
log("%d",day);
int hour=now->tm_hour;//24小时制
log("%d",hour);
int min=now->tm_min;
log("%d",min);
int second=now->tm_sec;
log("%d",second);
8、画基本的图形方法
.h
public:
void draw(Renderer *renderer, const kmMat4 &transform, bool transformUpdated);
protected:
void onDraw(const kmMat4 &transform, bool transformUpdated);
CustomCommand _customCommand;
.cpp
void CLock::draw(Renderer *renderer, const kmMat4 &transform, bool transformUpdated)
{
_customCommand.init(_globalZOrder);
_customCommand.func = CC_CALLBACK_0(CLock::onDraw, this, transform, transformUpdated);
renderer->addCommand(&_customCommand);
}
void CLock::onDraw(const kmMat4 &transform, bool transformUpdated)
{
DrawPrimitives::drawCircle(Point(m_winSize.width/2,m_winSize.height/2),130,190,100,false);
}