quick-cocos2d-x 구덩이 밟기 일기

오늘 데모를 흉내내서 기능을 보완하려고 했는데 자기가 썼을 때 구덩이를 만났어요...먼저 코드 보기:
    
local label = cc.ui.UILabel.new({	
    UILabelType = 1,
    text = "Max Score 10",
    font = "fonts/font-issue1343.fnt",
    x = boardSize.width / 2,
    y = boardSize.height * 0.4,
    }):addTo(self.overboard)
      :setAnchorPoint(0.5, 0.5)

내가 label:setString()을 호출했을 때 변화가 없었다. 출력 정보를 보니 label이nil이다!!!나는 이상하게 왔다. 나중에 원본 샘플을 찾아가서 내가 잘못 썼는지 확인해 보았다.코드는 다음과 같습니다.
local label = cc.ui.UILabel.new({
    text = "",
    size = 14,
    color = display.COLOR_BLACK
    }):align(display.LEFT_CENTER, display.left + 60, display.top - 60)
      :addTo(self)

이 코드의 label은nil이 아니라 모두cc를 사용합니다.ui.UILabel.new가 만들어진 게 왜 달라요?원래 문제는 뒤의 함수 호출에서 나왔다.원본 보기:
function Node:addTo(target, zorder, tag)
    target:addChild(self, zorder or self:getLocalZOrder(), tag or self:getTag())
    return self
end
function Node:align(anchorPoint, x, y)
    self:setAnchorPoint(display.ANCHOR_POINTS[anchorPoint])
    if x and y then self:setPosition(x, y) end
    return self
end

ddTo와align은 호출 대상을 되돌려줍니다. setAnchorPoint는 되돌려주지 않습니다. 첫 번째 코드에서 setAnchorPoint () 를 실행한 후 label에 값을 부여하지 않았기 때문에nil입니다.두 번째 코드에서 호출된 함수는 호출 대상을 되돌려주기 때문에 label에 값을 부여했습니다.
addTo는 shortcodes 파일에 있고 align은 NodeEx 파일에 있습니다.shortcodes의 함수는 호출 대상 자체를 되돌려줍니다.
이번 구덩이를 밟아서 저는 addTo와addChild의 차이점을 알게 되었고 shortcodes 사용 기교도 배웠습니다.예를 들어 대상을 만들 때 나중에 변경할 필요가 없을 때 shortcodes에 봉인된 함수를 사용하면 이름을 짓는 과정을 줄일 수 있다.(여러분도 같은 파일에 코드가 많아서 이름 짓기 어려운 경우를 보셨죠- -!)
구덩이 밟기 끝!부족한 점이 있으면 함께 교류하고 성장하자!

좋은 웹페이지 즐겨찾기