0
我使用包含在电晕示例代码中捏放大缩小的功能。但是,因为我正在开发一个应用程序,所以我需要让每个感兴趣的地方变得可以缩放。我是否必须复制和粘贴每个图像的可怕长时间的功能,还是只能将一个功能的每个图像重新定向?我是新来的卢阿,这里是变焦功能捏包含在示例代码:电晕sdk捏缩放
function background:touch(event)
local result = true
local phase = event.phase
local previousTouches = self.previousTouches
local numTotalTouches = 1
if (previousTouches) then
-- add in total from previousTouches, subtract one if event is already in the array
numTotalTouches = numTotalTouches + self.numPreviousTouches
if previousTouches[event.id] then
numTotalTouches = numTotalTouches - 1
end
end
if "began" == phase then
-- Very first "began" event
if (not self.isFocus) then
-- Subsequent touch events will target button even if they are outside the contentBounds of button
display.getCurrentStage():setFocus(self)
self.isFocus = true
previousTouches = {}
self.previousTouches = previousTouches
self.numPreviousTouches = 0
elseif (not self.distance) then
local dx,dy
if previousTouches and (numTotalTouches) >= 2 then
dx,dy = calculateDelta(previousTouches, event)
end
-- initialize to distance between two touches
if (dx and dy) then
local d = math.sqrt(dx*dx + dy*dy)
if (d > 0) then
self.distance = d
self.xScaleOriginal = self.xScale
self.yScaleOriginal = self.yScale
print("distance = " .. self.distance)
end
end
end
if not previousTouches[event.id] then
self.numPreviousTouches = self.numPreviousTouches + 1
end
previousTouches[event.id] = event
elseif self.isFocus then
if "moved" == phase then
if (self.distance) then
local dx,dy
if previousTouches and (numTotalTouches) >= 2 then
dx,dy = calculateDelta(previousTouches, event)
end
if (dx and dy) then
local newDistance = math.sqrt(dx*dx + dy*dy)
local scale = newDistance/self.distance
print("newDistance(" ..newDistance .. ")/distance(" .. self.distance .. ") = scale(".. scale ..")")
if (scale > 0) then
self.xScale = self.xScaleOriginal * scale
self.yScale = self.yScaleOriginal * scale
end
end
end
if not previousTouches[event.id] then
self.numPreviousTouches = self.numPreviousTouches + 1
end
previousTouches[event.id] = event
elseif "ended" == phase or "cancelled" == phase then
if previousTouches[event.id] then
self.numPreviousTouches = self.numPreviousTouches - 1
previousTouches[event.id] = nil
end
if (#previousTouches > 0) then
-- must be at least 2 touches remaining to pinch/zoom
self.distance = nil
else
-- previousTouches is empty so no more fingers are touching the screen
-- Allow touch events to be sent normally to the objects they "hit"
display.getCurrentStage():setFocus(nil)
self.isFocus = false
self.distance = nil
self.xScaleOriginal = nil
self.yScaleOriginal = nil
-- reset array
self.previousTouches = nil
self.numPreviousTouches = nil
end
end
end
return result
末