如何使用Lua在触摸屏上绘制可变大小的圆形
2014-10-2 23:10:28
收藏:0
阅读:129
评论:3
在空白.png(800 X 800)上,可绘制大小不同的圆形,并在触摸和运行时显示。触摸时,坐标(在运行时触摸下的x轴和y轴坐标位置)将在开始事件中存储在两个变量myCoordx和myCoordy中。当用户在屏幕上滑动手指时,将基于计算半径和坐标绘制圆形。现在错误一直出现,请帮我调试这段代码。
运行时错误
d:\ corona项目\ enterframeevent\ main.lua:14:尝试索引全局变量'drawCircle'(空值)
堆栈跟踪:
d:\ corona项目\ enterframeevent\ main.lua:14:在主块中
这是我的main.lua文件。
local screen = display.newImage(“blank.png”)
function drawCircle:touch(event)
if event.phase ==“began”then
local myCoordx = event.x
local myCoordy = event.y
elseif event.phase ==“moved”then
local rad =(event.x- myCoordx)^ 2
local myCircle = display.newCircle(event.x,event.y,rad)
myCircle:setFillColor(1,0,1)
end
end
Runtime:addEventListener(“touch”,drawCircle)
点赞
用户608097
我认为你应该使用以下代码:
-- 我认为你应该在函数之外定义这些变量,因为它们在“moved”阶段将超出作用域
local myCoordx = 0
local myCoordy = 0
-- 把这个声明移到函数外面,
-- 这样它可以被重用,而且移除了
local myCircle
function onTouch(event)
if event.phase == "began" then
myCoordx = event.x
myCoordy = event.y
elseif event.phase == "moved" then
local rad = (event.x - myCoordx) ^ 2
-- 请记住这一行代码将在每个“移动”阶段绘制一个新圆,保留旧的圆。
-- 如果我理解正确,这不是你想要的
-- local myCircle = display.newCircle(event.x, event.y, rad )
-- 相反的,改为移除旧的显示对象...
if myCircle then
myCircle:removeSelf()
myCircle = nil
end
-- ...然后再次添加
myCircle = display.newCircle(event.x, event.y, rad )
myCircle:setFillColor( 1, 0, 1 )
end
end
-- 由于“drawCircle”未定义,直接将其指向一个函数(在本例中为“onTouch”)。
-- Runtime:addEventListener( "touch", drawCircle )
Runtime:addEventListener( "touch", onTouch )
我没有在模拟器上测试代码,稍后我会尝试并在需要时更新答案。
更新: 已经测试,它像我预期的那样工作。
2014-10-03 14:41:54
用户869951
根据我的评论,发布的代码无法编写,或者错误消息是错误的。我会假设错误是错误的,因为语句 function drawCircle: touch(event) 在第3行尝试将一个叫做 touch(self) 的方法添加到一个 drawCircle 表中;然而,该代码没有在任何地方创建此表。您可能会漏掉 drawCircle = display.newSomething...,或者您可以简单地使用一个函数而不是一个方法:
function touch(event)
...
end
Runtime:addEventListener( "touch", touch)
后者之所以能够工作,是因为您的 touch 函数不使用关键字 self,这是一个为方法隐含创建的变量。
2014-10-05 02:25:25
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
显然,您尝试向
drawCircle添加:touch方法,但是您没有在任何地方进行定义。您至少应将其初始化为一个空表——即{}或者使用相关的 Corona 方法进行创建。