【学习笔记】【Cocos2d-x Lua脚本开发】Lua中创建自定义类

Cocos2d-x-Lua示例项目HelloLua(1) 建议先制定学习计划,根据学习计划把知识点关联起来,形成一个系统化的知识体系。同时我还搜集整理2020年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含。同时我还搜集整理2020年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含。但是如果你仅仅是看一遍,而不去学习和深究。 阅读详情

Lua中创建自定义类

Lua自定义类:一个重要的文件extern.lua

--Create an class.
function class(classname, super)
    --获取super类型
    local superType = type(super)
    --cls是最终创建出来的class
    local cls
    
	--[[
	-----------------------------------------------------------------
	构造class的方式主要体现为两种:
	    1.通过传入一个function类型的函数;
	    2.通过传入一个table类型的表;
	因此,在次方法的讨论中,主要围绕着super的类型进行展开
	-----------------------------------------------------------------
	说明:
	    1.在Cocos2d-x2.1.3引擎,TestLua下的Ball.lua文件中有
	    通过传入function类型函数来创建Ball对象的示例:
	
			--继承部分 begin
			Ball = class("Ball", function(texture)
    			return CCSprite:createWithTexture(texture)
			end)
			Ball.__index = Ball
	        --继承部分 end
	
		--子类的成员数据、方法定义 begin
	        function Ball:radius()
	            --implementaion
	        end
	
	        --Ball的实例创建方法
		function Ball.ballWithTexture(aTexture)

	            if(aTexture == nil) then
		        cclog("in ballWithTexture aTexture == nil")
	            end

		    local ball = Ball.new(aTexture)
		    ball:autorelease()
		    return ball
		end
	        --others
		--子类的成员数据、方法定义 end
	
	    2.当然,也有可能已经自定义了一个Lua类型的“基类”对象,它是table类型,
		比如说role = { move = function print("move!") end},那么,
		有如下的继承方式:
			Ball = class("Ball", role)
	-----------------------------------------------------------------
	--]]
	--接下来看看怎么实现的
	--首先,对super类型进行判断,主要围绕着function类型和table类型展开
	--如果superType不是这两种类型之一,那么superType和super被设置为nil
    if superType ~= "function" and superType ~= "table" then
        superType = nil
        super = nil
    end
	
    --如果是利用函数创建或者是继承自一个table类型的类(table类型的类的__ctype是1)
    if superType == "function" or (super and super.__ctype == 1) then
        -- inherited from native C++ Object
        cls = {}
		
	--如果super是table类型,则根据table给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
	--否则使用super作为cls的__create键的值
            cls.__create = super
        end
		
	--无论是function类型还是table类型,都设置以下键值
        cls.ctor    = function() end
        cls.__cname = classname
        cls.__ctype = 1
		
	--设置cls的new函数
        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
	--所有的super为nil的情况(即非function/table类型)会跳转至此
            cls = {ctor = function() end}
        end
	--super为nil的情形下,还会增加如下键值
        cls.__cname = classname
        cls.__ctype = 2 -- lua
        cls.__index = cls
		
	--同时设置new函数
        function cls.new(...)
            local instance = setmetatable({}, cls)
            instance.class = cls
            instance:ctor(...)
            return instance
        end
    end

    return cls
end

--让node对象循环执行一个sequence动作,这个动作由时间延迟和回调函数组成,完成schedule的设计
function schedule(node, callback, delay)
    local delay = CCDelayTime:create(delay)
    local callfunc = CCCallFunc:create(callback)
    local sequence = CCSequence:createWithTwoActions(delay, callfunc)
    local action = CCRepeatForever:create(sequence)
    node:runAction(action)
    return action
end

--delay延迟后,让node对象执行callback函数
function performWithDelay(node, callback, delay)
    local delay = CCDelayTime:create(delay)
    local callfunc = CCCallFunc:create(callback)
    local sequence = CCSequence:createWithTwoActions(delay, callfunc)
    node:runAction(sequence)
    return sequence
end





创建自定义类DeapSeaSprite

注意,使用过程中需要向项目中添加extern.lua文件

--DeapSeaSprite.lua

require("extern")

--DeepSeaSprite
DeepSeaSprite = class("DeepSeaSprite", function(filename)
    return CCSprite:createWithTexture(filename)
end)
--用于读访问索引
DeepSeaSprite.__index = DeepSeaSprite

function DeepSeaSprite.deepSeaSpriteWithTexture(filename)

    if(filename == nil) then
        print("in DeepSeaSprite.deepSeaSprite filename == nil")
    end
    
    local deepseasprite = DeepSeaSprite.new(filename)
    return deepseasprite
end


自定义类使用

    --测试Lua中创建自定义类
    --DeepSeaSprite.lua文件引入
    require("DeepSeaSprite")
    
    --使用addImage方法向纹理管理器中添加"land.png"图片,该调用会返回land.png图片的纹理
    local texture = CCTextureCache:sharedTextureCache():addImage("land.png")

    local dss001 = DeepSeaSprite.deepSeaSpriteWithTexture(texture)
    dss001:setPosition(100, 100)
    layerForWorld:addChild(dss001)


运行结果


【COCOS2D-X LUA学习】 场景创建 从今天开始用lua进行cocos2dx游戏开发,之前一直是用c++进行开发,在如今手游竞争激烈的情况,时间决定成败,lua的支持热更新(免去平台审核的时间),小巧,快速高效,所以lua开发是手游不可少的利器,接下来会精力把重点放在lua上面。 首先cocos2dx实现在appdelegate.cpp中通过c++调用lua,作为调用lua的入口,代码如下: bool AppD 阅读详情

相关推荐

使用BabeLua在cocos2d-x中编辑和调试Lua

使用BabeLua在cocos2d-x中编辑和调试Lua代码 BabeLua是一款基于VS2012/2013的Lua集成开发环境,具有Lua语法高亮,语法检查,自动补全,快速搜索,注入宿主程序内对Lua脚本进行调试,设置断点观察变量值,查看堆栈信息等功能。

babestudio的专栏 1万+

Cocos2d-x教程 Lua脚本(3) Lua中如何创建"类"与"对象"

欢迎加入Cocos2d-x 交流群:193411763 源码下载地址:http://download.youkuaiyun.com/detail/u012945598/6692125 .lua文件在Resouces文件夹下,名为test.lua Lua是一门面向过程的语言,并没有面向对象语言中的"类"的概念,但是我们可以通过Lua中的”Metatable(元表)“来模拟一个”类“,关键...

xidajiancun 421

Cocos2d-x 脚本语言Lua介绍,大厂面试必备

L0203数组 http://www.eoeandroid.com/thread-320725-1-1.html L0301复制表的方式面向对象 http://www.eoeandroid.com/thread-320729-1-1.html L0302函数闭包的方式面向对象 http://www.eoeandroid.com/thread-320732-1-1.html L0401在Cocos2d-x中使用Lua语言 http://www.eoeandroid.com/thread-320733-1-1.

m0_66264569的博客 3657

cocos2dx_3.3 lua类的创建

学习一下cocos2dx 3.3 lua类的创建,记录一下自己的学习方法 local TouchSprite = class("TouchSprite", --继承cc.Sprite function(fileName) return cc.Sprite:create(fileName) end ) TouchSprite.__index = Tou

CDAmber的专栏 858

[寒江孤叶丶的Cocos2d-x之旅_13]Cocos2d-x 3.2版本以上LUA脚本加密解决方案【12.19更新】

原创文章,欢迎转载,转载请注明:文章来自[寒江孤叶丶的Cocos2d-x之旅系列] 博客地址:http://blog.youkuaiyun.com/qq446569365 使用LUA脚本开发游戏有着诸多的优势,动态更新,不需要考虑内存和数据类型等等。但是LUA脚本的安全性问题却似的许多开发者非常苦恼。 我这两天因为LUA脚本加密的问题苦恼了好久,经过了两天的努力,竟然在Cocos2d的官方找

寒江孤叶丶的游戏生涯 6468

cocos2d-x 以c++为主 引入LUA 与动态更新

cocos升级到2.1.14之后,越来越能看到开发团队对LUA的重视,恨不得除了个别组件用cpp处理,其他的内容都用LUA来写。 LUA的好处是很多的,比如更新方便,开发快捷,学习成本低等等。 这里,简单说几个cocos2d-x中使用LUA的问题。 1,如何使用LUA脚本 (0)创建工程时,勾选支持LUA (1)在需要使用LUA脚本的cpp文件里,加入#include "cocos2dx

许佳音的全栈工程师成长之路 5103

cocos2d-x-lua如何导出自定义类到lua脚本环境

这篇教程是基于你的工程是cocos2d-x-lua的项目,我假设你已经完全驾驭cocos-x/samples/Lua/HelloLua工程,基本明白lua和c++互调的一些原理。 我们的目的是要在lua中使用我们自己定义的类,并且这个类要导出到我们自己的module,意思就是说不是追加到LuaCocos2d.cpp里面,目的是为了使我们的module和coco2d的module完全分离,这样以后...

weixin_30614587的博客 180

Cocos2d-x与Lua融合开发实战项目详解

尽管tolua++支持全自动绑定,但在大型项目中往往需要精细控制哪些类/方法应被暴露,以及如何修改默认行为。这就依赖于.pkg配置文件和自定义宏指令。排除不需要的方法使用%ignore忽略特定函数:pkg重命名方法以符合Lua习惯利用%rename修改Lua端名称:pkg注入自定义逻辑在调用前后插入代码块:pkg%{%}支持可变参数函数绑定对于类型函数,需特殊处理:pkg。

weixin_31869917的博客 1111

lua类的定义

lua类的定义 代码如下: local clsNames = {} local __setmetatable = setmetatable local __getmetatable = getmetatable function Class(className, baseCls) if className == nil then BXLog.e("classNa...

qq_14914623的博客 1085

Lua与Cocos2d-x结合使用CocosBuilder的实战指南

在Cocos2d-x中,加载ccbi文件(CocosBuilder界面文件)主要依赖于类提供的接口。能够解析ccbi文件并将其中定义的UI元素、层级关系和逻辑转换成Cocos2d-x场景中的节点(Node)和组件。加载ccbi文件的核心API是,它接受一个文件路径字符串作为参数,并返回一个根节点。这个节点可以进一步被添加到游戏场景中。

weixin_29443363的博客 1114

Cocos2d-x与Lua实现的三消游戏开发指南

Cocos2d-x是一个开放源代码的游戏开发框架,以其高性能、强大的跨平台能力和活跃的社区支持而著称。它主要用于开发2D游戏,提供了易于理解和使用的API接口,开发者可以快速上手。Cocos2d-x底层采用C++编写,同时也支持Lua和JavaScript脚本语言,使得游戏逻辑的编写变得更加灵活多样。Lua提供了多种控制结构,如if-else条件语句、while和for循环。这些控制结构用于逻辑判断和重复执行某段代码,与其它编程语言的控制结构类似,但更为简洁:-- if-else条件语句else。

weixin_42594419的博客 1157

Lua 面向对象基础-类和对象(一)

lua 中的类和对象 lua是一门面向过程的脚本语言,lua语言对于事物、结构通通描述为 table,而类和对象作为面向对象语言的核心,在lua中也是通过table 这一结构来模仿和描述;table 这一结构本身即可描述对象,即实例,而类的定义在lua中需要table来仿造

wojiaomtaa的博客 2434

麒麟 ARMv10 SP3 安装 Oracle 19c 官方文档 或 教程

在麒麟ARMv10 SP3系统上安装Oracle 19c需要特别注意架构兼容性。

qq_43032338的博客 2936

【COCOS2DX-LUA 脚本开发之四】使用tolua++编译pkg,从而创建自定义类让Lua脚本使用

此篇基本【COCOS2DX(2.X)_LUA开发之三】在LUA中使用自定义精灵(LUA脚本与自创建类之间的访问)及LUA基础讲解 在Lua第三篇中介绍了,如何在cocos2dx中使用Lua创建自定义类供Lua脚本调用使用,当时出于Himi对Lua研究不够深入,所以当时使用了笨方法手动添加的方式进行的,那么本篇将介绍利用tolua++快速将我们自定义的c2dx类嵌入,供 lua脚本使用。 首先介

linking530的专栏 5320

从零到一:在RK3588 Android12上实战RTL8723DU WiFi蓝牙双模驱动移植

本文详细介绍了在RK3588 Android12系统上实战RTL8723DU WiFi蓝牙双模驱动移植的全过程。从驱动源码获取与修改、系统级集成与编译,到调试与性能优化,提供了完整的解决方案。特别针对USB接口适配、电源管理和蓝牙共存等关键问题给出了具体代码示例,帮助开发者快速完成驱动适配并提升设备稳定性。

weixin_28703489的博客 324

【HarmonyOS】ArkUI的组件扩展

ArkuI的组件扩展主要是通过等装饰器来对于一些常用的自定义组件进行封装, 来简化UI开发流程, 提高自定义组件的可复用性。

2302_79763237的博客 1166

COCOS2DX-LUA 脚本开发 使用tolua++编译pkg,从而创建自定义类让Lua脚本使用

本站文章均为 李华明Himi 原创,转载务必在明显处注明:(作者新浪微博: @李华明Himi )  转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/lua1/1259.html                    此篇基本【COCOS2DX(2.X)_LUA开发之三】在LUA中使用自定义精灵(LUA脚本与自创

zwcwu31的专栏 7857

地平线天工开物AI开发平台实战:从量化训练到模型部署的完整指南

本文提供了地平线天工开物(OpenExplorer)AI开发平台的实战指南,详细解析了从量化训练到模型部署的完整流程。文章重点对比了量化感知训练(QAT)与训练后量化(PTQ)两条核心路径的优劣与适用场景,并分享了图像分类模型PTQ部署的实战经验与常见问题调试技巧,旨在帮助开发者高效地将AI模型部署到地平线AI芯片上。

weixin_29046035的博客 456

Cocos2d-x教程 Lua脚本(1) 如何在Cocos2d-x中使用Lua脚本

Cocos2d-x 中Lua脚本的初级应用。 有关Lua脚本语言的基本语法讲解请参考 : http://blog.youkuaiyun.com/u012945598/article/details/17116939 关于Cocos2d-x 2.20以上版本如何创建基于Lua的项目请参考: http://blog.youkuaiyun.com/u012945598/article/details/17115875

Cocos2d-x,IOS,游戏,开发/交流/学习/资源 马宗扬 9812

基于RK3588边缘计算平台的人数统计系统设计与实现

针对人数统计场景优化的YOLOv5模型完整的模型转换和部署流程高效的嵌入式推理优化方案低成本、低功耗的部署方案实时性强,满足工业应用需求可扩展性好,适配多种应用场景引入注意力机制,提高小目标检测能力结合多模态信息,增强系统鲁棒性开发可视化管理平台,提升用户体验随着边缘计算和AIoT技术的快速发展,基于深度学习的智能视觉系统必将在更多领域发挥重要作用。本项目为相关应用的开发和部署提供了有价值的参考,为推动人工智能技术的产业化应用做出了积极贡献。

LXY_LOVE36的博客 143

怎样在Cocos2d-x中使用Lua脚本

版权声明:本文为博主原创文章。未经博主同意不得转载。 https://blog.youkuaiyun.com/u013321328/article/details/25699545 笔者使用的...

weixin_30244681的博客 436

FPGA 学习笔记:Vivado 配置IO引脚约束

FPGA 学习笔记:Vivado 配置IO引脚约束

坚韧与专注 2万+

【教程】使用ipagurd打包与混淆Cocos2d-x的Lua脚本

本文将介绍如何使用ipagurd工具对Cocos2d-x中的Lua脚本进行打包与混淆,以及在iOS应用开发中的实际应用。我们将以Cocos2d-x-2.2.1 samples中的HelloLua为例,详细展示整个处理流程,并提供相应的代码案例演示。通过本文的介绍,读者可以了解到如何使用Squish工具对Cocos2d-x中的Lua脚本进行打包与混淆处理。这些操作可以有效增强应用代码的安全性,防止恶意篡改和盗版行为。此外,我们还介绍了IPA的重签名和发布流程,帮助开发者更好地管理应用的发布过程。

博客简介 2129

基于STM32设计的智能水产养殖系统(华为云IOT)(152)

当前设计的智能水产养殖系统主控芯片采用STM32F103RCT6,可以实现对水位、水温、水混浊度和PH值等参数的监测和控制,并且支持定时投喂功能。通过连接华为云物联网平台,将传感器数据上传到服务器,并通过Qt设计的Android手机APP来获取设备上传的数据,从而实现对养殖环境的远程监测和控制。

8824

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Learning Lua Programming (4) Cocos2d-x中Lua编程(一)

刚开始接触cocos2d-x 下的Lua编程,主要参看了李明华大神的博客中的介绍,http://blog.youkuaiyun.com/xiaominghimi/article/category/1155088 大概了解了一下,下面这篇博客主要记录一下如何在Cocos2d-x项目中使用Lua进行开发,还有在Lua中如何使用自定义的精灵类(Lua脚本和自创建类之间的访问)这两个内容;这些内容在李明华大神的博客中

小邓笔记 3826

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: 【学习笔记】【Cocos2d-x Lua脚本开发】如何使用Lua脚本调用自定义类
下一篇: 【学习笔记】Cocos2d-x Lua脚本引擎之HelloLua分析笔记
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值