Corona SDK如何向displayobject添加自定义方法

时间:2014-07-06 15:32:59

标签: oop lua corona

我想添加自定义方法来显示对象,例如预编译方法,例如“setFillColor”

我写了下面的代码,但是没有用;但是,它解释了我需要什么

function display:foo(bar)
    print(bar)
end


local myRectangle = display.newRect( 0, 0, 150, 50 )
myRectangle:foo("something to be printed")

我希望“foo”方法为所有DisplayObject做好准备,而不仅仅是myRectangle吗?

3 个答案:

答案 0 :(得分:3)

以下示例。未经测试但应该工作。然后它将可用于所有newRect调用。你必须为你想要使用的所有显示。*调用执行此操作

local oldNewRect = display.newRect

function display.newRect( ... )
    local rect = oldNewRect( ... )

    function rect:foo( str )
        print( str )
   end

    return rect
end

-- usage

local rect = display.newRect( 0, 0, 40, 40 )
rect:foo( "hello" ) -- prints "hello"

答案 1 :(得分:2)

我不想替换库中的任何方法,因为这意味着创建的每个对象(而不仅仅是您创建的对象)都会受到影响,并且这可能会产生意想不到的副作用。所以我主张简单地创建一个函数,为你创建的每个实例添加所需的方法。这个方法也可以作为一个签名,这个显示对象是你的一个"你的" (不是一个人创造的"在幕后"由Corona)。例如,

function myNewCustomRect(...)
    local obj = display.newRect(...)
    obj.foo = function (self, a,b,c)
        -- self is obj, although obj is an upvalue so can use directly too
        print(self, obj, a,c,b)
    end
    return obj
end

yourRect = myNewCustomRect(0, 0, 150, 50)
yourRect:foo(1,2,3) -- first two data printed should be same

答案 2 :(得分:-1)

有点复杂,因为我们需要劫持display.newRect调用。以下是如何做到这一点:

-- Store the old method
local oldNewRect = display.newRect

display.newRect = function(...)
    local oDisplayObject = oldNewRect(...)

    oDisplayObject.foo = function(oDisplayObject, sText)
       -- Do something with the display object
       -- Print the text passed as argument
       print(sText)
    end
    return oDisplayObject
end

local myRectangle1 = display.newRect( 0, 0, 150, 50 )
myRectangle1:foo("something to be printed")

local myRectangle2 = display.newRect( 0, 0, 150, 50 )
myRectangle2:foo("something to be printed")