space, → | next slide |
← | previous slide |
d | debug mode |
## <ret> | go to slide # |
c | table of contents (vi) |
f | toggle footer |
r | reload slides |
z | toggle help (this) |
while game_running?
# get user input
# run AI
# move everything
# resolve collisions
# draw graphics
# play sounds
# manage framerate
end
$ gamebox omg_aliens
$ cd omg_aliens
$ rake
src/demo_stage.rb
class DemoStage < Stage
def setup
super
@my_actor = create_actor :my_actor
# ...
src/demo_stage.rb
target.fill [25,25,25,255]
for star in @stars
target.draw_circle_s([star.x,star.y],1,[255,255,255,255])
end
src/my_actor.rb
class MyActor < Actor
end
src/my_actor.rb
class MyActorView < ActorView
def draw(target, x_off, y_off)
target.draw_box [actor.x,actor.y], [20,20], [240,45,45,255]
# ...
audible.rb (gamebox src)
require 'behavior'
class Audible < Behavior
def setup
@sound_manager = @actor.stage.sound_manager
# ...
$ ./script/generate actor Player
@player = spawn :player, :x => 200, :y => 550
has_behavior :graphical
attr_accessor :move_left, :move_right
def setup
i.while_key_pressed :left, self, :move_left
i.while_key_pressed :right, self, :move_right
has_behaviors :graphical, :updatable
def update(time_delta)
velocity = 0.12 * time_delta
@x += velocity if @move_right
@x -= velocity if @move_left
end
$ ./script/generate actor FrickinLaser
$ ./script/generate view FrickinLaserView
has_behavior :updatable
def update(time_delta)
velocity = 4*0.1*time_delta
@y -= velocity
remove_self if @y < 30
end
def draw(target, x_offset, y_offset)
target.draw_box_s([x,y], [x2,y2], color_array)
input_manager.reg KeyPressed, :space do
shoot
end
def shoot
laser = spawn :frickin_laser,
:x => @x + (image.width/2), :y => @y
end
has_behaviors :audible, :graph...
play_sound :shoot
:collidable => {:shape => :circle,
:radius => 20}
on_collision_of :alien, :frickin_laser do |alien,laser|
alien.remove_self
laser.remove_self
sound_manager.play_sound :death
end