美文网首页cocos2d-Luacocos2dx
cocos2d-x lua 3.10 在lua层实现 不规则按钮

cocos2d-x lua 3.10 在lua层实现 不规则按钮

作者: 人气小哥 | 来源:发表于2017-11-13 14:58 被阅读35次

    前文链接:

    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
    

    效果图


    点击到有效像素内.gif

    使用原图:


    red2.png

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

    本项目cocos2d-x 3.10lua版完成

    相关文章

      网友评论

        本文标题:cocos2d-x lua 3.10 在lua层实现 不规则按钮

        本文链接:https://www.haomeiwen.com/subject/zejzmxtx.html