电晕sdk捏缩放

时间:2015-02-23 15:31:06

标签: lua corona pinch

我正在使用电晕样本代码中包含的功能进行缩放。但是因为我正在开发一个应用程序,我需要让每个感兴趣的地方都可以进行缩放。我是否必须为每个图像复制并粘贴可怕的长函数,或者我可以仅在一个函数上重定向每个图像?我是lua的新手,这里是示例代码中包含的缩放缩放功能:

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

1 个答案:

答案 0 :(得分: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

Corona有一些可能有用的代码here。检查“多次触摸”'部分。