Corona SDK - 处理Lua中的触摸事件

时间:2013-05-23 23:36:49

标签: lua touch corona

我正在使用Lua中的一个简单应用程序来更好地感受Corona SDK:红色球在屏幕周围反弹并在用户触摸后切换方向。但是,每当我在电晕模拟器中点击球时,触摸事件的调用次数不止一次。这是我的代码:

local xdirection,ydirection = 1,1
local xpos,ypos = display.contentWidth*0.5,display.contentHeight*0.5
local circle = display.newCircle( xpos, ypos, 20 );
circle:setFillColor(255,0,0,255);

local x_speed = 5
local y_speed = 5 

local function animate(event)
    xpos = xpos + ( x_speed * xdirection );
    ypos = ypos + ( y_speed * ydirection );

    if (xpos > display.contentWidth - 20 or xpos < 20) then
            xdirection = xdirection * -1;
    end
    if (ypos > display.contentHeight - 20 or ypos < 20) then
            ydirection = ydirection * -1;
    end

    circle:translate( xpos - circle.x, ypos - circle.y)
end

local function switch(event)
    xdirection = xdirection * -1;
    ydirection = ydirection * -1;
    print "Switched!"
end

Runtime:addEventListener( "enterFrame", animate );
circle:addEventListener("touch",switch);

每次我在模拟器中点击球时,“切换!”不止一次打印。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

当你使用触摸事件时,会有三个事件阶段触发

began, moved, ended

如果您想在触摸事件中触发一个阶段,请将其放在您的代码上

local function switch(event)
    if (event.phase == "ended") then
    xdirection = xdirection * -1;
    ydirection = ydirection * -1;
    print "Switched!"
    end
end

答案 1 :(得分:2)

“触摸”事件在触摸事件的开始和结束时被调用两次。尝试在切换功能上打印event.phase。

您应该使用:

circle:addEventListener("tap",switch);