CCClippingNode和Layout 裁剪有冲突

– cclog
cclog = function(…)
print(string.format(…))
end

– for CCLuaEngine traceback
function G__TRACKBACK(msg)
cclog("----------------------------------------")
cclog(“LUA ERROR: " … tostring(msg) … “\n”)
cclog(debug.traceback())
cclog(”----------------------------------------")
end

function Glittering(mSprite)
local De_Stencil = CCSprite:create(“Image_EquipLight.png”)
local blendFunc = ccBlendFunc()
blendFunc.src = GL_ONE_MINUS_DST_COLOR
blendFunc.dst = GL_ONE
De_Stencil:setBlendFunc(blendFunc)

local mSpriteCopy = mSprite:clone()
local ms = tolua.cast(mSpriteCopy:getVirtualRenderer(),“CCSprite”)

local tbSize = mSprite:getContentSize()
local x,y = mSprite:getPosition()
local mx = x - tbSize.width/2
local my= y - tbSize.height/2

local clipe = CCClippingNode:create()
ms:setPosition(ccp(tbSize.width/2,tbSize.height/2))
De_Stencil:setPosition(ccp(- 50, -50))
clipe:setStencil(ms)
clipe:setAlphaThreshold(0)
clipe:setPosition(ccp(-tbSize.width/2,-tbSize.height/2 ))

clipe:setInverted(false)
clipe:addChild(De_Stencil)

mSprite:removeAllNodes()
mSprite:addNode(clipe,100)

function funcCallBack()
 De_Stencil:setPosition(ccp(- 50, -50))
end


if not DelayTime then
    DelayTime = 0.8
end
if not startTime then
    startTime = 0
end
 local mtime =  0.8
if  not speed then
 mtime = 0.8
else
 local xy = mx*mx + my*my
 mtime = math.sqrt (xy) / speed 
end

function starAcition()


 local action1 =  CCMoveTo:create(mtime,CCPointMake(tbSize.width + 50 , tbSize.height + 50 ))
 local actionEa2 = CCEaseIn:create(action1, mtime)
 local arr1 = CCArray:create()
   arr1:addObject(CCDelayTime:create(startTime))  
        arr1:addObject(actionEa2)
        arr1:addObject(CCDelayTime:create(DelayTime))  
        arr1:addObject(CCCallFuncN:create(funcCallBack))
 local actionse = CCSequence:create(arr1)
local actionRE = CCRepeatForever:create(actionse)
  De_Stencil:runAction(actionRE)
end
starAcition()

end

local function main()
– avoid memory leak
collectgarbage(“setpause”, 100)
collectgarbage(“setstepmul”, 5000)

--------------
-- run
local sceneGame = CCScene:create()

local button = Button:create()
button:loadTextureNormal(“Panel_S9.png”)
local Icon = ImageView:create()
Icon:loadTexture(“Equip_Necklace2_Yellow.png”)
Icon:setScale(0.7)
Icon:setPosition(ccp(0, 60))
Icon:setName(“Image_EquipIcon”)
button:addChild(Icon)
local lv = ListView:create()
lv:setDirection(SCROLLVIEW_DIR_HORIZONTAL)
lv:setTouchEnabled(true)
lv:setBounceEnabled(true)
lv:setSize(CCSizeMake(420*3, 600))
lv:setItemModel(button)
–lv:setClippingType(LAYOUT_CLIPPING_SCISSOR)
lv:setClippingEnabled(true)

local layout = Layout:create()
–layout:setClippingType(LAYOUT_CLIPPING_SCISSOR)
layout:setClippingEnabled(true)
layout:setSize(CCSizeMake(420*3, 600))
layout:addChild(lv)
layout:setPosition(ccp(0, -300))
sceneGame:addChild(layout)

for i =1, 5 do
lv:pushBackDefaultItem()
local widget = lv:getItem(i-1)
local Image_EquipIcon = tolua.cast(widget:getChildByName(“Image_EquipIcon”), “ImageView”)
Glittering(Image_EquipIcon)
end

CCDirector:sharedDirector():runWithScene(sceneGame)

end

xpcall(main, G__TRACKBACK)

--------------求助 上面代码在cocos2d-x 2.2.3下面显示异常问题,如果把上面两行注释打开则显示正常
如果ListView和layout不开启裁剪 或者都设置裁剪方式为LAYOUT_CLIPPING_SCISSOR 则正常显示
如果开启裁剪 layout默认的裁剪模式LAYOUT_CLIPPING_STENCIL会导致很多控件无法显示
附近有相应代码 测试代码和资源 可以在2.2.3下 解压到Lua\HelloLua\Resources运行。
备注:需要自己导出 CCClippingNode类

跪求官方或者高手 目前lz需要设置裁剪模式为LAYOUT_CLIPPING_STENCIL
怎样修改才可以正常显示其他控件

备注:需要自己导出 CCClippingNode类

这个类你有导出好的么?我直接放到Lua\HelloLua\Resources?lua代码也放资源里?

— Begin quote from ____

引用第1楼hanrea于2014-06-05 14:47发表的 回 楼主(liyuping6666) 的帖子 :
备注:需要自己导出 CCClippingNode类

这个类你有导出好的么?我直接放到Lua\HelloLua\Resources?lua代码也放资源里? http://www.cocoachina.com/bbs/job.php?action=topost&tid=204588&pid=969742

— End quote

附件文件覆盖 cocos2d-x-2.2.3\tools\tolua++下面的就可以了

只要覆盖附件脚本到cocos2d-x-2.2.3\tools\tolua++下
运行build.bat
他会把CCClippingNode类导出到LuaCocos2d.cpp文件里面
编译工程就可以运行看效果

求官方帮忙看什么原因导致上面问题

额,我的怎么报错啊~clippingnode是空。

我就是用上面方法导出的 你看看LuaCocos2d.cpp里面有没有下面内容,或者你自己导出CCClippingNode试试 就是你们官方(cocos2d-x-2.2.3\tools\tolua++)提供的绑定方法啊
#ifdef __cplusplus
tolua_cclass(tolua_S,“CCClippingNode”,“CCClippingNode”,“CCNode”,tolua_collect_CCClippingNode);
#else
tolua_cclass(tolua_S,“CCClippingNode”,“CCClippingNode”,“CCNode”,NULL);
#endif
tolua_beginmodule(tolua_S,“CCClippingNode”);
tolua_function(tolua_S,“create”,tolua_Cocos2d_CCClippingNode_create00);

------------------cocos2d-x是2.2.3 我用vs2012编译 我传一个可以运行的exe的 可以运行看效果,
附件代码运行是有异常的表现 很多控件不显示
如果把hello.lua下面两行注释打开运行 显示效果正常
–lv:setClippingType(LAYOUT_CLIPPING_SCISSOR)
–layout:setClippingType(LAYOUT_CLIPPING_SCISSOR)

哥们儿,我也遇到了这个问题,你们搞定了吗,怎么解决哈?

mark

AYOUT_CLIPPING_SCISSOR
LAYOUT_CLIPPING_STENCIL

不知道引擎啥时候能解决这个问题,先设置AYOUT_CLIPPING_SCISSOR凑合着用

收到,我们会尽快修复此bug。

不知道这个新版本有否解决呃 我用2.2.6貌似还是有问题的:8:

quick lua 2.2.6中有解决办法吗?

修好了吗?已经很久了,不知道现在要怎么用