ippa-movie_maker 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +27 -0
- data/README.rdoc +154 -0
- data/Rakefile +19 -0
- data/examples/axe.rb +24 -0
- data/examples/balls.rb +20 -0
- data/examples/echoes.rb +30 -0
- data/examples/gosu_base.rb +40 -0
- data/examples/gosu_rain.rb +34 -0
- data/examples/gosu_river_of_stars.rb +35 -0
- data/examples/gosu_triangles.rb +34 -0
- data/examples/gosu_wish_upon_a_star.rb +48 -0
- data/examples/ippagaming_intro.rb +23 -0
- data/examples/media/23700__hazure__chop.wav +0 -0
- data/examples/media/Establo.ttf +0 -0
- data/examples/media/FeaturedItem.ttf +0 -0
- data/examples/media/FreeSans.ttf +0 -0
- data/examples/media/Hursheys.ttf +0 -0
- data/examples/media/axe.png +0 -0
- data/examples/media/axe.svg +136 -0
- data/examples/media/ball.png +0 -0
- data/examples/media/ball.svg +182 -0
- data/examples/media/black.bmp +0 -0
- data/examples/media/blue_triangle.png +0 -0
- data/examples/media/blue_triangle.svg +81 -0
- data/examples/media/chop.wav +0 -0
- data/examples/media/cloth_background.png +0 -0
- data/examples/media/drawing.svg +86 -0
- data/examples/media/drip.wav +0 -0
- data/examples/media/green_triangle.png +0 -0
- data/examples/media/green_triangle.svg +104 -0
- data/examples/media/hit.wav +0 -0
- data/examples/media/ippa_gaming.png +0 -0
- data/examples/media/ippa_gaming.svg +463 -0
- data/examples/media/oil_drip.wav +0 -0
- data/examples/media/outdoor_scene.bmp +0 -0
- data/examples/media/outdoor_scene.png +0 -0
- data/examples/media/outdoor_scene.svg +316 -0
- data/examples/media/rain-bak1.wav +0 -0
- data/examples/media/rain.wav +0 -0
- data/examples/media/rain2.wav +0 -0
- data/examples/media/raindrop.png +0 -0
- data/examples/media/raindrop.svg +87 -0
- data/examples/media/raindrop_small.bmp +0 -0
- data/examples/media/raindrop_small.png +0 -0
- data/examples/media/red_triangle.png +0 -0
- data/examples/media/red_triangle.svg +81 -0
- data/examples/media/spaceship_noalpha.png +0 -0
- data/examples/media/star_5.png +0 -0
- data/examples/media/star_5.svg +83 -0
- data/examples/media/star_6.png +0 -0
- data/examples/media/star_6.svg +86 -0
- data/examples/rain.rb +26 -0
- data/examples/rain_advanced.rb +26 -0
- data/examples/rubygame_river_of_stars.rb +28 -0
- data/examples/zoom.rb +27 -0
- data/lib/movie_maker.rb +411 -0
- data/lib/movie_maker/action.rb +389 -0
- data/lib/movie_maker/core_extensions.rb +17 -0
- data/lib/movie_maker/gosu_autoload.rb +38 -0
- data/lib/movie_maker/gosu_clock.rb +139 -0
- data/lib/movie_maker/named_resource.rb +254 -0
- data/lib/movie_maker/sprite.rb +157 -0
- metadata +126 -0
data/History.txt
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
=== 0.3.0 2009-08-17
|
2
|
+
- new name, new gemified filestructure, gemspec
|
3
|
+
|
4
|
+
=== 0.x 2008-08-13
|
5
|
+
- Too much to list. New shiny API, better c0dezetc.
|
6
|
+
- this CHANGELOG deprecated until further.
|
7
|
+
- See http://github.com/ippa/rubygame_movie_maker/commits/master for changes.
|
8
|
+
|
9
|
+
=== 0.x 2008-08-06:
|
10
|
+
- Too much to list, but new actions.. zoom, rotate, play_sound etc
|
11
|
+
- Better chaining with "after" method
|
12
|
+
- Alot more samples
|
13
|
+
|
14
|
+
=== 0.x 2008-08-05:
|
15
|
+
- various renaming, :target_surface => :screen, :surface => sprite
|
16
|
+
- All action-work is now done with sprites instead of surfaces, a sprite must meet some common rubygameish criterias: have attributes x,y and image.
|
17
|
+
- make it more rubygame'ish
|
18
|
+
|
19
|
+
=== 0.x 2008-07-31:
|
20
|
+
- New better namespace/class names
|
21
|
+
- able to pass a Color to :background params
|
22
|
+
- new examples
|
23
|
+
- better organizing of files
|
24
|
+
- screen.update Outside of eventloop makes stuff faster :)
|
25
|
+
|
26
|
+
=== 0.x 2008-07-30:
|
27
|
+
- first version with basic example
|
data/README.rdoc
ADDED
@@ -0,0 +1,154 @@
|
|
1
|
+
= MovieMaker README
|
2
|
+
http://github.com/ippa/movie_maker/tree/master
|
3
|
+
|
4
|
+
== DESCRIPTION
|
5
|
+
Automate image movements/effects and sounds over a period of time, useful for games.
|
6
|
+
|
7
|
+
== What is it?
|
8
|
+
A rubylibrary to automate sprite movement/effects and sound over a timeline.
|
9
|
+
Either Rubygame (SDL) or Gosu (OpenGL) does the heavy lifting for us when it comes to drawing on the screen.
|
10
|
+
MovieMaker transparently supports both gamelibraries.
|
11
|
+
|
12
|
+
Use it for intros, ingame animations and simple "demos". Namingconventions tries to follow Rubygame.
|
13
|
+
It's also easy extendable with own actions. Documentation about that comming as soon as someone wants it =).
|
14
|
+
|
15
|
+
== Features:
|
16
|
+
|
17
|
+
Basic:
|
18
|
+
* @movie = MovieMaker.new
|
19
|
+
* @movie.resource(@sprite) - choose a resource (for now, a sprite) that following commands will apply on
|
20
|
+
|
21
|
+
Timeline methods
|
22
|
+
|
23
|
+
* @movie.between(start_at, stop_at) - following actions are performered between start_at/stop_at (seconds in floats)
|
24
|
+
* @movie.at(start_at) - following actions are performered once at start_at seconds into the movie
|
25
|
+
* @movie.delay(delay) - pause timeline for delay seconds
|
26
|
+
* @movie.during(time) - perform actions during time in seconds, starting right after the last action
|
27
|
+
* @movie.then - perform next action after the last one finishes
|
28
|
+
|
29
|
+
Action modifying a resource + are influenced by the timeline methods
|
30
|
+
|
31
|
+
* @movie.move([x,y]) - move sprite to x,y coordinates
|
32
|
+
* @movie.move_facing_direction([x,y]) - move sprite to x,y coordinates, but also turn the sprite in that direction using angle
|
33
|
+
* @movie.zoom(factor) - zoom height/width by factor (factor of 2 doubles the size, 0.5 makes it half the size)
|
34
|
+
* @movie.rotate(angle) - rotates clockwise for angle degrees. Give negative angles to rotate counterclockwise.
|
35
|
+
* @movie.fade_out - Fades to total transperency, only GOSU so far.
|
36
|
+
|
37
|
+
Actions modifying a resource
|
38
|
+
|
39
|
+
* @movie.acceleration([x,y]) - accelerates resource with the specified [x,y] offset. For example [-1,0] would make object accelerate left.
|
40
|
+
* @movie.velocity([x,y]) - sets static velocity specified [x,y] offset. For example [-1,0] would make object move left in a constant rate.
|
41
|
+
|
42
|
+
Actions doing a single thing
|
43
|
+
|
44
|
+
* @movie.play_sound(sound) - Play sound-object
|
45
|
+
|
46
|
+
|
47
|
+
All commands are chainable for a clear and verbose way of building scenes. For example:
|
48
|
+
@movie.resource(@cat).move([0,100]).between(0,5).move([500,100]).rotate(360).then.during(4).move([500,600]).then.play_sound(@sound)
|
49
|
+
|
50
|
+
see samples/ dir for more examples.
|
51
|
+
|
52
|
+
== Use it for:
|
53
|
+
=== Intros
|
54
|
+
Build up your game with a intro
|
55
|
+
|
56
|
+
=== ingame animations
|
57
|
+
You can make the movie play by calling update on it in your gameloop -- just like you do with your rubygame sprites/spritegroups. Note - this remains to be tested in an example.
|
58
|
+
|
59
|
+
=== Simple demos for your local demoparty
|
60
|
+
|
61
|
+
|
62
|
+
== Simple example
|
63
|
+
create your sprite (should include rubygames Sprites::Sprite):
|
64
|
+
@sprite = Sprite.new("sprite.png")
|
65
|
+
|
66
|
+
Sets up the movie, give it your initiated @screen-object and @background. MovieMaker supports autocreation of simple colored background as you can see bellow
|
67
|
+
movie = MovieMaker::Movie.new(:screen => @screen, :background => Color[:black])
|
68
|
+
|
69
|
+
1 sec (1000ms) into the movie, start moving the sprite from x/y: 0,0 (top left of the screen)
|
70
|
+
during 9 seconds (until 10000ms into the movie), set the speed so it will reach position x/y 800,600.
|
71
|
+
@movie.resource(@sprite).move([0,0]).between(1,10).move([800,600])
|
72
|
+
|
73
|
+
Play the movie you're created, blocks until it's done
|
74
|
+
@movie.play
|
75
|
+
|
76
|
+
|
77
|
+
== Chaining Simple example
|
78
|
+
movie_maker supports various chaining of actions, we could for example modify our last example like this:
|
79
|
+
Between seconds 1-9, move the sprite across the screen,rotate it 360 degrees at the same time, and when it's done, play a sound woff. Without the ".after."-chaining the sound would have been played after 1 seconds, not 10.
|
80
|
+
@movie.resource(@sprite).move([0,0]).between(1,10).move([800,600]).rotate(360).then.play_sound(Sound["woff.wav"])
|
81
|
+
|
82
|
+
|
83
|
+
== Gosu Example
|
84
|
+
Since Gosu has a different approach then rubygame a longer example is needed:
|
85
|
+
|
86
|
+
class MovieMakerWindow < Gosu::Window
|
87
|
+
def initialize
|
88
|
+
$screen = super(800, 600, false)
|
89
|
+
|
90
|
+
# Make Surface & Sound behave like shortcuts to GOSUs Image & Sample
|
91
|
+
require 'gosu_autoload'
|
92
|
+
|
93
|
+
# Set our autoloading dirs for quick and easy access to images and samples
|
94
|
+
Surface.autoload_dirs = [ File.join("samples", "media"), "media" ]
|
95
|
+
Sound.autoload_dirs = [ File.join("samples", "media"), "media" ]
|
96
|
+
|
97
|
+
@clock = ::Gosu::Clock.new
|
98
|
+
@clock.target_framerate = 200
|
99
|
+
|
100
|
+
setup_movie
|
101
|
+
end
|
102
|
+
|
103
|
+
#
|
104
|
+
# It's there the movie gets created
|
105
|
+
#
|
106
|
+
def setup_movie
|
107
|
+
@movie = Movie.new(:framework => :gosu, :screen => $screen)
|
108
|
+
0.upto(200) do |start|
|
109
|
+
# x,y = 0,0 is default
|
110
|
+
@star = Sprite.new("star_5.png")
|
111
|
+
# all following actions are applied to this resource
|
112
|
+
@movie.resource(@star)
|
113
|
+
@movie.color( Color.new(100 + rand(155),rand(255),rand(255),rand(255)) )
|
114
|
+
@movie.zoom(0.2)
|
115
|
+
@movie.between(start/10.0, start/10.0 + 2)
|
116
|
+
@movie.velocity([10,0])
|
117
|
+
@movie.acceleration([0, 0.05 + rand(0.1)])
|
118
|
+
@movie.rotate(angle = 90 * rand(10))
|
119
|
+
@movie.zoom(1.0 + rand(2.0))
|
120
|
+
@movie.fade_out.then.color(0x00FFFFFF)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
#
|
125
|
+
# Gosu calls update() automaticly
|
126
|
+
#
|
127
|
+
def update
|
128
|
+
@tick = @clock.tick()
|
129
|
+
|
130
|
+
if @movie.playing?(@clock.lifetime)
|
131
|
+
@movie.gosu_update(@clock.lifetime)
|
132
|
+
self.caption = "[framerate: #{@clock.framerate.to_i}] [Spriteupdates: #{@movie.updated_count}] [#{@clock.lifetime} : #{@movie.stop_at}]"
|
133
|
+
else
|
134
|
+
close
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
#
|
139
|
+
# Gosu calls draw() automaticly
|
140
|
+
#
|
141
|
+
def draw
|
142
|
+
@movie.gosu_draw(@clock.lifetime)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
MovieMakerWindow.new.show # Initialize and show main gosu window (starts calling update/draw)
|
147
|
+
|
148
|
+
== Requirements
|
149
|
+
Rubygame 2.3+ or Gosu 0.7.9+
|
150
|
+
|
151
|
+
|
152
|
+
== License
|
153
|
+
|
154
|
+
Same as rubygame.
|
data/Rakefile
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'hoe'
|
3
|
+
require File.dirname(__FILE__) + '/lib/movie_maker.rb'
|
4
|
+
|
5
|
+
include MovieMaker
|
6
|
+
|
7
|
+
Hoe.plugin :git
|
8
|
+
Hoe.spec "movie_maker" do
|
9
|
+
developer "ippa", "ippa@rubylicio.us"
|
10
|
+
self.readme_file = 'README.rdoc'
|
11
|
+
self.rubyforge_name = "movie_maker"
|
12
|
+
self.version = MovieMaker::VERSION
|
13
|
+
end
|
14
|
+
|
15
|
+
desc "Build a working gemspec"
|
16
|
+
task :gemspec do
|
17
|
+
system "rake git:manifest"
|
18
|
+
system "rake debug_gem | grep -v \"(in \" | grep -v \"erik\" > movie_maker.gemspec"
|
19
|
+
end
|
data/examples/axe.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
require File.join("..", "lib", "movie_maker")
|
3
|
+
|
4
|
+
include Rubygame
|
5
|
+
include MovieMaker
|
6
|
+
include MovieMaker::Rubygame
|
7
|
+
|
8
|
+
Rubygame.init()
|
9
|
+
Surface.autoload_dirs = [ "media" ]
|
10
|
+
Sound.autoload_dirs = [ "media" ]
|
11
|
+
|
12
|
+
@screen = Screen.set_mode([800, 600], 0, [HWSURFACE, DOUBLEBUF])
|
13
|
+
@background = Surface.autoload("outdoor_scene.bmp")
|
14
|
+
@axe = Sprite.new("axe.png")
|
15
|
+
@chop = Sound["chop.wav"]
|
16
|
+
|
17
|
+
movie = Movie.new(:screen => @screen, :background => @background)
|
18
|
+
#
|
19
|
+
# Monsterline that demonstrates moviemakes chaining
|
20
|
+
#
|
21
|
+
# OLD: movie.between(0, 2).move(@axe, :from => [0,200], :to => [700,350]).rotate(@axe, :angle => 370*2, :direction => :clockwise).after.play_sound(@chop)
|
22
|
+
|
23
|
+
movie.resource(@axe).move([0,200]).between(0, 2).move([700,350]).rotate(370*2).then.play_sound(@chop)
|
24
|
+
movie.play(:stop_at => 4)
|
data/examples/balls.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
require File.join("..", "lib", "movie_maker")
|
3
|
+
|
4
|
+
include Rubygame
|
5
|
+
include MovieMaker
|
6
|
+
include MovieMaker::Rubygame
|
7
|
+
|
8
|
+
Rubygame.init()
|
9
|
+
Surface.autoload_dirs = [ "media" ]
|
10
|
+
|
11
|
+
@screen = Screen.set_mode([800, 600], 0)
|
12
|
+
@background = Surface.autoload("cloth_background.png")
|
13
|
+
|
14
|
+
movie = Movie.new(:screen => @screen, :background => @background)
|
15
|
+
movie.resource(Sprite.new("ball.png")).move([100,100]).between(0,6).move([600,100])
|
16
|
+
movie.resource(Sprite.new("ball.png")).move([100,200]).between(1,6).move([600,200])
|
17
|
+
movie.resource(Sprite.new("ball.png")).move([100,300]).between(2,6).move([600,300])
|
18
|
+
movie.resource(Sprite.new("ball.png")).move([100,400]).between(3,6).move([600,400])
|
19
|
+
movie.resource(Sprite.new("ball.png")).move([100,500]).between(4,6).move([600,500])
|
20
|
+
movie.play
|
data/examples/echoes.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
require File.join("..", "lib", "movie_maker")
|
3
|
+
|
4
|
+
include Rubygame
|
5
|
+
include MovieMaker
|
6
|
+
include MovieMaker::Rubygame
|
7
|
+
|
8
|
+
TTF.setup()
|
9
|
+
Rubygame.init()
|
10
|
+
Surface.autoload_dirs = [ "media" ]
|
11
|
+
Sound.autoload_dirs = [ "media" ]
|
12
|
+
|
13
|
+
@raindrop = Sprite.new("raindrop.png")
|
14
|
+
@drip = Sound["drip.wav"]
|
15
|
+
@screen = Screen.set_mode([800, 600], 0, [HWSURFACE])
|
16
|
+
@movie = Movie.new(:screen => @screen, :background => Color[:black], :target_framerate => 200)
|
17
|
+
|
18
|
+
@echo_delay = 0.4
|
19
|
+
#
|
20
|
+
# create 10 raindrops after eachother with echo soundeffects
|
21
|
+
#
|
22
|
+
(0..5).each do |nr|
|
23
|
+
x = 100+rand(600)
|
24
|
+
fall_time = 2
|
25
|
+
start_at = nr * fall_time
|
26
|
+
stop_at = nr * fall_time + fall_time
|
27
|
+
@movie.resource(@raindrop).move([x,-1000]).between(start_at,stop_at).move([x, 650])
|
28
|
+
@movie.at(stop_at).play_sound(@drip.dup).delay(@echo_delay).play_sound(@drip.dup, :volume=>0.6).delay(@echo_delay).play_sound(@drip.dup,:volume => 0.3).delay(@echo_delay).play_sound(@drip.dup,:volume => 0.2)
|
29
|
+
end
|
30
|
+
@movie.play(:stop_at => 13)
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require File.join("..", "lib", "movie_maker")
|
3
|
+
|
4
|
+
#
|
5
|
+
# Usefull stuff for the Gosu examples
|
6
|
+
#
|
7
|
+
module Gosu
|
8
|
+
class MovieMakerWindow < Gosu::Window
|
9
|
+
def initialize
|
10
|
+
$screen = super(800, 600, false)
|
11
|
+
|
12
|
+
# Make Surface & Sound behave like shortcuts to GOSUs Image & Sample
|
13
|
+
require 'gosu_autoload'
|
14
|
+
|
15
|
+
# Set our autoloading dirs for quick and easy access to images and samples
|
16
|
+
Surface.autoload_dirs = [ File.join("samples", "media"), "media" ]
|
17
|
+
Sound.autoload_dirs = [ File.join("samples", "media"), "media" ]
|
18
|
+
|
19
|
+
@clock = ::Gosu::Clock.new
|
20
|
+
@clock.target_framerate = 200
|
21
|
+
|
22
|
+
self
|
23
|
+
end
|
24
|
+
|
25
|
+
def update
|
26
|
+
@tick = @clock.tick()
|
27
|
+
|
28
|
+
#if @movie.playing?(@clock.lifetime)
|
29
|
+
@movie.gosu_update(@clock.lifetime)
|
30
|
+
self.caption = "[framerate: #{@clock.framerate.to_i}] [Spriteupdates: #{@movie.updated_count}] [#{@clock.lifetime} : #{@movie.stop_at}]"
|
31
|
+
#else
|
32
|
+
# close
|
33
|
+
#end
|
34
|
+
end
|
35
|
+
|
36
|
+
def draw
|
37
|
+
@movie.gosu_draw(@clock.lifetime)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require File.join("..", "lib", "movie_maker")
|
3
|
+
require 'gosu_base.rb'
|
4
|
+
|
5
|
+
class GameWindow < Gosu::MovieMakerWindow
|
6
|
+
def initialize
|
7
|
+
super
|
8
|
+
setup_movie
|
9
|
+
end
|
10
|
+
|
11
|
+
def setup_movie
|
12
|
+
@movie = Movie.new(:framework => :gosu, :screen => $screen)
|
13
|
+
|
14
|
+
start_at = stop_at = 0
|
15
|
+
(1..500).each do |nr|
|
16
|
+
x = rand(800)
|
17
|
+
start_at = nr / 50.0
|
18
|
+
stop_at = nr / 50.0 + 1.0
|
19
|
+
|
20
|
+
@raindrop = Sprite.new("raindrop_small.png")
|
21
|
+
@movie.resource(@raindrop).move([x,0]).between(start_at, stop_at).move_facing_direction([x+100+(nr/5)+rand(50),650])
|
22
|
+
end
|
23
|
+
|
24
|
+
@movie.at(0).play_sound(Sample["rain2.wav"])
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
if $0 == __FILE__
|
29
|
+
include MovieMaker
|
30
|
+
include MovieMaker::Gosu # Among others add sprites image to global $screen
|
31
|
+
GameWindow.new.show
|
32
|
+
end
|
33
|
+
|
34
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require File.join("..", "lib", "movie_maker")
|
3
|
+
require 'gosu_base.rb'
|
4
|
+
|
5
|
+
class GameWindow < Gosu::MovieMakerWindow
|
6
|
+
def initialize
|
7
|
+
super
|
8
|
+
setup_movie
|
9
|
+
end
|
10
|
+
|
11
|
+
def setup_movie
|
12
|
+
@movie = Movie.new(:framework => :gosu, :screen => $screen)
|
13
|
+
0.upto(200) do |start|
|
14
|
+
@star = Sprite.new("star_5.png") # x,y = 0,0 is default
|
15
|
+
@movie.resource(@star) # all following actions are applied to this resource
|
16
|
+
@movie.color( Color.new(100 + rand(155),rand(255),rand(255),rand(255)) )
|
17
|
+
@movie.zoom(0.2)
|
18
|
+
@movie.between(start/10.0, start/10.0 + 2)
|
19
|
+
@movie.velocity([10,0])
|
20
|
+
@movie.acceleration([0, 0.05 + rand(0.1)])
|
21
|
+
@movie.rotate(angle = 90 * rand(10))
|
22
|
+
@movie.zoom(1.0 + rand(2.0))
|
23
|
+
@movie.fade_out.then.color(0x00FFFFFF)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
if $0 == __FILE__
|
30
|
+
include MovieMaker
|
31
|
+
include MovieMaker::Gosu
|
32
|
+
GameWindow.new.show
|
33
|
+
end
|
34
|
+
|
35
|
+
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require File.join("..", "lib", "movie_maker")
|
3
|
+
require 'gosu_base.rb'
|
4
|
+
|
5
|
+
class GameWindow < Gosu::MovieMakerWindow
|
6
|
+
def initialize
|
7
|
+
super
|
8
|
+
setup_movie
|
9
|
+
end
|
10
|
+
|
11
|
+
def setup_movie
|
12
|
+
@movie = Movie.new(:framework => :gosu, :screen => $screen)
|
13
|
+
0.upto(5) do |start|
|
14
|
+
|
15
|
+
@red = Sprite.new("red_triangle.png")
|
16
|
+
@green = Sprite.new("green_triangle.png")
|
17
|
+
@blue = Sprite.new("blue_triangle.png")
|
18
|
+
stop = start + 4
|
19
|
+
|
20
|
+
@movie.resource(@red).move([0,0]).zoom(0.1).between(start, stop).move([800,650]).rotate(1000).zoom(3).fade_out
|
21
|
+
@movie.resource(@green).move([800,0]).zoom(0.1).between(start, stop).move([0,650]).rotate(1000).zoom(3).fade_out
|
22
|
+
@movie.resource(@blue).move([800,600]).zoom(0.1).between(start, stop).move([0,0]).rotate(1000).zoom(3).fade_out
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
if $0 == __FILE__
|
29
|
+
include MovieMaker
|
30
|
+
include MovieMaker::Gosu
|
31
|
+
GameWindow.new.show
|
32
|
+
end
|
33
|
+
|
34
|
+
|
@@ -0,0 +1,48 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require File.join("..", "lib", "movie_maker")
|
3
|
+
require 'gosu_base.rb'
|
4
|
+
|
5
|
+
class GameWindow < Gosu::MovieMakerWindow
|
6
|
+
def initialize
|
7
|
+
super
|
8
|
+
setup_movie
|
9
|
+
end
|
10
|
+
|
11
|
+
def setup_movie
|
12
|
+
@movie = Movie.new(:framework => :gosu, :screen => $screen, :draw_mode => :additive, :loop => true)
|
13
|
+
0.upto(40) do |nr|
|
14
|
+
@star = Sprite.new("star_6.png", :x => rand(800), :y => -10)
|
15
|
+
color = Color.new(0x66484D18)
|
16
|
+
flash = Color.new(0xFFFFFFFF)
|
17
|
+
|
18
|
+
@start = nr/4.0
|
19
|
+
zoom = 0.1+rand(0)/5
|
20
|
+
|
21
|
+
# this resource will follow through all steps bellow
|
22
|
+
@movie.resource(@star)
|
23
|
+
|
24
|
+
# setup (before a between)
|
25
|
+
@movie.zoom(zoom).color(color)
|
26
|
+
|
27
|
+
# the "movie" (resource is still choosen)
|
28
|
+
@movie.between(@start, @start+10).velocity([0,1.2+rand(0)/5]).rotate(200-rand(400))
|
29
|
+
|
30
|
+
# A falling star
|
31
|
+
if rand(10) == 0
|
32
|
+
@movie.at(@start+2+rand(4)).zoom(zoom+0.3).color(flash).during(1).rotate(720).zoom(0.01).fade_out
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
@movie.restart_at(@start)
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
if $0 == __FILE__
|
43
|
+
include MovieMaker
|
44
|
+
include MovieMaker::Gosu
|
45
|
+
GameWindow.new.show
|
46
|
+
end
|
47
|
+
|
48
|
+
|