如何定义"非触摸事件监听器"在Corona SDK?

时间:2014-07-15 18:19:30

标签: lua corona

使用Corona SDK编写游戏时遇到问题。我有不同的对象(存储在表中)掉下来和一个“触摸”事件监听器来定义触摸对象时要做什么。 但是我还想在一个对象在落在屏幕下方之后没有被触摸时定义动作。我尝试了几种方法,每一种方法都“正常”(没有生成错误),但是没有执行定义的操作...... 有没有办法定义一种“非触摸事件listerner”? 这是我的代码中的listerner部分(在此示例中,代码正在运行但“Game Over”未打印)。

非常感谢你的帮助!

local function BlackBalloon ()

local Black = display.newImageRect("BlackBallon.png", 80, 120)

function Black:touch (event)
    if event.phase == "began" then
        score = score + 1
        print ( score )

    elseif Black.y >= 540 then
        print ( "Game Over" )
    end
return true
end

Black:addEventListener( "touch", Black )
return Black
end

1 个答案:

答案 0 :(得分:1)

没有"纯度"检查对象。您可以通过在创建对象Black.touched = false时创建一个变量并在触摸后将其更改为true来模拟此情况。

我将为您提供实现此功能的基本功能 - 当您检测到触摸时,您必须在 Black对象上添加变量,并设置变量ex。 Black.touched = true并在gameOverDetection函数中检查该变量。

在您的代码中添加此功能。

-- Function to handle detection.
local function gameOverDetection()
    if Black.y > 540 then
        print ("Game Over")
    end
end

在代码底部添加此侦听器

-- Listener to check on each entered frame.
Runtime:addEventListener("enterFrame",gameOverDetection)

要解释为什么您自己的代码无法正常工作,只有在对象上发生触摸事件时才会调用函数Black:touch(event)。所以行动方针是

  1. 黑色被触动
  2. 您检查触摸是否是新的(已开始)
  3. 如果是,则添加分数+ 1
  4. 如果不是新的,请检查黑色的Y值是否大于 等于等于
  5. 计划继续。
  6. 你永远不会遇到触及满足第二个条件>= 540的物体而第二个条件只有在你保持"持有时才会遇到的情况。你的手指放在一个物体上。