Quick Links: Download Gideros Studio | Gideros Documentation | Gideros community chat | DONATE
Gesture zoom — Gideros Forum

Gesture zoom

olegoleg Member
edited March 2019 in Code snippets

demo test:



https://github.com/razorback456/gideros_tools/blob/master/lupa.lua

--[[
Scale by gesture
 
клас Масштабування жестом
v.1.0   <a href="https://simartinfo.blogspot.com/p/v.html" rel="nofollow">https://simartinfo.blogspot.com/p/v.html</a>
 
author (c) <a href="https://www.facebook.com/AndroidMobileGame&quot" rel="nofollow">https://www.facebook.com/AndroidMobileGame&quot</a>;
ВИКОРИСТАННЯ:
------------------------------------
using:
--Lupa.new(number of fingers)
 
        local Sprite1=Lupa.new(1)
        stage:addChild(Sprite1)
 
--number of fingers:  1 or 2
-------------------------------------
]]
 
Lupa = gideros.class(Sprite)
 
function Lupa:init(mode)
         if mode then
                self.m=mode
         else
                self.m=2
         end
        self:addEventListener(Event.TOUCHES_BEGIN, self.onTouchesBegin, self)
        self:addEventListener(Event.TOUCHES_MOVE, self.onTouchesMove, self)
        self:addEventListener(Event.TOUCHES_END, self.onTouchesEnd, self)
        self:addEventListener(Event.TOUCHES_CANCEL, self.onTouchesEnd, self)
 
end
 
 
 
 function Lupa:onTouchesBegin(event)
        if event.touch.id==1 then
                self.startY=event.touch.y
                self.startX=event.touch.x
        elseif event.touch.id==2 then
                self.startY2=event.touch.y
                self.startX2=event.touch.x
                self.on=true
        end
 
end
 
 function Lupa:onTouchesMove(event)
 
        if event.touch.id==1 then
 
                -- ПЕРЕМІЩЕННЯ 1
                if (self.m==1 and self.startX) or   (self.m>1 and self.on and self.startX) then
                        self:setPosition(self:getX()+event.touch.x-self.startX,self:getY()+event.touch.y-self.startY)
 
                end
 
                self.startY=event.touch.y
                self.startX=event.touch.x
 
                --------------------------------
                --встановити якір на палець 1
                --------------------------------
                if self.on then
                        local  s=self:getScale() --масштаб
                        local ax,ay=self:getAnchorPosition()  --старі координати якоря  
                        --поправка на масштаб
                        ax=ax*s
                        ay=ay*s
                        local px,py=self:getPosition() -- координати спрайта
                        --найти верхній лівий край 
                        local kx=px-ax
                        local ky=py-ay
 
                        local cy= self.startY 
                        local cx= self.startX 
 
 
                        -- новий якір
                        local ax2=cx-kx   
                        local ay2=cy-ky           
                        self:setAnchorPosition(ax2/s,ay2/s) --встановити новий якір s-поправка на масштаб
                        self:setPosition(px+(ax2-ax),py+(ay2-ay)) -- коригувати позицію спрайту згідно нового якоря
 
                end
                ----------------------------------
 
        elseif event.touch.id==2 then
 
                self.startY2=event.touch.y
                self.startX2=event.touch.x
                ----------------------------------
                -- дистанція між пальцем 1 і 2 
                if self.on then
                        self.d2= math.sqrt((self.startX-event.touch.x)^2+(self.startY-event.touch.y)^2)  
                        if self.d then
                                 self:setScale(self:getScaleX()*( self.d2/self.d))   -- масштаб
                        end
                        self.d=self.d2
                end
                ----------------------------------
        end
 
 
end
 
 function Lupa:onTouchesEnd(event)
        --ВИМКНУТИ ЯКЩО 1 ПАЛЕЦЬ ВІДПУСТИТИ
        if event.touch.id==1 or event.touch.id==2 then
                self.on=nil
                self.d=nil
                self.startY=nil
                self.startX=nil
        end
end
my games:
https://play.google.com/store/apps/developer?id=razorback456
мій блог по гідерос https://simartinfo.blogspot.com
Слава Україні!
Tagged:
+1 -1 (+5 / -0 )Share on Facebook

Comments

Sign In or Register to comment.