【发布时间】:2011-09-28 13:16:48
【问题描述】:
我基本上已经“到处”搜索并且找不到解决方案,所以,我在这里并且希望得到任何帮助,我正在尝试限制此代码的最大/最小比例,截至目前,您可以捏合和缩放到无穷大,我想限制用户可以放大和缩小的距离,那么我将如何将其添加到此代码中
-- activate multitouch
system.activate( "multitouch" )
-- 将 bkgd 图像添加到屏幕
本地背景 = display.newImage("aquariumbackgroundIPhone.jpg", 0, 0)
局部函数calculateDelta(previousTouches, event)
本地 id,touch = next(previousTouches)
如果 event.id == id 那么
id,touch = next(previousTouches, id)
断言(id ~= event.id)
结尾
本地 dx = touch.x - event.x
本地 dy = touch.y - event.y
返回 dx, dy
结尾
-- 为 bkgd 图像创建一个表监听器对象
功能背景:触摸(事件)
本地结果 = true
本地阶段 = event.phase
本地 previousTouches = self.previousTouches
本地 numTotalTouches = 1
if (previousTouches) then
--从previousTouches中加总,如果事件已经在数组中,则减一
numTotalTouches = numTotalTouches + self.numPreviousTouches
如果 previousTouches[event.id] 那么
numTotalTouches = numTotalTouches - 1
结尾
结尾
如果“开始” == 阶段,那么
-- 第一个“开始”事件
如果(不是 self.isFocus)那么
-- 后续的触摸事件将针对按钮,即使它们在按钮的 stageBounds 之外
display.getCurrentStage():setFocus(self)
self.isFocus = true
以前的触摸 = {}
self.previousTouches = previousTouches
self.numPreviousTouches = 0
elseif ( 不是 self.distance ) 然后
本地 dx,dy
如果 previousTouches 和 ( numTotalTouches ) >= 2 那么
dx,dy = calculateDelta(previousTouches, event)
结尾
-- 初始化为两次触摸之间的距离
如果(dx 和 dy)那么
本地 d = math.sqrt(dx*dx + dy*dy)
如果 ( d > 0 ) 那么
self.distance = d
self.xScaleOriginal = self.xScale
self.yScaleOriginal = self.yScale
打印(“距离=”.. self.distance)
结尾
结尾
结尾
如果不是 previousTouches[event.id] 那么
self.numPreviousTouches = self.numPreviousTouches + 1
结尾
previousTouches[event.id] = 事件
elseif self.isFocus then
如果“移动”== 阶段,那么
如果(self.distance)那么
本地 dx,dy
如果 previousTouches 和 ( numTotalTouches ) >= 2 那么
dx,dy = calculateDelta(previousTouches, event)
结尾
如果(dx 和 dy)那么
本地 newDistance = math.sqrt(dx*dx + dy*dy)
局部比例 = newDistance / self.distance
打印(“newDistance(”..newDistance..“)/距离(”..self.distance..“)=规模(“..规模..”)“)
如果 ( 比例 > 0 ) 那么
self.xScale = self.xScaleOriginal * 比例
self.yScale = self.yScaleOriginal * 比例
结尾
结尾
结尾
如果不是 previousTouches[event.id] 那么
self.numPreviousTouches = self.numPreviousTouches + 1
结尾
previousTouches[event.id] = 事件
elseif “结束” == 阶段或“取消” == 阶段 then
如果 previousTouches[event.id] 那么
self.numPreviousTouches = self.numPreviousTouches - 1
previousTouches[event.id] = nil
结尾
如果(#previousTouches > 0)那么
-- 必须至少剩余 2 次触摸才能捏合/缩放
self.distance = nil
别的
--previousTouches 是空的,所以没有更多的手指在触摸屏幕
-- 允许触摸事件正常发送到他们“击中”的对象
display.getCurrentStage():setFocus(nil)
self.isFocus = false
self.distance = nil
self.xScaleOriginal = nil
self.yScaleOriginal = nil
-- 重置数组
self.previousTouches = nil
self.numPreviousTouches = nil
结尾
结尾
结尾
返回结果
结尾
-- 确定是否在 Corona Simulator 上运行
--
本地 isSimulator = "模拟器" == system.getInfo("环境")
-- 模拟器不支持多点触控事件
--
如果是模拟器那么
msg = display.newText("模拟器不支持多点触控!", 0, 20, "Verdana-Bold", 14 )
msg.x = display.contentWidth/2 -- 中心标题
msg.y = display.contentHeight/2 -- 中心标题
味精:setTextColor(255,255,0)
结尾
-- 注册表监听器
背景:addEventListener(“触摸”,背景)
【问题讨论】:
-
那个函数……太长了。你能把对手头的问题不重要的部分去掉吗?
标签: iphone lua zooming coronasdk