cocos2dx2.2.2 自带的extern.lua的一个bug

最近在做核心战斗,大量用到了类,不得不说cocos2dx 2.2.2 自带的类方法真是写的太不好了,有一个很初级的bug,另外缺少超类方法。

初级bug是原作者在new方法里,连:和.都没搞清楚。

重新写了一下该文件:

function super(TmpClass)

return TmpClass.super

end

--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

时间: 2024-10-07 03:02:21

cocos2dx2.2.2 自带的extern.lua的一个bug的相关文章

toLua消息监听和发送(区别于LuaframeWork框架自带的Events.lua)

基于uLua/toLua的Luaframework的lua框架的事件系统 github地址:https://github.com/jarjin/LuaFramework_NGUI 用法与Luaframework框架自带的Events.lua的用法一致,解决了回调时报错不抛错误的问题. local _Events = {} local EventDispatcher = {} function EventDispatcher:ctor( ) _Events = {} end --[[ 表结构 {

解决Delphi7的自带的UTF-8编码转换函数BUG

Delphi7及其以下版本的 VCL 只支持 Ansi, 所以... WideString 与 UTF8String (定义与 AnsiString 相同) 并没有办法正确的在 VCL 中显示 Delphi7自带的utf-8转换函数遇到其无法识别的字符串就返回空. 用以下转换函数可以解决这个bug unit util_utf8; interface uses Windows; type UTF8String = AnsiString; function AnsiToWide(const S: A

nginx源码编辑带第三方模块lua

系统环境: lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description:    Ubuntu 12.04.5 LTS Release:        12.04 Codename:       precise 下载nginx_lua_module 下载ngx_devel_kit 安装 luajit apt-get install libluajit-5.1-dev luajit  ls /opt/

大佬带你深入浅出Lua虚拟机

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由鹅厂优文发表于云+社区专栏 作者:郑小辉 | 腾讯 游戏客户端开发高级工程师 写在前面:本文所有的文字都是我手工一个一个敲的,以及本文后面分享的Demo代码都是我一行一行码的,在我之前已经有非常多的前辈研究过Lua虚拟机了,所以本文很多思想必然是踏在这些巨人的肩膀上的. ? 本文标题是"深入浅出Lua虚拟机",其实重点在浅出这两字上.毕竟作者的技术水平有限.但是听说名字要起的屌一点文章才有人看,故而得名. ? 谨以此文奉

[lua大坑]一个莫名其妙的lua执行时崩溃引出的堆栈大小问题

这是一个坑,天坑!如果不是我随手删除了一个本地变量,这个问题直到现在我应该也没有头绪. 首先,写了一个新的lua脚本,载入,执行.在执行的时候,出了这么一个莫名其妙的问题: EXC_BAD_ACCESS 莫名其妙是不是?如果是某个函数访问了nil,或之类的lua语法范围内的问题,pcall肯定会触发错误处理函数打出log.而如果是调用的c++函数出现了错误,那也应该崩溃在那个函数相关的地方.在这种地方崩溃,让人摸不着头脑. 没关系,本资深程序员,什么bug不是谈笑风生,来,log大法.通过log

笔记:利用Cocos2dx 3.3 lua 做一个动作类游戏(一)

在这之前,声明一下: 做不完我是小狗. 没办法,没毅力和恒心,之前的那个Quick Cocos2dx做的横版过关游戏的demo已经转成了3.3的版本了,其实也算是个半成品,战斗,UI啥的都有了,呵呵. 本次DEMO要达成的目的如下: 1 熟悉Cocos2dx 3.3 - lua 2 使用Joystick 3 完成简单的怪物AI 4 尝试扩展现有的api(可选) 嗯,差不多就以上了. 今天第一次笔记. 当前完成的任务有如下: 1 使用新的player新建项目 2 在场景中添加Sprite以及其帧动

使用lua实现一个简单的事件派发器

设计一个简单的事件派发器,个人觉得最重要的一点就是如何保证事件派发过程中,添加或删除同类事件,不影响事件迭代顺序和结果,只要解决这一点,其它都好办. 为了使用pairs遍历函数,重写了pairs(lua 5.2以上版本不需要): stdext.lua local _ipairs = ipairs function ipairs(t) local mt = getmetatable(t) if mt and mt.__ipairs then return mt.__ipairs(t) end re

LUA 数据比较BUG?????是不是BUG大佬帮看看

function test(money) for i=1,0.1,-0.1 do if tonumber(money) >= tonumber(i*9) then return i end end return 0 end print(test(0.9)) //执行结果 0 print(_VERSION) //执行结果 Lua 5.3 //输出结果0 预期结果应该是0.1才对吧 求大佬解释解释, 原文地址:https://www.cnblogs.com/MYDoraemon/p/11355703

Behavior Tree 用 Lua 实现一个最简行为树

1 local SELECTOR = 1 2 local SEQUENCE = 2 3 local CONDITION = 3 4 local ACTION = 4 5 6 local function Traverse(node, ...) 7 local t = node.type 8 if t == SELECTOR then 9 for i=1, #node do 10 if Traverse(node[i], ...) then 11 return true 12 end 13 end