SHOW:
|
|
- or go back to the newest paste.
| 1 | local dragTargets = {}
| |
| 2 | ||
| 3 | local testWell = display.newRect(0, 0, 60, 60) | |
| 4 | testWell:setFillColor(0xFF, 0x00, 0x00) | |
| 5 | testWell.x, testWell.y = display.contentWidth / 2, display.contentHeight * 0.25 | |
| 6 | ||
| 7 | function testWell:touch(event) | |
| 8 | local carry = dragTargets[event.id] | |
| 9 | if event.phase == "ended" and carry then | |
| 10 | carry:Drop(self.x, self.y) | |
| 11 | self:setFillColor(0x00, 0x00, 0xFF) | |
| 12 | return true | |
| 13 | end | |
| 14 | end | |
| 15 | testWell:addEventListener('touch', testWell)
| |
| 16 | ||
| 17 | local testDrag = display.newCircle(0, 0, 28) | |
| 18 | testDrag:setFillColor(0x00, 0xFF, 0x00) | |
| 19 | testDrag.x, testDrag.y = display.contentWidth / 2, display.contentHeight * 0.75 | |
| 20 | ||
| 21 | - | function testDrag:Drop(x, y) |
| 21 | + | local function dropDraggable(self, x, y) |
| 22 | self.oldX, self.oldY, self.id = nil | |
| 23 | self.x, self.y = x or self.x, y or self.y | |
| 24 | dragTargets[self], dragTargets[self.id] = nil | |
| 25 | Runtime:removeEventListener('touch', self)
| |
| 26 | end | |
| 27 | ||
| 28 | - | function testDrag:touch(event) |
| 28 | + | local function trackDrag(self, event) |
| 29 | if event.id == self.id then | |
| 30 | if event.phase == "moved" then | |
| 31 | self.x, self.y = event.x, event.y | |
| 32 | elseif event.phase == "ended" then | |
| 33 | self:Drop(self.oldX, self.oldY) | |
| 34 | end | |
| 35 | end | |
| 36 | end | |
| 37 | ||
| 38 | - | function startDrag(event) |
| 38 | + | local function startDrag(event) |
| 39 | local id, target = event.id, event.target | |
| 40 | if event.phase == "began" then | |
| 41 | dragTargets[id], dragTargets[target] = target, id | |
| 42 | target.id = id | |
| 43 | target.oldX, target.oldY = target.x, target.y | |
| 44 | Runtime:addEventListener('touch', target)
| |
| 45 | return true | |
| 46 | end | |
| 47 | end | |
| 48 | ||
| 49 | - | testDrag:addEventListener('touch', startDrag) |
| 49 | + | function makeDraggable(object) |
| 50 | object.touch = trackDrag | |
| 51 | object.Drop = dropDraggable | |
| 52 | object:addEventListener('touch', startDrag)
| |
| 53 | return object | |
| 54 | end | |
| 55 | ||
| 56 | makeDraggable(testDrag) |