2015-02-23 96 views
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 

回答

0

你也许可以使用closure做到这一点,假设所有的兴趣点都是一样的。

实施例:

local function createPOI(properties) 
    local pointOfInterest = createPointOfInterest() -- code to create your object 
    --set properties based on argument 
    function pointOfInterest:touch(e) 
     --do stuff 
    end 
    pointOfInterest:addEventListner("touch") 
    return pointOfInterest 
end 

电晕有一些代码here可能是有用的。检查'多个接触'部分。