Action是cocos2d-x中比较重要的概念,有一个庞大的类族。参见老G写的cocos2d-x学习笔记09:动作2:持续动作

除了各种包装器,剩下的主要是一些持续动作:

CCMoveTo:移动到、CCMoveBy:按……移动
CCJumpTo:跳跃到、CCJumpBy:按……跳跃
CCBezierTo:贝兹移动到、CCBezierBy:按……贝兹移动
CCRotateTo:旋转到、CCRotateBy:按……旋转
CCScaleTo:缩放到、CCScaleBy:按……缩放
CCSkewTo:切变到、CCSkewBy:按……切变
CCTintTo:颜色渐变到、CCTintBy:按……颜色渐变
CCFadeIn:从无到有,也叫淡入、CCFadeOut:从有到无,也叫淡出、CCFadeTo:改变不透明度到某个值
CCBlink:闪耀
CCDelayTime:延时

可以看出cocos2d中的Action在概念上,主要还是面对图形,动画的操作。我希望Action有更高层级的抽象,不是面向图形,而是面向游戏里的逻辑对象比如角色,怪物,地表物品等。而且不仅仅用于客户端,也能用于服务器。cocos2d里的各种包装器概念在新的框架里依然有用。除此之外就是依项目需求,游戏里各种对象所需要的行为,典型的比如移动,攻击。Action的主要功能,就是改变对象属性。Action和ActionManager,Object之间的关系,与cocos2d-x中CCAction和CCActionManager,CCNode之间的关系一样,接口也非常近似。
class ActionMgr
{
public:
void ActionTick();
void AddAction(Action* pAction);
void StopAction(Action* pAction);
};
class Action
{
public:
virtual void RunWithTarget(Object* pTarget) = ;
virtual void StepAction(double dt) = ;
virtual bool IsDone() = ;
};

下面是一个移动Action的例子,可以看到行为怎样和对象属性发生作用。Action应该设计得尽量小,依赖的属性尽量少,每个Action只影响一个或一组属性为好。

void ActionMoveTo::StepAction(double dt)
{
if (!_bRunning)
return; // 取当前位置
Point3F pos;
pos.x = _pTarget->GetProperty(Properties::POSX);
pos.y = _pTarget->GetProperty(Properties::POSY);
pos.z = _pTarget->GetProperty(Properties::POSZ); // 计算下一时刻位置
pos.x += (float)(_ds.x * dt);
pos.y += (float)(_ds.y * dt);
pos.z += (float)(_ds.z * dt); // 判断是否到达目的地
  …… // 修改位置属性
auto xyz = std::make_tuple(pos.x, pos.y, pos.z);
_pTarget->SetPropertyGroup<Properties::POSX>(xyz);
}
 

最新文章

  1. &quot;此站点已经禁用应用程序&quot;在sharepoint 2013中通过v2013部署app提示该错误
  2. 【Qt】Qt之自定义界面(窗体缩放)【转】
  3. MyEclipse10破解后将工程导成war包时报错
  4. POI HSSFColor 颜色索引对照表
  5. Android实战技术:IPC方式简介教程
  6. javascript动画效果之匀速运动(修订版)
  7. java操作txt文本(二):删除文本括号内的内容
  8. 微信开发之获取jsapi_ticket
  9. 支付宝支付php的demo或sdk报错 Warning: openssl_sign() [function.openssl-sign]: Unknown signature algorithm. in
  10. .NET平台开源项目速览(19)Power BI神器DAX Studio
  11. 如何为Web应用选择托管主机
  12. MFC中char*,string和CString之间的转换
  13. ReactJs和React Native的联系和差异
  14. mysql中注释的添加修改
  15. Git环境配置
  16. Android开发 ---基本UI组件4:拖动事件、评分进度条、圆圈式进度条、进度条控制
  17. 动手动脑(lesson2)
  18. 用addOnGlobalLayoutListener获取View的宽高
  19. svn-经常遇到问题解答办法积累(一)
  20. 技术进阶:Kubernetes高级架构与应用状态部署

热门文章

  1. MacOS X Terminal中设置代理
  2. SQL检查锁&amp;解锁
  3. VS学习
  4. 老王讲自制RPC框架.(二.动态代理)
  5. MyISAM与InnoDB区别
  6. OneProxy自动剔除延迟节点
  7. 实现远程FTP特定时间轨道号MODIS数据的搜索
  8. Right Here Waiting
  9. C# Socket连接 无法访问已释放的对象
  10. ios基础篇(二十七)—— Json解析