add parallax background

- scaled assets to 960x540 and adjusted window for that size
- adjusted ground level
- collect background and foreground actions in functions
- tuned physics
This commit is contained in:
Peter Tillemans 2024-04-28 13:59:52 +02:00
parent b6dd72aeb8
commit 22c7398e63
7 changed files with 33 additions and 12 deletions

View file

@ -4,7 +4,7 @@
A flappy bird clone to get experience with Common Lisp and game development.
* Game Plan [7/15]
* Game Plan [8/15]
- [X] Create bird, well, ball
- [X] Add physics for ball movement
- [X] Add inputs on key and mouse clicks
@ -12,7 +12,7 @@ A flappy bird clone to get experience with Common Lisp and game development.
- [X] Scroll pipes
- [X] Detect collisions
- [X] Add regression tests
- [ ] Add background
- [X] Add background
- [ ] Create random pipes
- [ ] Add goal after last pipe
- [ ] Create state machine to manage start/play/finish

BIN
assets/level1/clouds.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
assets/level1/far.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
assets/level1/ground.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

BIN
assets/level1/middle.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
assets/level1/sky.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -93,33 +93,54 @@
;; -------------------------------------------------------------
(defun draw_image_layer(resource scroll-x)
(let ((pic (load-resource resource))
(offset (mod scroll-x 960))
)
(draw (crop pic offset 0 960 540)
:x 0 :y 0 :width 960 :height 540)))
(defun draw_background (scroll-x)
(draw_image_layer "assets/level1/sky.png" 0)
(draw_image_layer "assets/level1/clouds.png" (* -0.15 scroll-x))
(draw_image_layer "assets/level1/far.png" (* 0.25 scroll-x))
(draw_image_layer "assets/level1/middle.png" (* 0.6 scroll-x)))
(defun draw_foreground (pipes scroll-x pipe-pen height)
(dolist (pipe pipes)
(pipe-draw pipe pipe-pen scroll-x height))
(draw_image_layer "assets/level1/ground.png" scroll-x))
(defsketch flappy-ball
((title "Flappy Ball")
(width 800)
(height 600)
(width 960)
(height 540)
(ground-level 440)
(copy-pixels nil)
(ball (make-ball (/ width 10) (/ height 3) 0 10))
(gravity 0.05)
(flap-speed -2.5)
(gravity 0.025)
(flap-speed -1)
(ball-pen (make-pen :stroke (gray 0.5) :fill sketch:+yellow+ :weight 1))
(collision-pen (make-pen :stroke (gray 0.5) :fill sketch:+red+ :weight 1))
(pipe-pen (make-pen :stroke (gray 0.5) :fill sketch:+green+ :weight 1))
(pipes (list
(make-pipe 200 200 100 20)
(make-pipe 400 300 100 20)
(make-pipe 600 400 100 20)))
(make-pipe 200 100 100 20)
(make-pipe 400 200 100 20)
(make-pipe 600 300 100 20)))
(scroll-x 0.0)
(scroll-speed 0.2))
(dolist (pipe pipes)
(pipe-draw pipe pipe-pen scroll-x height))
(draw_background scroll-x)
(draw_foreground pipes scroll-x pipe-pen height)
(ball-draw ball
(if (some (lambda (pipe) (pipe-collides pipe ball scroll-x)) pipes)
collision-pen
ball-pen))
(setf scroll-x (+ scroll-x scroll-speed))
(setf ball (ball-move ball gravity height)))
(setf ball (ball-move ball gravity ground-level)))
(defmethod on-click ((instance flappy-ball) x y)
(with-slots (ball flap-speed) instance