3

谁能帮我找出如何在电晕中获得矩形的颜色?我已经用颜色填充了那个矩形,所以现在我想在触摸矩形时得到那个颜色。

4

4 回答 4

7

创建你的矩形:

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())
于 2012-06-28T10:35:45.113 回答
0

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

于 2013-11-13T11:30:32.963 回答
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. 现在,如果您想获得矩形的颜色,请这样做

    local appliedcolor = colors[rect.color];
    

感谢https://forums.coronalabs.com/topic/18414-get-fill-color-of-an-object/

于 2016-01-16T07:23:21.783 回答
0

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

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

假设 DisplayObject 称为object,您将执行以下操作:

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
于 2017-04-12T01:02:08.943 回答