cocos2d-x lua 3.10 在lua层实现 不规则按钮点击(鼠标点击判断是否点在透明像素上)

前文链接:

  1. http://www.jianshu.com/p/87b8c379b91b
  2. http://www.jianshu.com/p/16fa878f74c2
  3. http://www.jianshu.com/p/4f2f8400a0ac
  4. http://www.jianshu.com/p/862cb1764734
  5. http://www.jianshu.com/p/2e9a586b4631
  6. http://www.jianshu.com/p/bc16bbb3f8fd
  7. http://www.jianshu.com/p/c987752dafad
  8. http://www.jianshu.com/p/372be9f51816

具体导出在前文链接5

这里只写lua层代码


local MainScene = class("MainScene", cc.load("mvc").ViewBase)

--MainScene.RESOURCE_FILENAME = "MainScene.csb"
function MainScene:onCreate()
    printf("resource node = %s", tostring(self:getResourceNode()))

    --绘制图片
    self.sprite = cc.Sprite:create("red2.png")
    self.sprite:setPosition(200, 200)
    self:addChild(self.sprite, 1)
    local size = self.sprite:getContentSize() -- 返回size
    self.sprite:setAnchorPoint(0, 0)--如果图片锚点是0的话 因为点击是从0, 0开始算的 如果是0.5 0.5 点击坐标就要减去图片的一半
    --dump(self.sprite:getPosition())

    --创建渲染
    local renderTexture1 = cc.RenderTexture:create(size.width, size.height, cc.TEXTURE2_D_PIXEL_FORMAT_RGB_A8888)
    renderTexture1:begin()
    --这里可能是复制顶点数据等
    local pTempSpr = cc.Sprite:createWithSpriteFrame(self.sprite:getSpriteFrame())
    --pTempSpr:setPosition(cc.p(size.width/2, size.height/2))--去掉坐标设置
    pTempSpr:setAnchorPoint(0, 0)--这里也要是0
    pTempSpr:visit()
    renderTexture1:endToLua()--这个之后必须隔帧取(或者加个定时器 当前帧取到的数据全是0)
    renderTexture1:retain()--必须加这个 保存对象 否则下帧就被回收了 不需要了记得release

    --打开注释可测试显示效果
    --[[
    local  photo_texture = renderTexture1:getSprite():getTexture()
    sprite_photo = cc.Sprite:createWithTexture(photo_texture)
    sprite_photo:addTo(self, 3)
    sprite_photo:setAnchorPoint(cc.p(0.5, 0.5))
    sprite_photo:setPosition(display.cx, display.cy)
    ]]

    local function onTouchBegan(touch, event)
        return true--这里不返回true 后面不返回true
    end

    local function onTouchMoved(touch, event)
        local dx = touch:getDelta().x
    end

    local function onTouchEnded(touch, event)
        local location = touch:getLocation()
        
        dump(location, "点击的坐标是")
        local pImage = renderTexture1:newImage()
        local sprPos = cc.p(self.sprite:getPosition())
        local i = math.floor(location.x) - sprPos.x
        local j = math.floor(location.y) - sprPos.y
        print("i, j ", i, j)
        local ovt = pImage:getOneData(i, j, size)
        dump(ovt, "ovt = ")
        if ovt.a == 0 then
            print("点击到了按钮的透明区域")
        else
            print("点击到了按钮的有色区域")
        end
    end

    local listener = cc.EventListenerTouchOneByOne:create()
    listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )
    listener:registerScriptHandler(onTouchMoved,cc.Handler.EVENT_TOUCH_MOVED )
    listener:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED )
    local eventDispatcher = self:getEventDispatcher()
    eventDispatcher:addEventListenerWithSceneGraphPriority(listener, self)
end

return MainScene

效果图


cocos2d-x lua 3.10 在lua层实现 不规则按钮点击(鼠标点击判断是否点在透明像素上)_第1张图片
点击到有效像素内.gif

使用原图:


red2.png

不知道为什么没录到鼠标的操作 具体操作就是点击图片绿色区域 和中间的透明区域进行测试

本项目cocos2d-x 3.10lua版完成

你可能感兴趣的:(cocos2d-x lua 3.10 在lua层实现 不规则按钮点击(鼠标点击判断是否点在透明像素上))