--[[
Scale by gesture
клас Масштабування жестом
v.1.0 https://simartinfo.blogspot.com/p/v.htmlauthor (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.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
class Lupa v 2.0
Немає коментарів:
Дописати коментар