前文链接:
- http://www.jianshu.com/p/87b8c379b91b
- http://www.jianshu.com/p/16fa878f74c2
- http://www.jianshu.com/p/4f2f8400a0ac
- http://www.jianshu.com/p/862cb1764734
- http://www.jianshu.com/p/2e9a586b4631
- http://www.jianshu.com/p/bc16bbb3f8fd
- http://www.jianshu.com/p/c987752dafad
- 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 3.10lua版完成