仿《刀塔传奇》主界面的三层可滑动背景的简单实现

主要思路是:在用户滑动界面时,依次设置三层背景的 x 轴的位置,然后在用户滑动结束时,计算一下速度,如果速度足够快,则让背景执行一下MoveBy,产生惯性的效果。(这是我想到的比较直接的做法,如果有好的方法,还请不吝赐教^_^)

附代码:

local scene = cc.Scene:create()		
	local s = cc.Director:getInstance():getWinSize()

	local layer = cc.LayerColor:create(cc.c4b(180, 180, 180, 255))
	scene:addChild(layer)

	local bg = cc.LayerGradient:create(cc.c4b(0, 0, 255, 255), cc.c4b(0, 255, 0, 255), cc.p(1, 0))
	layer:addChild(bg)

	local ct = cc.LayerGradient:create(cc.c4b(0, 255, 0, 255), cc.c4b(255, 0, 0, 255), cc.p(1, 0))
	ct:setPositionY(-0.2*s.height)
	layer:addChild(ct)

	local fg = cc.LayerGradient:create(cc.c4b(255, 0, 0, 255), cc.c4b(0, 0, 255, 255), cc.p(1, 0))
	fg:setPositionY(-0.5*s.height)
	layer:addChild(fg)


	local beginX, startX, movedX, endX
	local startTime, endTime, duration
	local function onTouchBegin(touch, event)		
		beginX = touch:getLocation().x
		startX = beginX
		startTime = socket.gettime()		
		return true
	end

	local function onTouchMoved(touch, event)		
		movedX = touch:getLocation().x
		local diffX = startX - movedX		
		fg:setPositionX(fg:getPositionX() - diffX)
		ct:setPositionX(ct:getPositionX() - diffX/2)
		bg:setPositionX(bg:getPositionX() - diffX/5)
		startX = movedX
	end

	local function onTouchEnded(touch, event)		
		endX = touch:getLocation().x
		endTime = socket.gettime()
		local duration = endTime - startTime
		local v = (endX - beginX)/duration
		if math.abs(v) > 500 then
			fg:runAction(cc.MoveBy:create(0.5, cc.p(v/500*50, 0)))
			ct:runAction(cc.MoveBy:create(0.5, cc.p(v/500*50/2, 0)))
			bg:runAction(cc.MoveBy:create(0.5, cc.p(v/500*50/5, 0)))
		end
	end

	local touchListener = cc.EventListenerTouchOneByOne:create()
    touchListener:registerScriptHandler(onTouchBegin, cc.Handler.EVENT_TOUCH_BEGAN )
    touchListener:registerScriptHandler(onTouchMoved, cc.Handler.EVENT_TOUCH_MOVED )
    touchListener:registerScriptHandler(onTouchEnded, cc.Handler.EVENT_TOUCH_ENDED )
    layer:getEventDispatcher():addEventListenerWithSceneGraphPriority(touchListener, layer)

	cc.Director:getInstance():runWithScene(scene)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值