Lua 中的 OOP 和事件监听器 (Corona SDK)

2024-01-20

我在 Corona SDK 中的第一步和第一次遇到的麻烦。尝试制作两个盒子,我可以通过以下方式移动它们this http://www.ludicroussoftware.com/blog/2011/07/06/simple-oop-with-inheritance-in-corona/OOP教程,但这不起作用。我已经成功创建了两个盒子,但只有一个是可移动的。当我尝试移动另一个时,它没有移动,但第一个正在移动。猜测范围有问题,但无法确定具体位置。 感谢您的任何帮助。

tile.lua源代码:

module (..., package.seeall)


function new(initX, initY)

    local scrnWidth = display.stageWidth
local scrnHeight  = display.stageHeight
local squareSize = (scrnWidth*0.9)/4

   local tile = display.newRect( initY, initY, squareSize, squareSize )

   function move(direction)
       if direction == "left" then
            transition.moveTo(tile, {x = tile.x+squareSize,y = tile.y,time = 200})
    elseif direction == "right" then
            transition.moveTo(tile, {x = tile.x-squareSize,y = tile.y,time = 200})
    elseif direction == "up" then
            transition.moveTo(tile, {x = tile.x,y = tile.y-squareSize,time = 200})
    elseif direction == "down" then
            transition.moveTo(tile, {x = tile.x,y = tile.y+squareSize,time = 200})
    end
   end


function tile:touch(event)
        if event.phase == "began" then
            display.getCurrentStage():setFocus( tile )
                beginX = event.x
                beginY = event.y
        end

        if event.phase == "ended"  then
                endX = event.x
                endY = event.y
            display.getCurrentStage():setFocus(nil)

                checkSwipeDirection();
        end
    end

function checkSwipeDirection()

        xDistance =  math.abs(endX - beginX) -- math.abs will return the absolute, or non-negative value, of a given value. 
        yDistance =  math.abs(endY - beginY)

        if xDistance > yDistance then
                if beginX > endX then
                        move("right",tile)
                else 
                       move("left",tile)

                end
        else 
                if beginY > endY then
                        move("up",tile)
                else 
                        move("down",tile)
                end
        end

end

tile:addEventListener("touch", tile)
   return tile

end

我在 main.lua 中使用以下代码创建对象:

    local tileConst = require("tile")
    local tile1 = tileConst.new(100,100)
    local tile2 = tileConst.new(200,200)

In your tile.lua场景,声明一个变量来保存下面触摸的精灵module (..., package.seeall):

local touchedSprite -- my temporary sprite variable

然后将目标精灵分配给函数内的上述变量,如下所示:

function tile:touch(event)
    touchedSprite = event.target -- Assigning target to variable
    ...
end

现在更改功能move如下:

function move(direction)
  if direction == "left" then
    transition.to(touchedSprite, {x = touchedSprite.x+squareSize,y = touchedSprite.y,time = 200})
  elseif direction == "right" then
    transition.to(touchedSprite, {x = touchedSprite.x-squareSize,y = touchedSprite.y,time = 200})
  elseif direction == "up" then
    transition.to(touchedSprite, {x = touchedSprite.x,y = touchedSprite.y-squareSize,time = 200})
  elseif direction == "down" then
    transition.to(touchedSprite, {x = touchedSprite.x,y = touchedSprite.y+squareSize,time = 200})
  end
end

请注意我已经改变了transition.moveTo to transition.to和你的transition tile to touchedSprite(target).

继续编码............:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Lua 中的 OOP 和事件监听器 (Corona SDK) 的相关文章

  • lua http套接字超时

    LuaSocket HTTP 模块文档说可以在 HTTP 连接上设置超时 可以设置以下常量来控制 HTTP 模块的默认行为 PORT 用于连接的默认端口 PROXY 用于连接的默认代理 TIMEOUT 设置所有I O操作的超时时间 USER
  • lua_resume 的 from 参数的含义

    From Lua 5 2 参考手册 http www lua org manual 5 2 manual html lua resume int lua resume lua State L lua State from int nargs
  • Lua userdata:无法同时进行数组访问和方法

    我遇到了这个人的问题 Lua userdata数组访问及方法 https stackoverflow com questions 26970316 lua userdata array access and methods 其中 当我设置用
  • 确定已编译Lua的编译器版本

    我有一些已编译的 LuaQ 我需要确定用于编译它的确切版本 有什么可能的方法吗 编译的脚本在文件开头有一个标头 4 bytes signature x1bLua 1 byte version 0x51 1 byte format 1 byt
  • 尝试将 nil 与数字堆栈回溯进行比较?

    我正在通过以下链接玩 Lua https www lua org pil 4 2 html https www lua org pil 4 2 html并对某一点感到困惑 Lua 5 2 4 Copyright C 1994 2015 Lu
  • Lua中如何获取表中的最大整数?

    Lua中如何获取表中的最大整数 在Lua 5 1及更早版本中 你可以使用 math max unpack 1 2 3 4 5 这受到Lua堆栈大小的限制 在 PUC Lua 5 1 上 该值的最大值可达 ca 8000 个数字 如果堆栈空闲
  • lua中的权限问题

    是否需要在 corona build settings 中设置一些特定权限才能将高分永久保存在文件中 每次运行代码时都会出现 权限被拒绝 的错误 如何纠正这个错误 这是我尝试过的代码 function read score local f1
  • 检查多个位置的值并仅在源唯一时返回匹配项

    假设我有一个清单Vendors 阿斯达 乐购 Spar 我有一个清单Sources 或者这个类比中的供应商 家乐氏 Kellogg 吉百利 Cadbury 雀巢 Nestle 强生 Johnsons 帮宝适 Pampers Simple 等
  • 如何使用 srlua 制作可执行的 Lua 脚本?

    我的主要目标是使我的 lua 文件成为可执行文件或使其成为咬代码 最好是两者皆有 我正在尝试 srlua 但在自述文件中它告诉我要做的事情 对于Windows 您需要首先创建srlua exe和glue exe 然后为每个 你想把Lua程序
  • 如何在lua中获取shell脚本的返回码?

    我正在lua中执行一个脚本 os execute sh manager scripts update system sh f 我想获得脚本的输出 如果退出状态为 7 则返回 7 I tried local output os execute
  • Lua C API:初始化结构体 C 中的变量矩阵

    我正在尝试使用 Lua C API 创建一个用户数据 并在其中关联一个元表 我将在其中收集矩阵 我无法得到的是如何将初始化矩阵的每个分量设置为零 我按照我的描述编译我的 Lua 模块 C 代码here https stackoverflow
  • LuaJ 导入 Lua 方法

    我正在使用 LuaJ 并且我有一个 lua文件充满了一堆函数 如何通过 LuaJ 导入这些函数以在 Java 中使用 一种选择是将文件编译为 Java 代码并导入它 另一种方法是使用可嵌入解释器直接从 Java 代码中调用 Lua 文件 E
  • 关闭 Löve2D 中的抗锯齿功能

    我在用着L ve2D http love2d org用于编写一个小游戏 L ve2D 是 Lua 的开源游戏引擎 我遇到的问题是 当您在非整数位置绘制精灵时 某些抗锯齿过滤器会自动应用于精灵 love graphics draw sprit
  • 如何在 Lua - Lightroom 插件中使用 HMAC

    首先我要提的是我对 Lua 真的很陌生 如果你认为我的问题太愚蠢 请耐心等待 这是我的要求 我需要使用 HMAC sha256 进行 Lightroom 插件开发 因为我使用它是为了安全 我试图使用这个但没有运气https code goo
  • 如何使用 Lua 运行可执行文件?

    我有一个可执行文件想要使用 Lua 运行 我该怎么做 似乎无法在任何地方找到有关此的任何文档 您可以使用 Lua 原生的 执行 命令 Example os execute c temp program exe 资料来源 Lua 指南 os
  • 表长度运算符的性能

    卢阿有 运算符来计算用作数组的表的 长度 在诸如 C 之类的语言中 计算出某个内容的长度后 通常不会再次计算它 例如int len strlen string 这在 Lua 中有什么不同吗 其中一个的效率是否比另一个低 显然这可能不会显示显
  • 如何从 Lua 字符串中删除所有特殊字符、标点符号和空格?

    在Lua中 我只能找到其他语言的示例 如何从字符串中删除所有标点符号 特殊字符和空格 所以 举例来说 s t r i p p e d会成为stripped In Lua 模式 https www lua org manual 5 3 man
  • 在 Lua/LuaFileSystem 中创建一个新文件

    我已经查看了 Lua 和 LuaFileSystem 文档 但尚未找到创建新文件的方法 我也在这里四处寻找 但目的相同 请注意 我正在寻找的解决方案必须与操作系统无关 以确保可移植性 但我很高兴针对不同的系统获得不同的答案 示例 将 Hel
  • Linq 是如何工作的(在幕后)?

    我正在考虑为 Lua 制作类似 Linq 的东西 并且我大致了解 Linq 的工作原理 但想知道是否有一篇好文章 或者是否有人可以解释 C 如何使 Linq 成为可能 注意 我的意思是在幕后 比如它如何生成代码绑定等等 而不是最终用户语法
  • 如何循环遍历表并保持顺序?

    我得到了下表 local a 12 30 24 60 60 year 30 24 60 60 month 24 60 60 day 60 60 hour 60 minute 1 second 但是 当我对它进行配对循环并打印 key val

随机推荐

  • iOS 8 CGAffineTransformMakeScale + 自动布局不再工作

    似乎有一些帖子与我的问题相关 但似乎没有任何帮助 使用自动布局时如何调整 CALayer 的锚点 https stackoverflow com questions 12943107 how do i adjust the anchor p
  • 如何使用 IN 条件访问 SQLite.swift 中的 FTS 表

    我正在尝试使用 SQLite swift 查询 FTS 表 之前我在Android上做过 https stackoverflow com questions 29815248 full text search example in andr
  • Scala Future 和 java 8 CompletableFuture

    的简介CompletableFuturesJava 8 带来了可用的语言功能scala concurrent Future例如一元变换 有什么区别 以及为什么 Scala 开发人员应该更喜欢 Scala Futures 而不是 java 8
  • 防止 Web 应用程序中同时发生事务

    我们有一个 Web 应用程序 它是一个游戏 其中包含许多不同的表单和元素 它们充当按钮并触发服务器上的一些操作 问题是 如果用户单击按钮太快或在两个选项卡中打开网站 然后同时发出一些操作 有时可能会混淆我们的应用程序 我们有一些基本的保护
  • 在 S3 存储桶之间移动文件的最佳方式?

    我想每天将一些文件从生产存储桶复制到开发存储桶 例如 复制 Productionbucket feed feedname date 到developmentbucket feed feedname date 由于我想要的文件在文件夹结构中太
  • 多个 RTSP 流不工作

    我在 Activity 中使用了 4 个 VideoView 如果 uri1 可用且其他 uri 不可用 则意味着所有视频视图都显示 uri1 的视频 如果其他 uri 可用但 uri1 未启动 则意味着所有视频视图均未显示任何内容 指导我
  • 打开 Chrome 或 Firefox,无需选项卡和其他菜单项,并设置屏幕位置和大小

    我需要在设定的位置启动 Chrome 或 Firefox 具有设定的大小 并且没有选项卡和其他菜单项 最终目标是一个桌面图标 我可以单击桌面图标以在桌面上的 x y 处获得一个 X 宽 Y 高的窗口 显示特定页面 而无需将这些设置永久保留在
  • vc++ 应用程序中的看门狗

    我写了一个简单的vc 后台应用程序 我正在尝试的就像一个看门狗服务 可以监视应用程序是否正在运行 如果应用程序崩溃 那么服务应该启动应用程序 为了通过 Windows 安装程序创建安装程序 我仅使用 app exe 和 app dll 是否
  • WPF - 绑定到菜单图标

    我有一个包含菜单的用户控件 我需要将 Menu Icon 绑定到 UserControl 的属性 但它不起作用 代码是这样开始的
  • 从可执行文件创建 Windows 服务

    是否有任何快速方法可以根据给定的可执行文件创建 Windows 服务 并在启动时启动它 要从可执行文件创建 Windows 服务 您可以使用sc exe sc exe create
  • Code OSS 和 Visual Studio Code 之间的差异

    正如开发商所说here https github com Microsoft vscode issues 60 issuecomment 161792005 所有这一切的最酷之处在于 您可以选择在我们的许可下使用 Visual Studio
  • 如何实现跨应用导航并导航回Fiori launchpad主页?

    在我们公司 我们建立了 Fiori 启动板 在其中 我们配置了一个链接到自定义开发的 SAPUI5 应用程序的磁贴 该应用程序作为 BSP 部署在服务器上 我们花了很长时间 但使用该应用程序中的路由器模式 我们成功地实现了从启动板磁贴到自定
  • 有没有脚本 SVG 编辑器?

    我想使用某种脚本语言 最好是 Python 编辑 SVG 文件 特别是 我想合并两个 SVG 文件 添加一些注释 并将它们排列在更大的图像中 有没有可用于此类目的的软件 Thanks Bartosz UPDATE 我最终决定使用nosklo
  • 网页字体大小中的px到底代表什么

    我正在做一些图形 在Javascript中 如果相关的话 我知道你可以使用pt px 等查找什么时px这意味着 每个网站似乎都有相同的模糊答案 字体大小 以像素为单位 我想知道什么exactly px代表 例如 如果我有20px 20 像素
  • 尝试与 Web 服务通信时遇到“没有到主机的路由”错误

    我正在尝试与我的笔记本电脑上的网络服务进行通信 并使用 Android 手机作为客户端 我试图做一个简单的登录功能 但是 每当客户端尝试与 Web 服务通信时 Eclipse 上的 DDMS 中就会弹出此错误 我可以通过家庭网络访问网络服务
  • Android 离线语音识别只显示一个结果?

    我已经设置了语音识别服务 如本文所示Android 语音识别作为 Android 4 1 和 4 2 上的服务 https stackoverflow com questions 14940657 android speech recogn
  • 如何使 Jinja2 中的 tojson() 过滤器输出 Unicode 而不是转义序列?

    我的模板是用于JS的 let SETTINGS settings tojson 4 我的设置是一个字典 name Russian name id 12345 如果我渲染它 我会得到 let SETTINGS name Russian nam
  • 使用用户变量访问结构成员

    假设我有一个结构如下 struct person int age char name 24 person 用户给出程序应该读取哪个结构成员的参数 program age int main int argc char argv int i i
  • 使用四边形的重心坐标

    你们中的一些人知道如何使用重心填充二维四边形 坐标 目前 我将四边形分成2个三角形 但这种方式效率低下 因为我必须迭代第二个 边界框重复先前填充的像素 通过 例如 为了填充第二个三角形 我遍历了第一个三角形 属于由第二个三角形形成的边界框
  • Lua 中的 OOP 和事件监听器 (Corona SDK)

    我在 Corona SDK 中的第一步和第一次遇到的麻烦 尝试制作两个盒子 我可以通过以下方式移动它们this http www ludicroussoftware com blog 2011 07 06 simple oop with i