SHOW:
|
|
- or go back to the newest paste.
1 | display.setStatusBar(display.HiddenStatusBar) | |
2 | local storyboard = require "storyboard" | |
3 | local scene = storyboard.newScene() | |
4 | require("physics") | |
5 | require("sprite") | |
6 | ||
7 | ---------------------------- | |
8 | -- Functions | |
9 | ---------------------------- | |
10 | ||
11 | local function collisionGround(event) | |
12 | event.other:removeSelf() | |
13 | end | |
14 | ||
15 | local function collisionCharacter(event) | |
16 | if (event.other.type == "penny") then | |
17 | storyboard.money = storyboard.money + 0.01 | |
18 | event.other:removeSelf() | |
19 | elseif (event.other.type == "nickel") then | |
20 | storyboard.money = storyboard.money + 0.05 | |
21 | event.other:removeSelf() | |
22 | elseif (event.other.type == "dime") then | |
23 | storyboard.money = storyboard.money + 0.10 | |
24 | event.other:removeSelf() | |
25 | elseif (event.other.type == "quarter") then | |
26 | storyboard.money = storyboard.money + 0.25 | |
27 | event.other:removeSelf() | |
28 | elseif (event.other.type == "rock") then | |
29 | - | storyboard.gotoScene("gameover", "slideLeft", 1000) |
29 | + | timer.performWithDelay(1, function() storyboard.gotoScene("gameover", "slideLeft", 1000) end) |
30 | end | |
31 | textMoney.text = string.format("$%.02f", storyboard.money) | |
32 | end | |
33 | ||
34 | local motion = 0 | |
35 | local isPaused = false | |
36 | ||
37 | local function moveLeft(event) | |
38 | if not isPaused then | |
39 | motion = -9 | |
40 | buttonLeft:prepare("leftt") | |
41 | buttonLeft:play() | |
42 | character:prepare("charml") | |
43 | character:play() | |
44 | character.type = "left" | |
45 | end | |
46 | end | |
47 | ||
48 | local function moveRight(event) | |
49 | if not isPaused then | |
50 | motion = 9 | |
51 | buttonRight:prepare("rightt") | |
52 | buttonRight:play() | |
53 | character:prepare("charmr") | |
54 | character:play() | |
55 | character.type = "right" | |
56 | end | |
57 | end | |
58 | ||
59 | local function moveCharacter(event) | |
60 | character.x = character.x + motion | |
61 | if character.x < 50 then character.x = 50 | |
62 | elseif character.x > 910 then character.x = 910 end | |
63 | buttonLeft:toFront() | |
64 | buttonRight:toFront() | |
65 | end | |
66 | ||
67 | local function stopCharacter(event) | |
68 | motion = 0 | |
69 | buttonLeft:prepare("leftu") | |
70 | buttonLeft:play("leftu") | |
71 | buttonRight:prepare("rightu") | |
72 | buttonRight:play("rightu") | |
73 | if (character.type == "left") then | |
74 | character:prepare("charsl") | |
75 | character:play("charsl") | |
76 | elseif (character.type == "right") then | |
77 | character:prepare("charsr") | |
78 | character:play("charsr") | |
79 | end | |
80 | end | |
81 | ||
82 | local function pauseGame(scene) | |
83 | isPaused = not isPaused | |
84 | if isPaused then | |
85 | buttonPause:prepare("pauset") | |
86 | buttonPause:play() | |
87 | physics.pause() | |
88 | timer.pause(createCoinsTimer) | |
89 | else | |
90 | buttonPause:prepare("pauseu") | |
91 | buttonPause:play() | |
92 | physics.start() | |
93 | timer.resume(createCoinsTimer) | |
94 | end | |
95 | end | |
96 | ||
97 | ---------------------------- | |
98 | -- Storyboard | |
99 | ---------------------------- | |
100 | ||
101 | function scene:createScene(event) | |
102 | local group = self.view | |
103 | physics.start() | |
104 | physics.pause() | |
105 | local background = display.newImage(group, "visuals/game_background.png", 0, 0) | |
106 | ground = display.newImage(group, "visuals/game_ground.png", 0, 590) | |
107 | physics.addBody(ground, "static") | |
108 | ground:addEventListener("collision", collisionGround) | |
109 | local buttonSheet = sprite.newSpriteSheet("visuals/game_buttons.png", 75, 75) | |
110 | local buttonLeftSet = sprite.newSpriteSet(buttonSheet, 1, 2) | |
111 | sprite.add(buttonLeftSet, "leftu", 1, 1, 60000, 0) | |
112 | sprite.add(buttonLeftSet, "leftt", 2, 1, 60000, 0) | |
113 | local buttonRightSet = sprite.newSpriteSet(buttonSheet, 3, 2) | |
114 | sprite.add(buttonRightSet, "rightu", 3, 1, 60000, 0) | |
115 | sprite.add(buttonRightSet, "rightt", 4, 1, 60000, 0) | |
116 | local buttonPauseSet = sprite.newSpriteSet(buttonSheet, 5, 2) | |
117 | sprite.add(buttonPauseSet, "pauseu", 5, 1, 60000, 0) | |
118 | sprite.add(buttonPauseSet, "pauset", 6, 1, 60000, 0) | |
119 | buttonLeft = sprite.newSprite(buttonLeftSet) | |
120 | buttonLeft:addEventListener("touch", moveLeft) | |
121 | buttonLeft.x = 57.5 | |
122 | buttonLeft.y = 582.5 | |
123 | group:insert(buttonLeft) | |
124 | buttonRight = sprite.newSprite(buttonRightSet) | |
125 | buttonRight:addEventListener("touch", moveRight) | |
126 | buttonRight.x = 902.5 | |
127 | buttonRight.y = 582.5 | |
128 | group:insert(buttonRight) | |
129 | buttonPause = sprite.newSprite(buttonPauseSet) | |
130 | buttonPause:addEventListener("tap", function(event) pauseGame(self) end) -- Shorten? | |
131 | buttonPause.x = 902.5 | |
132 | buttonPause.y = 57.5 | |
133 | group:insert(buttonPause) | |
134 | local characterSheet = sprite.newSpriteSheet("visuals/game_character.png", 100, 100) | |
135 | local characterSet = sprite.newSpriteSet(characterSheet, 1, 8) | |
136 | sprite.add(characterSet, "charsl", 1, 1, 60000, 0) | |
137 | sprite.add(characterSet, "charml", 2, 3, 150, 0) | |
138 | sprite.add(characterSet, "charsr", 5, 1, 60000, 0) | |
139 | sprite.add(characterSet, "charmr", 6, 3, 150, 0) | |
140 | character = sprite.newSprite(characterSet) | |
141 | physics.addBody(character, "static") | |
142 | character:addEventListener("collision", collisionCharacter) | |
143 | - | self:addEventListener("enterFrame", moveCharacter) |
143 | + | self.view:addEventListener("enterFrame", moveCharacter) |
144 | - | self:addEventListener('Stop', stopCharacter) |
144 | + | self.view:addEventListener('Stop', stopCharacter) |
145 | character.x = display.contentWidth / 2 | |
146 | character.y = 540 | |
147 | group:insert(character) | |
148 | storyboard.money = 0 | |
149 | textMoney = display.newText(string.format("$%.02f", storyboard.money), 0, 20, native.systemFont, 75) | |
150 | textMoney:setReferencePoint(display.CenterReferencePoint) | |
151 | textMoney.x = display.contentWidth / 2 | |
152 | textMoney:setTextColor(0, 0, 0) | |
153 | group:insert(textMoney) | |
154 | - | Runtime:addEventListener('enterFrame', self) |
154 | + | Runtime:addEventListener('enterFrame', self.view) |
155 | - | Runtime:addEventListener('touch', self) |
155 | + | Runtime:addEventListener('touch', self.view) |
156 | end | |
157 | ||
158 | local function createCoins(scene) | |
159 | local group = scene.view | |
160 | local coinSheet = sprite.newSpriteSheet("visuals/game_coins.png", 50, 50) | |
161 | local coinSet = sprite.newSpriteSet(coinSheet, 1, 25) | |
162 | sprite.add(coinSet, "penny", 1, 5, 250, 0) | |
163 | sprite.add(coinSet, "nickel", 6, 5, 250, 0) | |
164 | sprite.add(coinSet, "dime", 11, 5, 250, 0) | |
165 | sprite.add(coinSet, "quarter", 16, 5, 250, 0) | |
166 | sprite.add(coinSet, "rock", 21, 5, 250, 0) | |
167 | local coin = sprite.newSprite(coinSet) | |
168 | physics.addBody(coin, "dynamic") | |
169 | coin.isSensor = true | |
170 | coin.isFixedRotation = true | |
171 | local chooseCoin = math.random(1, 100) | |
172 | if chooseCoin >= 1 and chooseCoin <= 25 then | |
173 | coin.type = "penny" | |
174 | elseif chooseCoin >= 26 and chooseCoin <= 45 then | |
175 | coin.type = "nickel" | |
176 | elseif chooseCoin >= 46 and chooseCoin <= 65 then | |
177 | coin.type = "dime" | |
178 | elseif chooseCoin >= 66 and chooseCoin <= 80 then | |
179 | coin.type = "quarter" | |
180 | elseif chooseCoin >= 81 and chooseCoin <= 100 then | |
181 | coin.type = "rock" | |
182 | end | |
183 | coin:prepare(coin.type) | |
184 | coin:play() | |
185 | local chooseLocation = math.random(0, 1) | |
186 | coin.y = 400 | |
187 | coin.x = -25 + chooseLocation * 1010 | |
188 | coin:applyLinearImpulse(0.2 - (chooseLocation * 0.4), -math.random(0.50, 3.45) / 10, coin.x, coin.y) | |
189 | local nativeRemove = coin.removeSelf | |
190 | function coin:removeSelf(...) | |
191 | scene:removeEventListener('exitScene', self) | |
192 | nativeRemove(self, ...) | |
193 | end | |
194 | function coin:exitScene(event) | |
195 | timer.performWithDelay(1, | |
196 | function(...) | |
197 | - | self:removeSelf() |
197 | + | scene:removeEventListener('exitScene', self) |
198 | end | |
199 | ) | |
200 | ||
201 | end | |
202 | scene:addEventListener('exitScene', coin) | |
203 | group:insert(coin) | |
204 | end | |
205 | ||
206 | local function sceneEnterFrame(self, event) | |
207 | if not isPaused then | |
208 | self:dispatchEvent(event) | |
209 | end | |
210 | end | |
211 | ||
212 | local function sceneTouch(self, event) | |
213 | if not isPaused and event.phase == "ended" then | |
214 | self:dispatchEvent{name = "Stop"} | |
215 | end | |
216 | end | |
217 | ||
218 | function scene:enterScene(event) | |
219 | physics.start() | |
220 | physics.setGravity(0, 9.8) | |
221 | - | scene.enterFrame = sceneEnterFrame |
221 | + | scene.view.enterFrame = sceneEnterFrame |
222 | - | scene.touch = sceneTouch |
222 | + | scene.view.touch = sceneTouch |
223 | - | createCoinsTimer = timer.performWithDelay(500, function() createCoins(self) end, 0) -- Shorten? |
223 | + | createCoinsTimer = timer.performWithDelay(500, function() createCoins(self) end, 0) -- Shorten? |
224 | end | |
225 | ||
226 | function scene:exitScene(event) | |
227 | physics.stop() | |
228 | - | self.enterFrame = nil |
228 | + | self.view.enterFrame = nil |
229 | - | self.touch = nil |
229 | + | self.view.touch = nil |
230 | timer.cancel(createCoinsTimer) | |
231 | storyboard.purgeScene("game") | |
232 | end | |
233 | ||
234 | function scene:destroyScene(event) | |
235 | Runtime:removeEventListener('enterFrame', self) | |
236 | - | Runtime:removeEventListener('touch', moveCharacter) |
236 | + | Runtime:removeEventListener('touch', self) |
237 | ||
238 | end | |
239 | ||
240 | scene:addEventListener("createScene", scene) | |
241 | scene:addEventListener("enterScene", scene) | |
242 | scene:addEventListener("exitScene", scene) | |
243 | scene:addEventListener("destroyScene", scene) | |
244 | return scene |