返回顶部
首页 > 资讯 > 后端开发 > Python >Lua(3) ——Cocos之_语法糖c
  • 669
分享到

Lua(3) ——Cocos之_语法糖c

语法LuaCocos 2023-01-31 07:01:30 669人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

【唠叨】    在使用lua的时候,cocos2d-x为我们提供了一个 class(classname, super) 这个函数。    它可以让我们很方便的定义一个类,或者继承cocos2d-x的某个类。    PS:class()是co

【唠叨】

    在使用lua的时候,cocos2d-x为我们提供了一个 class(classname, super) 这个函数。

    它可以让我们很方便的定义一个类,或者继承cocos2d-x的某个类。

    PS:class()是cocos2d-x为我们封装的函数,本身Lua没有这个函数。

    基于Lua 5.1。


【Demo下载】

    https://GitHub.com/shahdza/Cocos_LearningTest/tree/master/Lua%E4%B9%8Bclass%E7%B1%BB 




【class】


    class函数是在"cocos2d-x-3.2/cocos/scripting/lua-bindings/script/extern.lua"中定义的。


-- Create an class.

function class(classname, super)

    local superType = type(super)

    local cls


    if superType ~= "function" and superType ~= "table" then

        superType = nil

        super = nil

    end


    if superType == "function" or (super and super.__ctype == 1) then

        -- inherited from native C++ Object

        cls = {}


        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

        end


        cls.ctor    = function() end

        cls.__cname = classname

        cls.__ctype = 1


        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

        -- inherited from Lua Object

        if super then

            cls = clone(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


    在Lua中类的概念就是table表,而上面的函数代码主要做的就是对父类super的表进行拷贝,然后再定义了两个函数 cls.new(...)cls:ctor(...) 。如果我们不了解上面的代码,也是没有关系的,只要我们会使用它就够了。


0、使用方法

    定义一个类:cls = class("类名","父类")

    > 创建实例  :obj = cls.new()

    初始化函数:cls:ctor()    在创建实例的时候,会自动调用

    

    只要掌握这三步骤,对于我们cocos2d-x的开发已经够用了!


1、创建基类

    首先创建一个Hero类,然后重写Hero类的初始化函数Hero:ctor()

    再创建一个Hero类的实例对象Hero.new() ,会自动调用初始化函数Hero:ctor() 。

    测试输出。

    注意:其中ctor()中出现的 self 为实例对象本身,就相当于C++类中的 this 。


    wKiom1RGn37wHdw6AAFXC7srOWg614.jpg



2、继承父类

    在cocos2d-x开发中,经常需要继承引擎中的类,如Layer、Sprite等。

    这里举例,将上面的Hero类修改一下,继承自Sprite

    wKioL1RGoOWAXNLMAAIfl3ox2uQ600.jpg



3、再举个例子:继承Layer类

    我一般习惯在 ctor() 中只声明一些类的成员变量。

    然后再自定义一个函数 create() ,将 new() 进行封装,然后在 create() 中调用 init() 函数进行实例对象的初始化工作。

    这样的好处就是:在使用上就和我在C++中的使用的方式一样了。


 3.1、定义一个继承于Layer的类

wKioL1RGpdHSkzvoAAS4LwqyVUM952.jpg


 3.2、使用方法

    > 创建包含GameLayer层的Scene场景:GameLayer:createScene()

    > 创建一个GameLayer层-----------GameLayer:create()

    > 而在创建GameLayer时,也会调用自定义的初始化函数 init()

    > 类的成员变量,均在 ctor() 中进行声明即可。



--结束END--

本文标题: Lua(3) ——Cocos之_语法糖c

本文链接: https://lsjlt.com/news/191140.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Lua(3) ——Cocos之_语法糖c
    【唠叨】    在使用Lua的时候,cocos2d-x为我们提供了一个 class(classname, super) 这个函数。    它可以让我们很方便的定义一个类,或者继承cocos2d-x的某个类。    PS:class()是co...
    99+
    2023-01-31
    语法 Lua Cocos
  • C#的十种语法糖介绍
    目录语法糖一、自动属性 二、隐式类型(var)三、参数默认值和命名参数四、对象初始化器和集合初始化器五、匿名类和匿名方法匿名类型匿名类型的嵌套匿名类型的限制:匿名方法六、扩...
    99+
    2024-04-02
  • 详解C#中检查null的语法糖
    目录函数参数null检查传统写法ThrowIfNullC# 11的!!语法(已经取消)有关null的一些操作=.[]一些操作结语今天看到已经更新了devblogs,新增的C# 11的...
    99+
    2024-04-02
  • Unity之Luaframework框架lua调用C#方法
    前言 最近,新来的同事写接口,需要知道lua怎么调用C#脚本,趁这个机会也给大家分享一下。道理我也不多少,直接上干货。 框架介绍 本项目采用luaframework+ugui,详情咨...
    99+
    2024-04-02
  • C#中检查null的语法糖有哪些
    这篇文章主要介绍了C#中检查null的语法糖有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#中检查null的语法糖有哪些文章都会有所收获,下面我们一起来看看吧。函数参数null检查传统写法写一个函数的时...
    99+
    2023-06-30
  • c语言学习之数组3
    #include <stdio.h>int main(){  char cArr[] = {'I', 'L', 'O', 'V', 'E', 'C'};  char sArr[] = "ilovec";  int i = siz...
    99+
    2023-01-31
    数组 语言
  • java语法糖之jdk迭代的新特性汇总
    语法糖(Syntactic sugar) 是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并...
    99+
    2024-04-02
  • 详解Objective-C中的语法糖@{}究竟是什么
    最近在技术群里有一个群友提出了一个问题,就是为什么下面代码打印的结果不一样? NSMutableDictionary *mDic1 = [NSMutableDictionary ...
    99+
    2022-05-23
    objective-c 语法糖 @{}
  • JS异步编程之generator与async/await语法糖详解
    目录Generator 异步方案async/awaitGenerator 异步方案 相比于传统回调函数的方式处理异步调用,Promise最大的优势就是可以链式调用解决回调嵌套的问题。...
    99+
    2022-11-13
    JS generator async/await语法糖 JS generator JS async await
  • vue3 setup语法糖之组件传参(defineProps、defineEmits、defineExpose)示例详解
    vue3官方文档  defineProps 和 defineEmits 都是只能在 <script setup>&nbs...
    99+
    2023-01-28
    vue3 setup语法糖 vue3 组件传参
  • javascript之generator生成器函数与asnyc/await语法糖怎么使用
    这篇文章主要讲解了“javascript之generator生成器函数与asnyc/await语法糖怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript之generat...
    99+
    2023-07-05
  • C语言之pragma用法详解
    (0)前言 C语言Pragma 指令的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma 指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或...
    99+
    2023-10-12
    c语言 java linux c++ 开发语言
  • Python 3版本较之前版本语法的一些
    市面上的Python教程基本都是以3.0以下版本来讲解的,python 从3.0之后一些语法都做了写更改,有时候可能会浪费比较多的时间,记录下使用过程中遇到的情况以备后查。 1、Print (1)需要加括号 (2)打印文件重定向 (1)pr...
    99+
    2023-01-31
    版本 语法 Python
  • C++11语法之右值引用的方法
    这篇文章主要讲解了“C++11语法之右值引用的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++11语法之右值引用的方法”吧!一、{}的扩展在原先c++的基础上,C++11扩展了很多初...
    99+
    2023-06-29
  • C语言之strtol函数用法详解
    strtol 函数用法 strtol是一个C语言函数,作用就是将一个字符串转换为长整型long,其函数原型为: long int strtol (const char* str,...
    99+
    2024-04-02
  • 算法15. 三数之和_(c语言版)
    1. 题目描述给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums...
    99+
    2023-06-03
  • c语言输入3个数输出最大值的方法
    小编给大家分享一下c语言输入3个数输出最大值的方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!方法:首先使用scanf()接收从键盘输入的三个数;然后使用“if else”语句比较三个数的大小,获得最大值;最后使用pri...
    99+
    2023-06-14
  • 解析之C++的列表初始化语法
    目录聚合初始化大括号省略(brace elision)std::initializer_list的另一个故事连《Effective Modern C++》都弄错了的规则构造函数的两步...
    99+
    2024-04-02
  • C++入门语法之函数重载详解
    目录写在前面1 函数重载的概念2 函数重载原理总结写在前面 关于C语言的编译与链接不懂的可以看一下下面的文章,先回顾一下以前的知识。 详解C语言的编译与链接 1 函数重载的概念 函数...
    99+
    2024-04-02
  • C语言算法练习之佩奇借书
    目录1. 问题描述2. 题目分析3. 算法设计4. 代码实现5. 算法升级1. 问题描述 佩奇有5本新书,要借给A、B、C这3位小朋友,若每人每次只能借1本,则可以有多少种不同的借法...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作