2013-12-01 5 views
1
function drag(event) 
if event.phase == "began" then 
    firstx, firsty = event.x, event.y 
end 

if event.phase == "ended" then 
    if firsty<event.y then 
     local otherx, othery = event.x, event.y 
     local x=(otherx-firstx)*4 
     local y=(othery-firsty)*4 
     shoot(x,y) 
    end 
end 
end 

Проблема с событием. Фаза?Фаза события Corona SDK

Программа получает ошибку, когда она сначала сравнивается с event.y.

Ошибка: Попытка сравнить ноль с номером

Странная часть является то, что она прекрасно работает, если я позволяю только нагрузку программы в течение нескольких секунд ..

+0

'firsty' не устанавливается ни на что иное, кроме' nil', прежде чем он будет сравниваться в этом случае, или 'event.y' иногда' nil' и перезаписывает 'firsty'. –

+0

hmm .. firsty, похоже, тот, кто ноль, но как он может быть равен нулю, если он был объявлен, когда начался event.phase (когда я касаюсь экрана)? – user3055331

+0

Где объявляется 'firsty'? Он не используется нигде в программе, не так ли? –

ответ

0

Я не уверен, что происходит с firsty, не видя больше вашего кода, но как насчет этого? Я думаю, что это будет более надежное решение вашей проблемы.

function drag(event) 
    if event.phase == "ended" then 
     if event.yStart < event.y then 
      local y = (event.y - event.yStart) * 4 
      local x = (event.x - event.xStart) * 4 
      shoot(x, y) 
     end 
    end 
end 

Вы можете использовать x & yStart получить начальные координаты для события вместо того, чтобы пытаться спасти его самостоятельно.

+0

Спасибо! Я не знал этого события.yStart существовал. – user3055331

+0

Добро пожаловать. Если это решило вашу проблему, сообщите другим, указав зеленую галочку на ответ. –