cocos2dx之实现扑克牌翻转效果的三种方法,cocos2dx扑克牌

  次阅读 作者:智能小宝 来源:互联网 2015-09-28 11:28 我要评论(0)

cocos2dx之实现扑克牌翻转效果的三种方法,cocos2dx扑克牌

***************************************************************************************

时间:2015-04-10

作者:Sharing_Li

转载注明出处:http://blog.csdn.net/sharing_li/article/details/44980493

***************************************************************************************

最近写一款家乡的牌类游戏,自己玩玩,里面涉及到扑克牌的翻牌效果,这里简单来说一下:

一说到翻转,我马上想到了OrbitCamera这个家伙,虽然很少用,但知道它有这个效果,但代码写到一半发现事实情况是这样的:

我本意是打算将扑克牌背面转到90°,也就是与屏幕垂直,这个时候,再把扑克牌正面从90°位置转到0°即正面。但是同样是转到90°,各个背面的显示不一样。代码如下:

for (int j = 1; j <= 16; j++) {

m_cardBg.at(j - 1)->runAction(Sequence::create(DelayTime::create(1)

,OrbitCamera::create(0.05 + j / 20.0, 1, 0, 0, 90, 0, 0),NULL));

}

纳闷,然后上网查了查文档,说OrbitCamera是沿屏幕中心进行球面轨迹的旋转,乍一看不知道说的啥,OrbitCamera::create函数的参数也很多,然后分析了一下,好像知道了个三二一,见下图:

所谓的旋转90°也就是垂直球面指向球心。“上有政策,下有对策”,我这里弄了一个勉强的解决方案,也就是当动画运行到上图停止时,隐藏扑克牌背面,让事先隐藏(先用orbitcamera旋转90°再隐藏)的扑克牌正面图片显示出来,然后向相反的方向调用orbitcamera旋转90°。看效果图:

在看看代码实现:

for (int j = 1; j <= 16; j++) {

m_cardBg.at(j - 1)->runAction(Sequence::create(DelayTime::create(1)

,OrbitCamera::create(0.05 + j / 20.0, 1, 0, 0, 90, 0, 0)

,Hide::create()

,CallFunc::create([=]

{

m_cardVec.at(j - 1)->runAction(Sequence::create(

Show::create(),

OrbitCamera::create(0.05 + j / 20.0, 1, 0, 90, -90, 0, 0), NULL));

}),NULL));

m_cardVec.at(j - 1)->runAction(OrbitCamera::create(0.02, 1, 0, 0, 90, 0, 0));

}

基本上有模有样了,这就是第一种方法。第二种方法其实也是用的orbitcamera实现的,勉强凑个数。先看下效果图:

可以感觉的到,效果比之前的更流畅。并且只需在之前的代码基础上加上一行代码。第一种方法弄好后,我总感觉可以再优化,刚开始打算这样弄,以中间的一张图为比较对象,将每一张图的中点,球心,和中间一张图的中心,构成三角形,比较tan值,从而设置其要旋转的角度,但是最后失败了,效果不佳,放弃了。最后,我打算进入到OrbitCamera的源代码看看。最后看到OrbitCamera::update函数中调用了一个setEye函数,然后突然想到之前第二张分析图里的箭头都指向球心,感觉就像许多眼睛都盯着球心那个地方一样。然后继续跟踪:setEye—》ActionCamera::updateTransform—》Node::setAdditionalTransform,然后发现这句代码:_transformUpdated

= _transformDirty = _inverseDirty =

true;这个跟对象的绘制有关,然后在Node.cpp里找到visit函数,发现跟director在搞鬼,然后继续跳到director,然后真相大白了。见如下代码:

/**

* @brief Possible OpenGL projections used by director

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...