关于使用cc.RenderTexture来过滤 Touch 的透明 部分全新的解决方案(在cocso2dx改成了异步渲染后的都不行啦。)

lt136022740 2015-11-25 10:22:31
renderTexture现在读不到数据啦,所以使用 cc.Image来做。
直接上代码:首先去 lua_binding下面的auto下面的lua_cocos2dx_auto.ccp添加lua接口:
static int lua_cocos2dx_Image_isPointContainsAlpha(lua_State* tolua_S)
{
cocos2d::Image* cobj = (cocos2d::Image*)tolua_tousertype(tolua_S, 1, 0);
unsigned char* data = cobj->getData();
if(data == NULL)
{
printf("data is null ----");
return 0;
}

float y = lua_tointeger(tolua_S, -1);
float x = lua_tointeger(tolua_S, -2);
printf("%f--%f", x, y);
int pa = 4 * ((cobj->getHeight() - y - 1) * cobj->getWidth() + x) + 3;

unsigned int ap = data[pa];
printf("alpha data is == %d", ap);
if (ap < 20)
{
lua_pushboolean(tolua_S, false);
return 1;
}
else
{
lua_pushboolean(tolua_S, true);
return 1;
}
}
,然后,在lua层调用:local function onTouchBegan(touch, event)
local target = event.getCurrentTarget(event)
local nodepos = target:getParent():convertTouchToNodeSpace(touch)

local box = target:getBoundingBox()
if cc.rectContainsPoint(box, nodepos) then
local img = cc.Image:new()
img:initWithImageFile("ship_part0.png")
local localpos = target:convertTouchToNodeSpace(touch)
local val = img:isPointContainsAlpha(localpos.x, localpos.y)
print("lua val " .. tostring(val))

if val == true then
local fadeOut = cc.FadeOut:create(0.2)
local fadeIn = cc.FadeIn:create(0.2)
local action = cc.Sequence:create(fadeOut, fadeIn)
sp_part0:runAction(action)
end

return true
end
return false
end
local dispatcher = cc.Director:getInstance():getEventDispatcher()
local listener = cc.EventListenerTouchOneByOne:create()
listener:registerScriptHandler(onTouchBegan, cc.Handler.EVENT_TOUCH_BEGAN)
dispatcher:addEventListenerWithSceneGraphPriority(listener, sp_part0)
说完。
...全文
334 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

721

社区成员

发帖
与我相关
我的任务
社区描述
Cocos2d-x相关内容讨论专区
社区管理员
  • Cocos2d-x
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧