2dx继承 cocos_cocos2dx rc0cocos2dx tilemap - CSDN
  • cocos2dx继承关系

    2017-08-30 09:15:27
    直接继承Ref的有哪些 Animation、AnimationCache、Action 、Node、SpriteFrame、SpriteFrameCache、Texture2D、Director、Event、EventDispatcher、EventListener、Scheduler、Touch、HttpRequest、HttpResponse 、...

    直接继承Ref的有哪些

    AnimationAnimationCacheActionNodeSpriteFrameSpriteFrameCacheTexture2DDirectorEventEventDispatcherEventListenerSchedulerTouchHttpRequestHttpResponse

    Widget

    /************************************************************************/

     

    继承自Action的有哪些

    FiniteTimeActionSpeedFollow

    继承自FiniteTimeAction的有哪些

    ActionInstant, and ActionInterval.

    继承自ActionInstant的有哪些

    CallFunc, FlipX, FlipY, Hide, Place, RemoveSelf, ReuseGrid, Show, StopGrid, and ToggleVisibility.

    继承自ActionInterval的有哪些

    AccelAmplitude, AccelDeccelAmplitude, ActionCamera, ActionEase, ActionFloat, ActionTween, Animate, Animate3D, BezierBy, Blink, CardinalSplineTo, DeccelAmplitude, DelayTime, FadeTo, GridAction, JumpBy, MoveBy, ProgressFromTo, ProgressTo, Repeat, RepeatForever, ReverseTime, RotateBy, RotateTo, ScaleTo, Sequence, SkewTo, Spawn, TargetedAction, TintBy, and TintTo.

    继承自ActionCamera的有哪些

    OrbitCamera

    继承自ActionEase的有哪些

    EaseBackIn, EaseBackInOut, EaseBackOut, EaseBezierAction, EaseBounce, EaseCircleActionIn, EaseCircleActionInOut, EaseCircleActionOut, EaseCubicActionIn, EaseCubicActionInOut, EaseCubicActionOut, EaseElastic, EaseExponentialIn, EaseExponentialInOut, EaseExponentialOut, EaseQuadraticActionIn, EaseQuadraticActionInOut, EaseQuadraticActionOut, EaseQuarticActionIn, EaseQuarticActionInOut, EaseQuarticActionOut, EaseQuinticActionIn, EaseQuinticActionInOut, EaseQuinticActionOut, EaseRateAction, EaseSineIn, EaseSineInOut, and EaseSineOut.

    继承自FadeTo的有哪些:

    FadeIn, and FadeOut.

    继承自JumpBy的有哪些:

    JumpTo

    继承自MoveBy的有哪些:

    MoveTo

    继承自ScaleTo的有哪些:

    ScaleBy

    继承自SkewTo的有哪些:

    SkewBy

     

    /************************************************************************/

     

    继承自Event的有哪些

    EventKeyboard

    继承自EventListener的有哪些

    EventListenerAcceleration, EventListenerController, EventListenerCustom, EventListenerFocus, EventListenerKeyboard, EventListenerMouse, EventListenerTouchAllAtOnce, and EventListenerTouchOneByOne.

     

    /************************************************************************/

     

    继承自Node的有哪些:

    LabelLayerLabelAtlasLayerColorMenuItemParticleSystemRenderTextureSceneSprite,、Scale9SpriteProgressTimerClippingNodeDrawNode

    继承自Label的有哪些

    TextFieldTTF(必须实现TextFieldDelegate)

    继承自Layer的有哪些

    Menu

    继承自MenuItem的有哪些

    MenuItemLabelMenuItemSpriteMenuItemToggle

    继承自MenuItemLabel的有哪些

    MenuItemFont

    继承自MenuItemSprite的有哪些

    MenuItemImage

    继承自ParticleSystem的有哪些

    ParticleSystemQuad

    继承自Scene的有哪些

    TransitionScene

    继承自TransitionScene的有哪些

    TransitionCrossFade, TransitionFade, TransitionFadeTR, TransitionJumpZoom, TransitionMoveInL, TransitionPageTurn, TransitionProgress, TransitionRotoZoom, TransitionSceneOriented, TransitionShrinkGrow, TransitionSlideInL, TransitionSplitCols, and TransitionTurnOffTiles.

     

    /************************************************************************/

    继承自Widget的有哪些:

    ButtonCheckBoxRadioButtonEditBox(必须实现EditBoxDelegate)ImageViewLayoutLoadingBarRichTextSliderTextTextAltasTextField

    继承自Layout的有哪些

    ScorllView

    继承自ScrollView的有哪些

    ListViewTableView(要实现TableViewDataSourceTableViewDelegate)

    继承自ListView的有些

    PageView

    展开全文
  • cocos2dx继承结构图

    2015-04-13 11:10:08
    包含关系 CCDirector->CCScene->CCLayer->CCSprite->CCAction 继承关系 CCObject---CCAction(动作,控制图层运动,渐变,旋转)  ---CCNode---CCScene  ---CCLayer  

    包含关系

    CCDirector->CCScene->CCLayer->CCSprite->CCAction


    继承关系

    CCObject---CCAction(动作,控制图层运动,渐变,旋转)

                   ---CCNode---CCScene

                                     ---CCLayer

                                     ---CCSprite

                                     ---CCMenu


    引擎目录结构

    cocos2dx :--------------------引擎的核心类,图形引擎在各平台的实现,包括了多平台程序入口的一致化处理
    CocosDenshion :------------音频引擎的多平台实现
    extensions :-------------------UI控件network api,CCScrollView,CCeditBox等
    external:------------------------Box2D,chipmunk物理引擎的code
    scripting:------------------------javascript和lua脚本的各平台解析器code
    template:------------------------各平台项目文件的模版
    tools:-----------------------------工具


    在cocos2d-x应用启动以后会创建一个opengl窗口用来实现图形绘制和事件处理
    draw()     该方法绘制每一个node
    update() 该方法处理每一帧的逻辑变化
    ccTouchesBegan() 处理用户的交互事件

    展开全文
  • 本文章特指使用C++作为编程语言,基于cocos2dx游戏引擎开发游戏。   在cocos2dx中,sprite作为精灵类是使用最为频繁的类,与其它类相比,如:Node, Layer或Scene,Sprite最大的不同是它包含一个纹理,通过...

    本文章特指使用C++作为编程语言,基于cocos2dx游戏引擎开发游戏。

     

    在cocos2dx中,sprite作为精灵类是使用最为频繁的类,与其它类相比,如:Node, Layer或Scene,Sprite最大的不同是它包含一个纹理,通过OpenGL的渲染,在游戏中呈现出来。游戏中的主角,怪物,背景,或是精灵的血条等都是通过Sprite来实现的。

     

    在cocos2dx中,关于创建Sprite的类,根据输入参数的不同有以下几个工厂函数,

          
    staticSprite* create()
    staticSprite* create(conststd::string& filename)
    staticSprite* create(conststd::string& filename, constRect& rect)
    staticSprite* createWithTexture(Texture2D *texture)
    staticSprite* createWithTexture(Texture2D *texture, constRect& rect, bool rotated=false)
    staticSprite* createWithSpriteFrame(SpriteFrame *spriteFrame)
    staticSprite* createWithSpriteFrameName(conststd::string& spriteFrameName)


    顺便提醒,工厂函数中Sprite的实例都调用了autorelease(),所以由工厂函数返回的实例一般立即通过addChild到加入到父节点中,这样它的引用计数加一,表示有人在使用这个实例,这个实例不能被释放。当然,如果你不想立即加入到父节点中,也可以调用retain()函数直接对其引用计数加1,不然在主循环的下一次,就会将其回收,这是cocos2dx内存自动回收的机制决定的。

     

    在游戏的开发过程中,使用Sprite最频繁的编码就是三部曲 (1)创建Sprite (2)加入layer中 (3)设置精灵位置:

    Sprite *sprite = Sprite::create(hero.png);
    this->addChild(sprite);
    sprite->setPosition(Point(100,200));


    第一行创建Sprite的实例,也就是创建了一个类Sprite的对象,这个是在工厂函数中实现的,
    Sprite *sprite = newSprite();
    if(sprite && sprite->initWithFile(filename))
    {
        sprite->autorelease();
        returnsprite;
    }
    CC_SAFE_DELETE(sprite);
    returnnullptr;

    我们重点关注第一句:
    Sprite *sprite = newSprite();



    它决定了工厂函数创建的实例是Sprite类型,所以当在编码中调用Sprite的虚函数时,调用的就是Sprite类中的相应函数。

    可能你会有这样一个问题:如果我想重载一个虚函数,在这个函数中实现自己需要的一些特殊行为,该怎么做?

    答案是:必须继承Sprite创建一个你自己精灵类,在类中重载这个虚函数,这样还不够,必须定义这个新的继承类的工厂函数,在这个工厂函数中创建这个类的对象,

    classMySprite : publicSprite
    {
        staticMySprite * create(constchar *pszFileName);
    }
     
    MySprite * MySprite ::create(constchar *filename)
    {
        MySprite *sprite = newMySprite();
        if(sprite && sprite->initWithFile(filename))
        {
            sprite->autorelease();returnsprite;
        }
        CC_SAFE_DELETE(sprite);
        returnnullptr;
    }

    在程序中使用MySprite的代码与Sprite类似,

    MySprite *sprite = MySprite::create(hero.png);
    this->addChild(sprite);
    sprite->setPosition(Point(100,200));

    如果输入参数不同,可以参考Sprite类的实现,创建不同输入参数的工厂函数。
    所以,按照目前cocos2dx的设计,在Sprite的继承类中,必须重新实现新类的工厂函数,在工厂函数中创建新类的实例,这样新类中重载的虚函数就会被调用到。


    使用C++编程,经常需要继承Sprite来定制和封装游戏特定的精灵。有时候可能需要在Sprite的基础上进行多次继承,来达到类重用的目的。
    本文下面提供两种方法,提供给读者参考。在这两种方法中,不需要在继承类中重新实现工厂函数。


    在工厂函数中,实例作为输入参数传入

    MySprite * MySprite ::create(Sprite* sprite, constchar *filename)
    {
        if(sprite && sprite->initWithFile(filename))
        {
            sprite->autorelease();
            returnsprite;
        }
        CC_SAFE_DELETE(sprite);
        returnnullptr;
    }

    调用MySprite的代码:

    MySprite *sprite = newMySprite();
    MySprite::create(sprite, hero.png);
    this->addChild(sprite);
    sprite->setPosition(Point(100,200));

    在MySprite的基础上再做继承时,就不需要实现工厂函数了。


    例如:从MySprite继承新类MySprite2:

    classMySprite2 : publicMySprite
    {
        ...
    }

    调用MySprite2的代码:

    MySprite2 *sprite = newMySprite2();
    MySprite::create(sprite, hero.png);
    this->addChild(sprite);
    sprite->setPosition(Point(100,200));

    2. 创建newInstance的虚函数

    第二种方法,我们可以通过虚函数newInstance()来避免重复创建工厂函数。在newInstance中创建新类的对象。

    classMySprite : publicSprite
    {
        staticMySprite * create(constchar *filename);
        virtual Sprite* newInstance();
    }
    Sprite* MySprite::newInstance()
    {
        returnnew MySprite();
    }
     
    MySprite * MySprite ::create(constchar *filename)
    {
        MySprite *sprite = newInstance();
        if(sprite && sprite->initWithFile(filename))
        {
            sprite->autorelease();returnsprite;
        }
        CC_SAFE_DELETE(sprite);
        returnnullptr;
    }

    调用MySprite的代码:

    MySprite::create(hero.png);
    this->addChild(sprite);
    sprite->setPosition(Point(100,200));

    第二种方法的好处是在使用MySprite时与Sprite的完全相同,但需要在继承类中实现虚函数newInstance()。

    本文抛砖引玉,在您的实现过程中也许会有更好的方法,欢迎讨论,共同进步。


    展开全文
  • 学习quick cocos2dx,首先必须要掌握基本的lua知识,在quick中,大量出现了类,继承以及class,因此个人认为必须对这一块有很好的理解。 首先,先描述一下lua的自定义类的写法,这是从function.lua中注释中摘录出来...

     学习quick cocos2dx,首先必须要掌握基本的lua知识,在quick中,大量出现了类,继承以及class,因此个人认为必须对这一块有很好的理解。

        首先,先描述一下lua的自定义类的写法,这是从function.lua中注释中摘录出来的,个人觉得描述的比较详细。

    创建一个类

    //定义名为 Shape 的基础类
    local Shape = class("Shape")
    
    // ctor() 是类的构造函数,在调用 Shape.new() 创建 Shape 对象实例时会自动执行
    function Shape:ctor(shapeName)
        self.shapeName = shapeName
        printf("Shape:ctor(%s)", self.shapeName)
    end
    
    //shapeName是类的一个成员变量,在lua中成员变量可以直接通过self.shapeName=shapeName来生成并同时赋值,不用先声明,另外,前面不用local修饰,用local修饰的是局部变量而不是成员变量,成员变量前面用self.
    
    // 为 Shape 定义个名为 draw() 的方法
    function Shape:draw()
        printf("draw %s", self.shapeName)
    end
    
    //Circle 是 Shape 的继承类
    local Circle = class("Circle", Shape)
    function Circle:ctor()
        -- 如果继承类覆盖了 ctor() 构造函数,那么必须手动调用父类构造函数
        -- 类名.super 可以访问指定类的父类
        Circle.super.ctor(self, "circle")
        self.radius = 100
    end
    
    
    function Circle:setRadius(radius)
        self.radius = radius
    end
    
    // 覆盖父类的同名方法
    function Circle:draw()
        printf("draw %s, raidus = %0.2f", self.shapeName, self.raidus)
    end
    
    local Rectangle = class("Rectangle", Shape)
    
    function Rectangle:ctor()
        Rectangle.super.ctor(self, "rectangle")
    end
    
    
    local circle = Circle.new()             // 输出: Shape:ctor(circle)
    circle:setRaidus(200)
    circle:draw()                           //输出: draw circle, radius = 200.00
    
    
    local rectangle = Rectangle.new()       //输出: Shape:ctor(rectangle)
    rectangle:draw()                        // 输出: draw rectangle


    ~~~

    ### 高级用法

    class() 除了定义纯 Lua 类之外,还可以从 C++ 对象继承类。
    比如需要创建一个工具栏,并在添加按钮时自动排列已有的按钮,那么我们可以使用如下的代码:

    // 从 CCNode 对象派生 Toolbar 类,该类具有 CCNode 的所有属性和行为
    
    local Toolbar = class("Toolbar", function()
        return display.newNode() -- 返回一个 CCNode 对象
    end)
    
    // 构造函数
    function Toolbar:ctor()
        self.buttons = {} -- 用一个 table 来记录所有的按钮
    end
    
    // 添加一个按钮,并且自动设置按钮位置
    function Toolbar:addButton(button)
        // 将按钮对象加入 table
        self.buttons[#self.buttons + 1] = button
    
        // 添加按钮对象到 CCNode 中,以便显示该按钮
        // 因为 Toolbar 是从 CCNode 继承的,所以可以使用 addChild() 方法
        self:addChild(button)
    
        // 按照按钮数量,调整所有按钮的位置
        local x = 0
        for _, button in ipairs(self.buttons) do
            button:setPosition(x, 0)
            // 依次排列按钮,每个按钮之间间隔 10 点
            x = x + button:getContentSize().width + 10
        end
    end
    

    ~~~
    //class() 的这种用法让我们可以在 C++ 对象基础上任意扩展行为。

    既然是继承,自然就可以覆盖 C++ 对象的方法:

    function Toolbar:setPosition(x, y)
        -- 由于在 Toolbar 继承类中覆盖了 CCNode 对象的 setPosition() 方法
        -- 所以我们要用以下形式才能调用到 CCNode 原本的 setPosition() 方法
        getmetatable(self).setPosition(self, x, y)
        printf("x = %0.2f, y = %0.2f", x, y)
    end
    **注意:** Lua 继承类覆盖的方法并不能从 C++ 调用到。也就是说通过 C++ 代码调用这个 CCNode 对象的 setPosition() 方法时,并不会执行我们在 Lua 中定义的 Toolbar:setPosition() 方法。

    函数class(classname, super)有两个参数,class的定义在framework中的functions.lua中

    参数1:classname,见名知意,类名

    参数2:super


    function class(classname, super)
        local superType = type(super)
        local cls
    
        //如果父类既不是函数也不是table则说明父类为空
        if superType ~= "function" and superType ~= "table" then
            superType = nil
            super = nil
        end
    
        //如果父类的类型是函数或者是C对象
        if superType == "function" or (super and super.__ctype == 1) then
            -- inherited from native C++ Object
            cls = {}
    
            //如果父类是表则复制成员并且设置这个类的继承信息
            //如果是函数类型则设置构造方法并且设置ctor函数
            if superType == "table" then
                -- copy fields from super
                for k,v in pairs(super) do cls[k] = v end
                cls.__create = super.__create
                cls.super    = super
            else
                cls.__create = super
                cls.ctor = function() end
            end
    
            //设置类型的名称
            cls.__cname = classname
            cls.__ctype = 1
    
            //定义该类型的创建实例的函数为基类的构造函数后复制到子类实例
            //并且调用子数的ctor方法
            function cls.new(...)
                local instance = cls.__create(...)
                -- copy fields from class to native object
                for k,v in pairs(cls) do instance[k] = v end
                instance.class = cls
                instance:ctor(...)
                return instance
            end
    
    
        else
            //如果是继承自普通的lua表,则设置一下原型,并且构造实例后也会调用ctor方法
            // inherited from Lua Object
            if super then
                cls = {}
                setmetatable(cls, {__index = super})
                cls.super = super
            else
                cls = {ctor = function() end}
            end
    
            cls.__cname = classname
            cls.__ctype = 2 -- lua
            cls.__index = cls
    
            function cls.new(...)
                local instance = setmetatable({}, cls)
                instance.class = cls
                instance:ctor(...)
                return instance
            end
        end
    
        return cls
    
    end

    1.super的类型:superType = type(super)

    2.superType可以为functiontable,当不为这两种类型的时候我们将之置为nil

    3.superType为function的时候,表示从C++对象继承

    4.superType为table的时候,还要看其__ctype值,1表示继承自C++对象;2表示继承自lua表对象

    5.superType为nil的时候,从lua表继承

    一般情况下,superType为function的时候,表示继承的是一个C++对象,这个时候构造函数ctor里不需要调用父类的构造函数;其它情况,一般都需要在ctor里调用父类的构造函数。


    参考:

    展开全文
  • 使用cocos2dx开发的项目,嵌入到android原生项目中 要实现的功能,点击按钮打开cocos2dx编写的demo应用,当然这个cocos2dx是嵌入到android原生项目中的。 前提: 1,环境什么的这里就不说了,没有环境的自己上网...
  • 环境: cocos2dx版本为2.1.4 目标: 游戏中一般有玩家和怪物,他们都有相同的动作状态...cocos2dx中其实已经提供了类继承的一下工具函数,在sdk中的samples/Lua/TestLua/Resources/luaScript目录下有一个名为
  • 本文涉及到 cocos, Cocos2d-x, Cocos2d-js, Cocos Creator, Cocos Studio. 目前(2019-8-14)官网产品页只写了两类: Cocos2d-x http://www.cocos2d-x.org/products#cocos2d-x Cocos Creato...
  • 场景:CCScene,继承自CCNode,几乎完全等于CCNode类 CCNode继承自CCObject,CCObject是真正意义上的父类,CCObject又继承自CCCopying类,CCCopying的只是定义接口,完全虚基类 CCObject主要定义了两方面的内容: 1.是有...
  • cocos2dx-lua function.lua 定义了class方法,让lua实现继承像传统语言一样漂亮和方便 看定义
  • 一、cocos2dx概念简介

    2013-09-11 00:22:55
    cocos2dx概念介绍 1)scene,继承自CCScene 场景,一个游戏运行期间的显示界面,一个应用里面可以有多个场景,但是每次只能有一个是激活状态,也可以理解为一次只能显示一个界面。 例如,你的游戏有如下的界面:介绍...
  • 键盘输入在Cocos2Dx分为两个部分。第一部分是一些功能键的处理:后退键和菜单键。第二部分是处理字符输入。功能键相关的代码位于cocos2dx\keypad_dispatcher。字符输入的代码位于\cocos2dx\text_input_node。 ...
  • 最近准备做一个聊天系统,开始准备使用cocos2dx的UIRichText控件来显示聊天内容,结果在使用的时候才发现,cocos2dx的RichText功能非常有限,完全不具备实现聊天的功能,只实现了加入文本、图像和自定义控件的功能,...
  • 工程导入编译的时候eclipse会报错,Cocos2dxActivity,org.cocos2dx.lib.Cocos2dxActivity 也找不到导入android项目后 import org.cocos2dx.lib.Cocos2dxActivity 出错
  • cocos2dx之CCTMXTiledMap

    2013-12-25 10:51:22
    2,每个图素的精灵类在需要时调用tiltAt函数被创建 3.,每个图素都可以进行旋转缩放等设置 4,在运行时可以添加和删除 5,可以修改Z轴顺序来改变遮挡关系 6,每个图素都可以设置锚点 7.,每个层都可以添加节点 8,每...
  • cocos2dx 4.0物理引擎

    2020-01-12 14:24:00
    该方法一般是在createScene创建cocos2dx模板的这里 auto scene = Scene::createWithPhysics(); //显示物理世界调试状态, 显示红色的框, 方便调试 scene->getPhysicsWorld()->setDebugDrawMask...
  • cocos2dx3.x中使用物理引擎还是挺方便的 世界杯期间做个接地气的 平时创建场景 Lua 1local scene = cc.Scene:create()改成Lua 1 ...
  • cocos2dx控件大致可分为两种,第一种是非继承自Widget类的早期控件库;第二类是新的继承自Widget类的控件库。 先介绍早期的非继承自Widget的控件库 1、标签(Label) 由于Label是SpriteBatchCode的子类,所以...
1 2 3 4 5 ... 20
收藏数 4,266
精华内容 1,706
关键字:

2dx继承 cocos