Lua Corona SDK 中的捏缩放比例限制
Posted
技术标签:
【中文标题】Lua Corona SDK 中的捏缩放比例限制【英文标题】:Pinch to Zoom Scale Limits in Lua Corona SDK 【发布时间】: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(“触摸”,背景)
【问题讨论】:
那个函数……太长了。你能把对手头的问题不重要的部分去掉吗? 【参考方案1】:你在这里做逻辑:
if ( scale > 0 ) then
self.xScale = self.xScaleOriginal * scale
self.yScale = self.yScaleOriginal * scale
end
这是采用原始比例并将其乘以新比例。所以你需要做类似的事情:
本地 xScale = self.xScaleOriginal * 比例 本地 yScale = self.yScaleOriginal * 比例
// 设置上限 xScale = math.min(ZOOMMAX, xScale) yScale = math.min(ZOOMMAX, yScale)
// 设置下限 self.xScale = math.max(ZOOMMIN, xScale) self.yScale = math.max(ZOOMMIN, yScale)`
【讨论】:
以上是关于Lua Corona SDK 中的捏缩放比例限制的主要内容,如果未能解决你的问题,请参考以下文章