我想添加自定义方法来显示对象,例如预编译方法,例如“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吗?
答案 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")