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

时间:2012-06-28 06:20:40

标签: corona

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

4 个答案:

答案 0 :(得分:6)

创建矩形:

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

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

rectangle.fillColor = {110, 30, 25}

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

rectangle:setFillColor( unpack(rectangle.fillColor) )

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

print( unpack(rectangle.fillColor) ) --> 110    30    25

print( rectangle.fillColor ) -- simply returns the table

或将每种颜色放入变量中:

local red, green, blue, alpha = unpack(rectangle.fillColor)

你会看到这对其他事情也会派上用场。

修改

通过劫持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

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

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

print(rectangle:getFillColor())

答案 1 :(得分:0)

简而言之:你无法“获得”填充色。你必须自己保存..

答案 2 :(得分:0)

这也是获取矩形颜色的另一种方法。

  1. 创建一个颜色表

    local colors = {    {255,0,0},  {0,0,255},  {0,255,0},  {255, 255, 0},  {255,0,255}}
    
  2. 然后在创建矩形时,使其如下所示:

    local rect = display.newRect(0, 0,100,100)
    rect.color = math.random(1,5)
    rect:setFillColor(unpack(colors[rect.color]))
    
  3. 现在,如果你想获得rect的颜色就像这样

    local appliedcolor = colors[rect.color];
    
  4. 感谢https://forums.coronalabs.com/topic/18414-get-fill-color-of-an-object/

答案 3 :(得分:0)

可以使用object._properties检查DisplayObject的许多属性值,包括填充颜色的RGB值。在Build 2014.2511中添加了DisplayObject自省,即在提出此问题两年后。

信息以JSON格式的字符串形式返回,因此json.*库用于提取感兴趣的属性(属性)。

假设一个名为object的DisplayObject,您可以执行以下操作:

local json = require( "json" )
local decoded, pos, msg = json.decode( object._properties )
if not decoded then
    -- handle the error (which you're not likely to get)
else
    local fill = decoded.fill
    print( fill.r, fill.g, fill.b, fill.a )
end