cocos2d-x 3.3 之黑白棋设计 NO.4 动画效果

[以前的文章,重新发布]

     (NO.3被无缘无故删除了)   

  (吐槽一下CSDN,删除文章没有解释没有通知,直接就没了) 

 

这篇文章介绍一下动画效果,我先拿棋子翻动效果举个例子

 

1.生成精灵表

这是我在3dmax渲染出来的棋子翻动动画,一共有11张图(其他图是后面加的),每张图下面都加了棋面(这里偷了懒)

再用TexturePackerGUI.exe这个软件将分开的图片生成一张图片和一个plist文件,这样我们需要的精灵表就完成了

 

2.加载精灵表

 

	SpriteBatchNode* spritebatch = SpriteBatchNode::create("chess.png"); 
	SpriteFrameCache *frameCache=SpriteFrameCache::sharedSpriteFrameCache();
	frameCache->addSpriteFramesWithFile("chess.plist");

现在好像不太建议使用SpriteBatchNode,我现在能做到的是使用,还无法理解里面的内容

 


3.创建动画

 

	Vector<SpriteFrame*> action_change;//保存帧
	char str[100]={0};
	if(chess_turn==-1)
	{
		for(int i=0;i<=10;i++)
		{
			sprintf(str,"chess_%d.png",i);
			//SpriteFrame * sf=SpriteFrame::create(str,Rect(0,0,60,60)); //通过文件
			SpriteFrame* sf = frameCache->spriteFrameByName( str );   //通过<span style="font-size:10px;">精灵表</span>
			action_change.pushBack(sf);//存入Vector
		}
	}

 

上面有两种方法,一种是直接从文件中读取,一种是读取精灵表.

其中的区别很明显,如果读取文件,那么这一次绘图需要读取11此,而读取精灵表只需读取1次,可以很大程度上节省资源

(还有一种情况,也许读取一个整合了全部图片的大图片所需的时间比读取单个图片的时间大很多,现在不去深究~)


4.添加动画

 

	Animation * ani=Animation::createWithSpriteFrames(action_change,0.1);
	ani->setDelayPerUnit(0.50f / 11.0f);//这个动画包含11帧,将会持续0.5秒
	auto sprite=Sprite::create();
	Action * act=Sequence::create(
		//动画
		Animate::create(ani),
		//删除自己
		CallFuncN::create(sprite,callfuncN_selector(Chess::killMe)),
		NULL);
	sprite->setTag(50);
	sprite->setAnchorPoint(Point::ZERO);
	sprite->runAction(act);
	this->addChild(sprite);


5.释放资源

 

 

void Chess::killMe(Node * pSender)//删除自己
{
	pSender->removeFromParentAndCleanup(true);
}


经过以上代码就能实现在棋盘上绘制棋子翻转的动画效果了

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值