Шукати в цьому блозі

клас Масштабування жестом


--[[
Scale by gesture

клас Масштабування жестом
v.1.0   https://simartinfo.blogspot.com/p/v.html

author (c) https://www.facebook.com/AndroidMobileGame
ВИКОРИСТАННЯ:
------------------------------------
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.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


class Lupa v 2.0

Немає коментарів:

Дописати коментар