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); }
     
  • 相关阅读:
    Good Bye 2014 B. New Year Permutation(floyd )
    hdu 5147 Sequence II (树状数组 求逆序数)
    POJ 1696 Space Ant (极角排序)
    POJ 2398 Toy Storage (叉积判断点和线段的关系)
    hdu 2897 邂逅明下 (简单巴什博弈)
    poj 1410 Intersection (判断线段与矩形相交 判线段相交)
    HDU 3400 Line belt (三分嵌套)
    Codeforces Round #279 (Div. 2) C. Hacking Cypher (大数取余)
    Codeforces Round #179 (Div. 2) B. Yaroslav and Two Strings (容斥原理)
    hdu 1576 A/B (求逆元)
  • 原文地址:https://www.cnblogs.com/bnudc/p/3446322.html
Copyright © 2011-2022 走看看