Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local button = {}
- local function trackButton(event)
- local button = event.target
- if event.phase == "began" then
- display.getCurrentStage():setFocus(button)
- button._isFocused = true
- button._down = true
- button:dispatchEvent{name='Button.State'; target=button, down=true}
- elseif button._isFocused then
- if event.phase == "moved" then
- local bounds = button.contentBounds
- local isWithinBounds = bounds.xMin <= event.x and bounds.xMax >= event.x and bounds.yMin <= event.y and bounds.yMax >= event.y
- if isWithinBounds ~= button._down then
- button._down = isWithinBounds
- button:dispatchEvent{name='Button.State'; target=button, down=button._down}
- end
- elseif event.phase == "ended" or event.phase == "cancelled" then
- button:dispatchEvent{name='Button.State'; target=button, down=false}
- button:dispatchEvent{name='Button'; target=button, activate=button._down and event.phase == "ended"}
- display.getCurrentStage():setFocus(button, nil)
- button._down = nil
- button._isFocused = nil
- end
- end
- return true
- end
- function button.new(object)
- object:addEventListener('touch', trackButton)
- end
- local function spriteButton(event)
- event.target.currentFrame = event.down and 2 or 1
- end
- function button.sprite(object)
- object = button.new(object)
- object:addEventListener('Button.State', spriteButton)
- return object
- end
- return button
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement