2014-01-11 2 views
1

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

Я попытался удалить слушателя событий нажатия кнопок после того, как кран, который работал, но не работала достаточно быстро (я все-таки удалось получить в двух или трех нажатий, прежде чем он проломил)

Я попробовал, имеющий «ispunching» переменной в сверху переключился на истину во время воспроизведения анимации, но я все еще мог получить несколько кранов до того, как это произошло.

Я знаю, что, возможно, есть простой способ, и я тупой! Любая помощь ценится!

Спасибо!

Sprite данные и последовательность:

local sheetData1 = { width=175, height=294, numFrames=11, sheetContentWidth=1925, sheetContentHeight=294} 
local sheet1 = graphics.newImageSheet("guy.png", sheetData1) 

local sheetData2 = { width=220, height=294, numFrames=4, sheetContentWidth=880, sheetContentHeight=294 } 
local sheet2 = graphics.newImageSheet("guy2.png", sheetData2) 

local sheetData3 = { width=261, height=300, numFrames=8, sheetContentWidth=2088, sheetContentHeight=300 } 
local sheet3 = graphics.newImageSheet("guy3.png", sheetData3) 

local sequenceData = {   
{ name="walk", sheet=sheet1, start=5, count=4, time=800, loopCount=0 }, 
{ name="idle", sheet=sheet1, frames={ 1,2,3,4 }, time=2000, loopCount=0 }, 
{ name="punch", sheet=sheet2, start=1, count=4, time=400, loopCount=1 }, 
{ name="kick", sheet=sheet3, start=1, count=4, time=400, loopCount=1 }, 
{ name="kick2", sheet=sheet3, start=5, count=4, time=400, loopCount=1 }, 
{ name="jump", sheet=sheet1, start=9, count=3, time=400, loopCount=1 } 
} 

характер:

guy = display.newSprite(group, sheet1, sequenceData) 
physics.addBody(guy, "static", { friction=0.5, bounce=0 }) 
guy.x = 600 
guy.y = 600 

простаивает поза: Кнопка

local function idlePose() 
guy:setSequence("idle") 
guy:play() 

end 

Дисплей:

local btn1 = display.newImage ("button1.png") 
btn1.x = 1100 
btn1.y = 510 
btn1:scale (1.5,1.5) 
btn1.alpha=0.5 
group:insert(btn1) 

Кнопка Код:

local function onTap(event) 

if guy.sequence == "punch" and guy.isPlaying == true then 
print("isplaying") 
return 
else 
print("notplaying") 
guy:setSequence("punch") 
guy:play() 
timer.performWithDelay(400, idlePose) 
end 
end 
btn1:addEventListener("tap", onTap) 
+0

Можете ли вы предоставить образец кода, с которым вы работаете ...? –

+0

только что добавленный код для моей кнопки cheers – user3059109

ответ

1

Sprite объекты имеют isPlaying свойство, определенное на них, которые вы можете проверить, когда вы нажмете:

local function onTap(event) 
    if guy.isPlaying then 
     return 
    end 

    guy:setSequence("punch") 
    guy:play() 

    timer.performWithDelay(400, idlePose) 
end 

btn1:addEventListener("tap", onTap) 

Если вы хотите, чтобы остановить его от пробивания неоднократно (т. е. он все еще может делать другие вещи), то есть также свойство sequence, которое вы можете проверить:

Изменение условия if от guy.isPlaying до guy.isPlaying and guy.sequence == "punch" остановит событие только после стрельбы, если он будет пробивать, но разрешит другим событиям переопределить. То есть если ваш персонаж участвовал в запуске, и вы хотели, чтобы он ударил, как только нажала кнопка пуансона, а не дождалась конца анимации запуска.

+0

Привет, теперь я проверяю, выполняется ли sprite isPlaying перед воспроизведением анимации пуансона, но он все равно перезапускает анимацию, если я продолжаю нажимать кнопку. это действительно застопорило меня! – user3059109

+0

'локальная функция onTap (событие)' \t 'if guy.isPlaying == истинный затем' \t 'печати ("isplaying")' ' \t return' \t' 'else' печать ("notplaying")' ' парень: setSequence ("удар")' ' парень: play() ' ' end' 'end' ' btn1: addEventListener («tap», onTap) ' – user3059109

+0

В этом случае мне нужно будет увидеть больше кода thean как функцию' onTap', например, где и как определяется «парень». – amnn