现在的位置: 首页 > 综合 > 正文

coco2d-x 3.0基础浅谈(一)

2017年10月28日 ⁄ 综合 ⁄ 共 3235字 ⁄ 字号 评论关闭

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、获得随机数

  1. //产生随机数   
  2.         //CCRANDOM_0_1()获取一个0-1之间的float类型数,包括0和1  
  3.         //通过CCRANDOM_0_1()获得的随机数其实并不是随机的,要想获取接近真实的随机数需要设置一个种子  
  4.         //比较常用的方法是以当前时间为种子,在cocos2d-x中提供了获取时间的方法,而且获取的时间更精确  
  5.         //cc_timeval是个结构体,里边有俩个变量,一个是以秒为单位的,一个是以微妙为单位的  
  6.         cc_timeval tv;  
  7.         CCTime::gettimeofdayCocos2d(&tv,NULL);  
  8.         //都转化为毫秒   
  9.         unsigned long reed = tv.tv_sec*1000+tv.tv_usec/1000;  
  10.         //srand()中传入一个随机数种子
      
  11.         srand(reed);  
  12.   
  13.         this->schedule(schedule_selector(HelloWorld::random),1.0);  
  14.   
  15.         bRet = true;  
  16.     } while (0);  
  17.   
  18.     return bRet;  
  19. }  
  20.   
  21. //如果要获得a~b之间的一个随机数,则应该是CCRANDOM_0_1*(b-a)+a,传入的参数就是a和b  
  22. int HelloWorld::getRandomNumber(int start,int end)  
  23. {  
  24.     return CCRANDOM_0_1()*(end-start)+start;  

7、获得本地时间

//获取系统时间
    //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);
}

抱歉!评论已关闭.