Cocos2D游戏之旅(三):卡牌翻转效果的实现(上)

Cocos2D游戏之旅(三):卡牌翻转效果的实现(上),第1张

概述晓石头的博客 邮箱:178673693@qq.com 转载请注明出处,原文连接:http://www.voidcn.com/article/p-fnfhtjde-vx.html   鼠标点击一次,卡牌盖住 再次点击,卡牌翻开 效果演示图 之前一直认为卡牌翻转是通过帧动画实现的,当看到@笨木头用ScaleTo做出来时候,再一次深刻体会到什么叫大道至简。 一、先谈思路 一共两张图片 1、正面 2、背面

晓石头的博客

邮箱:178673693@qq.com

转载请注明出处,原文连接:http://www.jb51.cc/article/p-fnfhtjde-vx.html

鼠标点击一次,卡牌盖住

再次点击,卡牌翻开


效果演示图

之前一直认为卡牌翻转是通过帧动画实现的,当看到@笨木头用Scaleto做出来时候,再一次深刻体会到什么叫大道至简。

一、先谈思路

一共两张图片

1、正面


2、背面


第一步:将正面的宽度慢慢缩小至0;产生卡牌翻转到中间的效果

第二步:将一开始就把宽度缩小至0的背面放大到正常,产生卡牌盖住的效果

嘿嘿,是不是一种恍然大悟的感觉!^_^


二、再说实现
bool HelloWorld::init(){    if (!Layer::init())    {        return false;    }    Size visibleSize = Director::getInstance()->getVisibleSize();	//添加背景	CCSprite* bk = CCSprite::create("bk.png");	bk->setposition(Point(visibleSize.wIDth / 2,visibleSize.height / 2));	this->addChild(bk);	//cardFlag为偶数时,表示牌翻开,否则盖上	cardFlag = 0;	//触摸事件	EventListenertouchOneByOne* event = EventListenertouchOneByOne::create();	event->setSwallowtouches(true);	event->ontouchBegan = CC_CALLBACK_2(HelloWorld::ontouchBegan,this);	event->ontouchmoved = CC_CALLBACK_2(HelloWorld::ontouchmoved,this);	event->ontouchended = CC_CALLBACK_2(HelloWorld::ontouchended,this);	_eventdispatcher->addEventListenerWithSceneGraPHPriority(event,this);	/* 创建第一个精灵 */	sprite1 = Sprite::create("card.jpg");	sprite1->setposition(Point(visibleSize.wIDth / 2,visibleSize.height / 2));	this->addChild(sprite1);	/* 创建第二个精灵 */	sprite2 = Sprite::create("bkCard.png");	sprite2->setposition(Point(visibleSize.wIDth / 2,visibleSize.height / 2));	this->addChild(sprite2);	/* 第二个精灵默认x拉伸至0.0,于是第二个精灵在一开始是看不见的*/	sprite2->setScaleX(0.0f);    return true;}voID HelloWorld::closeCard(){	/* x方向拉伸至0的动作 */	Scaleto* scaletoHIDe = Scaleto::create(0.6f,0.0f,1.0f);	/* 创建卡牌放大的回调函数 */	auto funcScaletoShow = [=](){		Scaleto* scaletoShow = Scaleto::create(0.6f,1.0f,1.0f);		sprite2->runAction(scaletoShow);	};	/* 将回调函数封装为动作 */	CallFunc* callFuncSpr2 = CallFunc::create(funcScaletoShow);	/* 依次执行动作 */	Sequence* sequence = Sequence::create(scaletoHIDe,callFuncSpr2,NulL);	sprite1->runAction(sequence);}voID HelloWorld::openCard(){	/* x方向拉伸至0的动作 */	Scaleto* scaletoHIDe = Scaleto::create(0.6f,1.0f);	auto funcScaletoShow = [=](){		Scaleto* scaletoShow = Scaleto::create(0.6f,1.0f);		sprite1->runAction(scaletoShow);	};	CallFunc* callFuncSpr1 = CallFunc::create(funcScaletoShow);	Sequence* sequence = Sequence::create(scaletoHIDe,callFuncSpr1,NulL);	sprite2->runAction(sequence);}bool HelloWorld::ontouchBegan(touch *touch,Event *unused_event){	return true;}voID HelloWorld::ontouchmoved(touch *touch,Event *unused_event){}voID HelloWorld::ontouchended(touch *touch,Event *unused_event){	/* cardFlag为偶数则盖住卡牌,基数则打开卡牌 */	if (0 == cardFlag%2)	{		closeCard();	}	else	{		openCard();	}	cardFlag++;}

源代码免积分下载地址:

代码一:卡牌翻转效果的实现(只有当鼠标点中卡牌才翻转)

http://download.csdn.net/detail/qiulanzhu/8957267


代码二:卡牌翻转效果的实现(有点击事件就翻转)

http://download.csdn.net/detail/qiulanzhu/8954611


对比学习会对触摸事件有更深入的理解。

总结

以上是内存溢出为你收集整理的Cocos2D游戏之旅(三):卡牌翻转效果的实现(上)全部内容,希望文章能够帮你解决Cocos2D游戏之旅(三):卡牌翻转效果的实现(上)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1067340.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存