我正在使用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);
每次我在模拟器中点击球时,“切换!”不止一次打印。有什么想法吗?
答案 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);