2015-02-23 3 views
0

Я использую функцию, содержащуюся в кодовых примерах кодов для увеличения. Но так как я разрабатываю приложение, мне нужно сделать каждое интересное интересное. Должен ли я копировать и вставлять ужасно длинную функцию для каждого отдельного изображения или я могу перенаправить каждое изображение только на одну функцию? Я новичок в Lua, вот ущипнуть, чтобы увеличить функцию, включенную в примере кода:corona sdk pinch для увеличения

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, которые могут быть полезны. Проверьте раздел «Несколько прикосновений».