zoukankan      html  css  js  c++  java
  • 一个简单的游戏开发框架(六.行为Action)

    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) = 0;
        virtual void StepAction(double dt) = 0;
        virtual bool IsDone() = 0;
    };

    下面是一个移动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); }
     
  • 相关阅读:
    【bzoj3158】千钧一发 最小割
    【bzoj2186】[Sdoi2008]沙拉公主的困惑 欧拉函数
    【bzoj1221】[HNOI2001] 软件开发 费用流
    【bzoj4176】Lucas的数论 莫比乌斯反演+杜教筛
    【bzoj4916】神犇和蒟蒻 杜教筛
    【bzoj3944/bzoj4805】Sum/欧拉函数求和 杜教筛
    【bzoj4869】[Shoi2017]相逢是问候 扩展欧拉定理+并查集+树状数组
    【bzoj3926】[Zjoi2015]诸神眷顾的幻想乡 广义后缀自动机
    【bzoj2555】SubString 后缀自动机+LCT
    【bzoj3277/bzoj3473】串/字符串 广义后缀自动机
  • 原文地址:https://www.cnblogs.com/bnudc/p/3446322.html
Copyright © 2011-2022 走看看