-- 被选择节点显示高亮框 cc.RectNode = { } function cc.RectNode:create(node) local glNode = gl.glNodeCreate() glNode:setAnchorPoint(cc.p(0.5, 0.5)) function glNode:setNode(node) local function onNodeEvent(node , eventType) if eventType == cc.NodeEvent.OnExit then if self.Node == node then self.Node = nil; end end end if node then node:addNodeEventListener(onNodeEvent) end self.Node = node; end glNode:setNode(node) local material3d = cc.MaterialCache:getInstance():load("core/preload/shaders/ccDefault.material#ShaderPosition_uColor3D"); cc.Default2DMaterials:getInstance():bindValue(material3d:getParameter("CC_MVPMatrix") , "WORLD_VIEW_PROJECTION_MATRIX"); local function primitivesDraw(transform, transformUpdated) local node = glNode.Node; if not tolua.isnull(node) then cc.DrawPrimitives.setMaterial(material3d); -- 绑定相机、世界矩阵 cc.DrawPrimitives.setCamera(node:getActiveCamera()); cc.DrawPrimitives.setWorldTransform(cc.Mat4:identity()); -- 画矩形 gl.lineWidth( 1 ) cc.DrawPrimitives.drawColor4B(0, 255, 0, 255) cc.DrawPrimitives.drawBoundingBox(node:getSelectBox()) -- 状态恢复 gl.lineWidth(1) cc.DrawPrimitives.drawColor4B(255,255,255,255) cc.DrawPrimitives.setPointSize(1) -- 材质状态恢复 cc.DrawPrimitives.setCamera(nil); cc.DrawPrimitives.setMaterial(nil); end end glNode:registerScriptDrawHandler(primitivesDraw) return glNode end