如何获取DisplayObject的颜色(填充)以响应Corona SDK中的触摸等事件?

San*_*gar 3 coronasdk

任何人都可以帮我找出如何在日冕中获得矩形的颜色?那个矩形我已经填充了颜色,所以现在我想在触摸矩形时获得那种颜色.

roy*_*oyi 6

创建矩形:

local rectangle = display.newRect(0, 0, 100, 100)
Run Code Online (Sandbox Code Playgroud)

将您的颜色放在RGBA(您可以省略A)格式的表格中,并将其存储为矩形的"自定义属性":

rectangle.fillColor = {110, 30, 25}
Run Code Online (Sandbox Code Playgroud)

通过unpack函数的魔力,它返回一个表的值,将表传递给setFillColor:

rectangle:setFillColor( unpack(rectangle.fillColor) )
Run Code Online (Sandbox Code Playgroud)

现在你总能得到这样的颜色:

print( unpack(rectangle.fillColor) ) --> 110    30    25
Run Code Online (Sandbox Code Playgroud)

要么

print( rectangle.fillColor ) -- simply returns the table
Run Code Online (Sandbox Code Playgroud)

或者将每种颜色放在一个变量中:

local red, green, blue, alpha = unpack(rectangle.fillColor)
Run Code Online (Sandbox Code Playgroud)

你会看到这对其他东西也会派上用场.

编辑

通过劫持setFillColor函数,想到了另一种很酷的方法:

local function decorateRectangle(rect)
    rect.cachedSetFillColor = rect.setFillColor -- store setFillColor function

    function rect:setFillColor(...) -- replace it with our own function
        self:cachedSetFillColor(...)
        self.storedColor = {...} -- store color
    end

    function rect:getFillColor()
        return unpack(self.storedColor)
    end
end

local rectangle = display.newRect(0, 0, 100, 100)

decorateRectangle(rectangle) -- "decorates" rectangle with more awesomeness
Run Code Online (Sandbox Code Playgroud)

现在您可以使用setFillColor将颜色设置为正常,并使用getFillColor返回它:)

rectangle:setFillColor(100, 30, 255, 255)

print(rectangle:getFillColor())
Run Code Online (Sandbox Code Playgroud)