角色在滑动方向键后继续移动
2017-12-14 16:9:14
收藏:0
阅读:116
评论:2
我正在制作一款类似马里奥兄弟的平台游戏,但我遇到了一个大问题。我的问题是,当我点击方向键并拖动出它时,尽管我已经释放了点击,角色仍然会移动。我已经在 Corona 论坛上发布了这个问题,但我还没有找到解决方案。
下面是我的代码:
local function makeControls(event)
if anim.isJumping == false then
if event.phase == "began" then
if event.target.isPressed == false then
if event.target.id == "left" then
walk(-1)
elseif event.target.id == "right" then
walk(1)
end
end
event.target.isPressed = true
elseif ( event.phase == "moved" and event.target.isPressed == true ) then
if (
event.x > event.target.contentBounds.xMin+4 and
event.x < event.target.contentBounds.xMax-4 and
event.y > event.target.contentBounds.yMin+4 and
event.y < event.target.contentBounds.yMax-4
) then
event.target:dispatchEvent( { name="touch", phase="began", target=event.target } )
else
event.target:dispatchEvent( {name = "touch", phase = "ended", target = event.target } )
end
elseif event.phase == "ended" then
anim:setLinearVelocity(0,0)
event.target.isPressed = false
end
end
return true
end
local function createArrowKey(group, x, y, rotation, name)
local newButtonBoundary = display.newRoundedRect(group, x, y, 75, 75, 12)
newButtonBoundary.strokeWidth = 6
newButtonBoundary:setStrokeColor(1, 1, 1, 0.5)
newButtonBoundary:setFillColor(1, 1, 1, 0.2)
newButtonBoundary.id = name
newButtonBoundary:addEventListener("touch", makeControls)
newButtonBoundary.isPressed = false
local newArrow = display.newPolygon(group, x, y, { 0, -24, 24, 24, -24, 24 })
newArrow.rotation = rotation
newArrow.strokeWidth = 3
end
createArrowKey(parent2, left + fullw / 3, bottom - fullh / 5.5, 90, "right")
createArrowKey(parent2, left + fullw / 5.5, bottom - fullh / 5.5, 270, "left")
createArrowKey(parent2, left + fullw / 3.88, bottom - fullh / 8.5, 180, "down")
createArrowKey(parent2, left + fullw / 3.88, bottom - fullh / 3.9, 0, "up")
createButton(parent2, left + fullw - 150, bottom - fullh / 5.5, "射击", "shoot")
createButton(parent2, left + fullw - 250, bottom - fullh / 5.5, "扔出", "throw")
createButton(parent2, left + fullw - 350, bottom - fullh / 5.5, "近战", "melee")
点赞
用户7026995
我会尽量不生成新的事件:
local function makeControls(event)
if anim.isJumping == false then
if event.phase == "began" then
if event.target.isPressed == false then
if event.target.id == "left" then
walk(-1)
elseif event.target.id == "right" then
walk(1)
end
end
event.target.isPressed = true
elseif ( event.phase == "moved" and event.target.isPressed == true ) then
if (
event.x > event.target.contentBounds.xMin+4 and
event.x < event.target.contentBounds.xMax-4 and
event.y > event.target.contentBounds.yMin+4 and
event.y < event.target.contentBounds.yMax-4
) then
if event.target.id == "left" then
walk(-1)
elseif event.target.id == "right" then
walk(1)
end
else
anim:setLinearVelocity(0,0)
event.target.isPressed = false
end
elseif event.phase == "ended" then
anim:setLinearVelocity(0,0)
event.target.isPressed = false
end
end
return true
end
2017-08-11 21:36:13
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

我对 Corona 不是很熟悉,但也许我可以帮助你。
如果事件阶段是 "began",则: 如果按钮未被按下,则: 如果按钮 id 是 "left",则移动到左边。 如果按钮 id 是 "right",则移动到右边。 标记该按钮已被按下。所以,如果你触摸屏幕,则会触发一个事件阶段为 "began" 的触摸事件。
根据你触摸的按钮,你将向左或向右移动,并且你将记住该特定按钮已被按下。
如果事件阶段是 "moved",并且按钮已被按下,则: 如果移动在按钮周围 ±4 像素内,则分派一个事件阶段为 "began" 的触摸事件。 否则,分派一个事件阶段为 "began" 的触摸事件。现在,如果你的手指在按钮上并移动,那么将会有一个事件阶段为 "moved" 的触摸事件,上面的代码将处理它。如果这次移动在按钮周围 ±4 像素内,那么你将分派一个事件阶段为 "began" 的触摸事件。只要你在按钮内移动,你的角色就会继续移动。
我的问题是:如果你的手指在或在按钮外,为什么要执行相同的操作?你只会进入下面的 elseif 块,并因此停止移动,如果你抬起手指,触摸事件将不会结束,你不会创建任何其他触摸结束的触摸事件。
如果事件阶段是 "ended",则: 停止动画的线性速度。 标记该按钮未被按下。我认为当你的手指离开按钮时,你应该在 else 块中分派一个 "touch" "ended" 事件。
这可能会解决你的问题。不幸的是,我无法测试我的解决方案。