棋牌游戏效果

近期做了几款棋牌类游戏,在游戏中遇到了一些特效的问题,网上也很少有案例和源代码摸索了很久才搞定,故在这里简单的介绍一下自己的心得,留给以后的自己和后人,个人原创,不喜勿喷,如果你觉得有问题,欢迎提出。

一.      扑克牌翻转特效。

意思就是我们看到的一张扑克牌从中间翻转,由扑克牌的背面转向正面。

首先我们去创建一张需要翻转的扑克牌:

Auto mycard = UICard::create(0xFF,1);

UICard是扑克牌空间,继承于Sprite,用16进制的数字来表示扑克牌的数字和颜色。

然后我们需要创建的是动作:

首先创建一个移动的动作:

Auto move = MoveTo::create(0.5f,Point(x,x));

再创建一个动作Sequence:

Sequence *seq = Sequence::create(DelayTime::create(0.3f),OrbitCamera::create (0.3f,1,0,0,-90,0,0),Hide::create(),CallFunN::create([=](Node*obj)

{

      UICard::card = (UICard*)obj;

   Card = updateCard(ox01);

   Card->runAction(Sequence::create(Show::create(),OribitCamera::create          (0.3f,1,0,90,-90,0,0),NULL));

}

),NULL);

     auto ani = Sequence::create(move,seq,NULL);

     mycard->runAction(ani);

解释:这个ani动作是先让扑克牌翻转90度,然后把扑克牌的数字更新,再让扑克牌转回来,就可以完成整个特效了。

 

 

 

二.      如何让扑克牌一张一张发牌,就如我们现实生活中的发牌一样,等到第一个人的整个发牌动作完成之后,再发第二个人的牌。刚开始的时候弄了不行,其实很简单,注意到是运用到一个动作结束回调函数CCCallFuncND,利用这个函数就可以达到这个效果,下面用简短的代码来描述一下:

Void main()

{

  UICard*    S_card[20];//定义一个数组

  for(int i=0;i<20;i++)

{

          S_card[i] = UICard::Create(oxFF,1);.

          S_card[i]->setposition(Point(x,x));

}

dispathCardsCallback(NULL,(void*)0);

}

 

Void dispathCardsCallback(CCNode* pSende,(void*)args)

{

      int num = (int )args;

float speed = 0.15;

num++;

if(num>20)

return;

      switch(num%4)

{

       Case 1:

        {

              Auto  move = MoveTo::create(int ,Point);

              Auto  seq = Sequence::Create(move,CCCallFuncND::create(this,callfuncND_selector(dispathCardsCallback),(void*)num,NULL));

S_card[num]->runAction(seq);

}break;

      Case 2:

        {

              Auto  move = MoveTo::create(int ,Point);

              Auto  seq = Sequence::Create(move,CCCallFuncND::create(this,callfuncND_selector(dispathCardsCallback),(void*)num,NULL));

S_card[num]->runAction(seq);

}break;

Case 3:

        {

              Auto  move = MoveTo::create(int ,Point);

              Auto  seq = Sequence::Create(move,CCCallFuncND::create(this,callfuncND_selector(dispathCardsCallback),(void*)num,NULL));

S_card[num]->runAction(seq);

}break;

Case 4:

        {

              Auto  move = MoveTo::create(int ,Point);

              Auto  seq = Sequence::Create(move,CCCallFuncND::create(this,callfuncND_selector(dispathCardsCallback),(void*)num,NULL));

S_card[num]->runAction(seq);

}break;

 

}

}

这个例子是针对4人牛牛来的,对于不同的项目要做出相应的修改,不可直接照抄,这里提供的只是方法和原理。利用回调函数和迭代完成整个发牌效果。

 

 

三.      圆形进度条

对于长条形的进度条见到的特别多,实现起来也很容易,在cocostdios上就可以直接造一个出来,可是圆环状的进度条就不行了,下面就简单的介绍一下:

m_progress = ProgressTimer::create(Sprite::create(“”));

m_progress->setpositon(point);

m_progress->setPercentage(0);//这里是设置初始进度

m_progress->setType(ProgressTmer::Type::RADIAL);//设置圆形类型

m_progress->setMidPoint(vec2::ANCHOR_MIDDLE);

m_progress->setReverseProgress(false);

m_progress->runAction(ProgressTo::create(30,100));//参数:时间,进度

this->addChild(m_progress);

       这样就完成了圆环状的进度条,可以是减少也可以是增加的,这个原理和扇形进度条的原理是一样的,不同的是一个是圆环状的图片另一个可能是圆形的图片而已。

lua还有一个写法:

 local left = cc.ProgressTimer:create(cc.Sprite:create("bg/jishikuang.png")) 
    left:setType(cc.PROGRESS_TIMER_TYPE_RADIAL)
    -- 设置显示位置
    left:setPosition(cc.p(99/2, 101/2))
    local to1 = cc.ProgressFromTo:create(ft, 100,0)
    -- 运行动作
    left:runAction(cc.Repeat:create(to1,1))
    left:setReverseDirection(false)
    -- 添加到层当中
    self.Image_kuang:addChild(left)

你可能感兴趣的:(棋牌游戏效果)