0

コロナのこのluaコードの論理的な欠陥を誰かが見ることができますか?

概念は、新しい「拡張」表示オブジェクト(MyGroup:new(...)など)を作成し、その後、親内の位置のパーセンテージを使用してオブジェクトをこれに挿入できることです(したがって、pixcels countsを使用する必要はありません)。 。

問題-問題は、描画されるオブジェクトが大まかに正しい場所にあるが、少しだけ外れていることです。「self:insert(displayO)」の行で親の座標が変わったせいかもしれません。

main.lua

------------------------------------------------------------------------------
-- HELPERS 
------------------------------------------------------------------------------
function rpadString (str, len, char)
    if char == nil then char = ' ' end
    return  (str .. string.rep(char, len - #str))
end

function drawBorder(obj)
    local b = obj.contentBounds 

    local myRectangle = display.newRect(b.xMin, b.yMin, obj.contentWidth, obj.contentHeight)
    -- print ("Rect X,Y,Width,Height: ", b.xMin, b.yMin, obj.contentWidth, obj.contentHeight)
    myRectangle.strokeWidth = 1
    myRectangle:setFillColor(140, 140, 140, 1)
    if obj.gcGroupName then
        -- Group
        myRectangle:setStrokeColor(100, 250, 180)
        myRectangle.strokeWidth = 1
    else
        -- Image/Rect
        myRectangle:setStrokeColor(250, 180, 180)
        myRectangle.strokeWidth = 2
    end


end

function dumpDisplayObjects(doParent, level)
    drawBorder(doParent)
    if doParent.numChildren then
        for i=doParent.numChildren,1,-1 do
            local doChild = doParent[i]
            dumpDisplayObjects(doChild, level + 1)
        end
    end
end

------------------------------------------------------------------------------
-- MAIN 
------------------------------------------------------------------------------
require "MyGroup"

print "RUNNING ........................................."
display.setStatusBar( display.HiddenStatusBar )

-- Create Toolbar Area at Bottom
local mainGroup = MyGroup:new("Main Group", 0, 0, display.contentWidth, display.contentHeight)
local toolbarArea = MyGroup:new("Inventory", 0,0,0,0)
mainGroup:GcInsertLRTB(toolbarArea, 0, 100, 80, 100, "Inventory")    -- Percentages Used

-- Draw Rectangle 1
local toolbarAreaImage = display.newImage( "toolbarArea_button.png", 0, 0)
toolbarArea:GcInsertLRTB(toolbarAreaImage, 0, 20, 0, 100, "Inventory Button")

-- -- Setup Toolbar Group
-- local toolbarAreaToolbar = MyGroup:new("InventoryToolbar", 0, 0, 1, 1)
-- toolbarArea:GcInsertLRTB(toolbarAreaToolbar, 20, 100, 0, 100, "Toolbar")
--  -- 
-- -- Draw Rectangle 2
-- local rect2 = display.newRoundedRect(0, 0, 1000, 1000, 5)
-- rect2.strokeWidth = 1
-- rect2:setStrokeColor(140, 140, 140)
-- rect2:setFillColor(140, 140, 140, 100)
-- toolbarAreaToolbar:GcInsertLRTB(rect2, 0, 100, 0, 100, "Rect2")

-- Debug Display
dumpDisplayObjects(toolbarArea, 1)

MyGroup.lua

MyGroup = {}

function MyGroup:new(name, left, top, targetWidth, targetHeight)
    -- Inherit from Group
    myGroup = display.newGroup()

    -- Work Around (Dummy Display Object Insertion) (See Note 1)
    myGroup.dummyDO = display.newCircle( myGroup, 10, 10, 1 )
    myGroup.dummyDO:setFillColor(1,1,1,1)
    myGroup.dummyDO.debugComment = "Dummy Display Object"
    myGroup:insert(myGroup.dummyDO)

    myGroup.myGroupName = name      
    myGroup.debugComment = name
    myGroup.targetWidth = targetWidth
    myGroup.targetHeight = targetHeight
    myGroup.x = left
    myGroup.y = top


    function myGroup:GcInsertLRTB(displayO, leftP, rightP, topP, bottomP, debugComment)
        self:insert(displayO)   -- <=== DOES THIS UPSET THINGS FOR THE PARENT???

        -- Remove Work Around Dummy Display Object (See Note 1)
        if self.dummyDO then 
            self.dummyDO:removeSelf() 
            self.dummyDO = nil
        end

        displayO:setReferencePoint(display.TopLeftReferencePoint)
        displayO.x = leftP * 0.01 * self.targetWidth
        displayO.y =  (topP * 0.01) * self.targetHeight

        -- Scale Display Object (or set target's if adding another MyGroup)
        if not displayO.myGroupName then
            -- Not a MyGroup
            local xScale = (self.targetWidth * (rightP - leftP)/100) / displayO.width  
            local yScale = (self.targetHeight * (bottomP - topP)/100) / displayO.height
            displayO:scale(xScale, yScale)
        else
            -- Inserted object is a MyGroup
            displayO.targetWidth = self.targetWidth * (rightP - leftP)/100
            displayO.targetHeight = self.targetHeight * (bottomP - topP)/100 
            displayO:scale(1,1)  -- TODO: Probably don't need this
        end

    end

    return myGroup
end

-- Class Variables

-- Class Methods

return MyGroup
4

1 に答える 1

0

問題はおそらくバグだと思います:「myGroup:setReferencePoint(display.TopLeftReferencePoint)によりアイテムが移動します」

あれは:

  • AnscaMobile のブログには次のように記載されています。
  • 既存のデフォルトをグループに適用すると、グループ内のアイテムの位置が変更されるべきでない場所が変更されます。たとえば、コード: "myGroup:setReferencePoint(display.TopLeftReferencePoint)

そのため、setReferencePoint が非グループにのみ適用されていることを確認するために if/then チェックを実行するために、回避策をクラスに含める必要がある場合があります。

ケース #14049 として anscamobile で発生

于 2012-05-04T00:05:18.530 に答える