• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > Cocos2d-x人物动作类实例

Cocos2d-x人物动作类实例

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了动作补间动画实例,ppt动作路径实例,动作路径实例,性交动作实例,wincc c动作实例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

我们玩的游戏一般都可以看到精灵的运动,游戏的世界就是一个运动的世界,而所有的这些动作都可以分为一些基本的动作和动作的组合,今天就来学习一下动作类CCAction,首先看一下类之间的继承关系。

CCAction类下派生了三个动作类,执行动作的类是CCNode以及它的子类,通过函数runAction()来执行动作,其中CCFiniteTimeAction之下是常用的瞬时动作和延时动作。动作从本质上来说就是改变节点的属性,瞬时动作就是改变这些属性不需要时间,瞬时就完成了,而延时动作改变这些属性需要一些时间,可以通过参数来设置这个时间,下面是瞬时动作和延时动作的例子,解释看源代码。点击下图查看效果。

bool HelloWorld::init()
{
  bool bRet = false;
  do
  {

    CC_BREAK_IF(! CCLayer::init());

		//创建一个精灵
		CCSprite * sprite = CCSprite::create("image.png");
		sprite->setPosition(ccp(240,160));
		//最后一个参数是精灵的tag,以便在众多的子节点中,通过getChildByTag()找到该节点
		this->addChild(sprite,0,0);

		//创建菜单
		CCMenuItemFont * fontMenu1 = CCMenuItemFont::create("start");
		CCMenuItemFont * fontMenu2 = CCMenuItemFont::create("stop");
		//和move函数相互绑定
		CCMenuItemToggle * toggleMenu = CCMenuItemToggle::createWithTarget(this,menu_selector(HelloWorld::move),
			fontMenu1,fontMenu2,NULL);
		CCMenu * menu = CCMenu::create(toggleMenu,NULL);
		menu->setPosition(ccp(420,40));
		this->addChild(menu);

    bRet = true;
  } while (0);

  return bRet;
}

void HelloWorld::move(CCObject* pSender)
{
	//通过tag获得添加的精灵
	CCSprite * sprite = (CCSprite *)this->getChildByTag(0);
	CCMenuItemToggle * toggleMenu = (CCMenuItemToggle *)pSender;

	//瞬时动作CCPlace,改变了精灵的坐标,可以用sprite->setPosition(ccp(60,160))代替,但写成动作可以加入到动作序列中
	CCPlace * action1 = CCPlace::create(ccp(60,160));
	//瞬时动作,使精灵做X轴的翻转
	CCFlipX * action2 = CCFlipX::create(true);

	if(toggleMenu->getSelectedIndex() == 1)
	{
		//通过runAction精灵执行动作
		sprite->runAction(action2);
	}
	else if(toggleMenu->getSelectedIndex() == 0)
	{

	}
}
</div>

动作类动作类 动作类 动作类

void HelloWorld::move(CCObject* pSender)
{
	//通过tag获得添加的精灵
	CCSprite * sprite = (CCSprite *)this->getChildByTag(0);
	CCMenuItemToggle * toggleMenu = (CCMenuItemToggle *)pSender;

	//延时动作,第一个参数是执行动作所需要的时间,moveTo是绝对的,就是移动到哪个坐标,而moveBy是相对的
	//传入的ccp(10,0)是一个向量,精灵沿着x轴移动了10个像素
	CCMoveTo * moveTo = CCMoveTo::create(2.0,ccp(240,180));
	CCMoveBy * moveBy = CCMoveBy::create(2.0,ccp(10,0));
	//rotate按照一定的角度旋转,to强调的是结果,现在是0度,会旋转到90度,如果现在是90度,还是会在90度
	CCRotateTo * rotateTo = CCRotateTo::create(2.0,90);
	//by强调旋转的相对角度,不论现在多少度都会旋转90度,以to和by结尾的动作类都是相同的道理
	CCRotateBy * rotateBy = CCRotateBy::create(2.0,90);

	if(toggleMenu->getSelectedIndex() == 1)
	{
		//通过runAction精灵执行动作
		//sprite->runAction(moveTo);
		//sprite->runAction(moveBy);
		sprite->runAction(rotateBy);
	}
	else if(toggleMenu->getSelectedIndex() == 0)
	{

	}
}
</div>

以by结尾的延时动作都可以通过reverse()获得它的反动作。

动作类

void HelloWorld::move(CCObject* pSender)
{
	//通过tag获得添加的精灵
	CCSprite * sprite = (CCSprite *)this->getChildByTag(0);
	CCMenuItemToggle * toggleMenu = (CCMenuItemToggle *)pSender;

	//第二个参数是跳跃的向量,第三个参数是跳跃的高度,第四个参数是跳跃的次数
	CCJumpBy * jumpBy = CCJumpBy::create(2.0,ccp(100,30),50,4);
	//以by结尾的延时动作都可以通过reverse()获得它的反动作
	CCActionInterval * jumpBack = jumpBy->reverse();

	if(toggleMenu->getSelectedIndex() == 1)
	{
		//通过runAction精灵执行动作
		sprite->runAction(jumpBy);
	}
	else if(toggleMenu->getSelectedIndex() == 0)
	{
		sprite->runAction(jumpBack);
	}
}
</div>

延时动作中还有俩个重复动作的函数,就是重复不断的执行某一个动作,看下他们的继承关系。

动作类 动作类

下面是实现的源代码。

动作类 动作类

void HelloWorld::move(CCObject* pSender)
{
	//通过tag获得添加的精灵
	CCSprite * sprite = (CCSprite *)this->getChildByTag(0);
	CCMenuItemToggle * toggleMenu = (CCMenuItemToggle *)pSender;

	//第一个参数传入重复的动作,第二个参数传入重复的次数
	CCRepeat * repeat = CCRepeat::create(rotateBy,4);
	//永远重复执行一个动作
	CCRepeatForever * repeatForever = CCRepeatForever::create(rotateBy);

	if(toggleMenu->getSelectedIndex() == 1)
	{
		//通过runAction精灵执行动作
		sprite->runAction(repeatForever);
	}
	else if(toggleMenu->getSelectedIndex() == 0)
	{

	}
}
</div>


下面再列举一下基本常用的瞬时动作和延续动作。
瞬时动作:
放置Place:效果类似于 setPosition = ccp(x, y)。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Cocos2d-x人物动作类实例

相关文章

  • 2017-05-28C++编程中删除运算符与相等运算符的使用解析
  • 2017-05-28C++实现简单遗传算法
  • 2017-05-28VC++中内存对齐实例教程
  • 2017-05-28C语言中的字符(char)详细讲解
  • 2017-05-28C++学习小结之数据类型及转换方式
  • 2017-05-28C语言循环结构与时间函数用法实例教程
  • 2017-05-28深入理解结构体中占位符的用法
  • 2017-05-28原码, 反码与补码基础知识详细介绍
  • 2017-05-28C语言对栈的实现基本操作
  • 2017-05-28C语言基础之malloc和free函数详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++语言数据结构 串的基本操作实例代码
    • C++运算符重载的方法详细解析
    • CreateThread()与beginthread()的区别详细解析
    • C++操作SQLite简明教程
    • 浅谈C++中的构造函数分类及调用规则
    • C++通过自定义函数求一元二次方程的根
    • linux下C语言中的mkdir函数与rmdir函数
    • 解析C++中不能重载为友元函数的四个运算符
    • 基于select、poll、epoll的区别详解
    • 基于C++实现的线程休眠代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有