rmagick-sprite 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,13 +1,39 @@
1
1
  # RMagick-Sprite
2
2
 
3
+ ## Description
4
+
5
+ `rmagick-sprite` allows you to easily slice up a spritesheet into `Magick::Image` instances.
6
+
7
+ The thought is that a spreadsheet contains many of a character's actions (standing, walking, jumping, etc..) which
8
+ consist of many frames.
9
+
10
+ This gem provides a DSL for defining those actions and the size/location of each frame on the spritesheet.
11
+
12
+ Then, you are free to use these images in your favorite game library, save each frame as separate images, or
13
+ even save each action as an animated GIF.
14
+
15
+ ## Install
16
+
17
+ ### Bundler: `gem 'rmagick-sprite'`
18
+
19
+ ### RubyGems: `gem install rmagick-sprite`
20
+
3
21
  ## Example
4
22
 
23
+ ### Example Spritesheet
24
+ <hr/ >
25
+
5
26
  In this example, I have one character printed on one spritesheet with only one line of
6
27
  evenly spaced/sized sprites.
7
28
 
8
29
  Here it is: ![Example Spritesheet](http://f.cl.ly/items/1h1T292v2F3N2f1D3c1b/0.png)
9
30
 
31
+ ### Declaration
32
+ <hr/ >
33
+
10
34
  ```ruby
35
+ require 'rmagick-sprite'
36
+
11
37
  sprite = Sprite.new do
12
38
  filename 'foo/bar/character_spritesheet.png'
13
39
 
@@ -21,7 +47,7 @@ sprite = Sprite.new do
21
47
  frame x: 16 * 1 # Frame 1
22
48
  # x: 0, y: 0 is the top-left corner..
23
49
  # I'm lazy, so I'm just taking the default_frame_options width and multiplying it by the
24
- # frame index to calculate the x coordinate.
50
+ # frame's offset to calculate the x coordinate.
25
51
  end
26
52
 
27
53
  walking do
@@ -38,27 +64,43 @@ sprite = Sprite.new do
38
64
  frame x: 16 * 4 # Frame 4
39
65
  end
40
66
  end
67
+ ```
41
68
 
42
- # Standing only has one frame so next_image will loop over the same frame
43
- p sprite.next_image # => Second Image (Magick::Image) same as: sprite.next_frame.image
69
+ ### Enumeration
70
+ <hr/ >
71
+
72
+ ```ruby
73
+ # The :standing action only has one frame, so next_image will loop over the same frame on each call
74
+ p sprite.next_image # => Second Image (Magick::Image) - Note that this is the same as: sprite.next_frame.image
44
75
  p sprite.next_image # => Second Image
45
76
 
46
77
  sprite.action = :walking
47
78
 
48
- # Here, we loop through the walking animation.. pump these images right into Gosu or your favorite gaming library
49
- p sprite.next_image # => First Image
50
- p sprite.next_image # => Second Image
51
- p sprite.next_image # => Third Image
52
- p sprite.next_image # => Second Image
53
- p sprite.next_image # => First Image
79
+ # Here, we loop through the :walking animation.. pump these images right into Gosu or your favorite gaming library
80
+ p sprite.next_image # => Image 3 - Frame 1
81
+ p sprite.next_image # => Image 4 - Frame 2
82
+ p sprite.next_image # => Image 5 - Frame 3
83
+ p sprite.next_image # => Image 4 - Frame 4
84
+ p sprite.next_image # => Image 3 - Frame 1
85
+ ```
86
+
87
+ ### Saving Frames and Actions
88
+ <hr/ >
54
89
 
55
- # Save each action's frame as a separate image
90
+ #### Save each action's frame as a separate image
91
+
92
+ ```ruby
56
93
  sprite.actions.each do |action_name, action|
57
94
  action.frames.each_with_index do |frame, index|
58
95
  frame.image.write "foo/bar/#{action_name}_#{index}.png"
59
96
  end
60
97
  end
98
+ ```
61
99
 
62
- # Saving an action as a gif (note: looks wonky with transparent backgrounds)
100
+ #### Saving an action as a gif
101
+
102
+ > Note: This looks a bit wonky with transparent backgrounds.
103
+
104
+ ```ruby
63
105
  sprite.actions[:running].write 'foo/bar/running.gif'
64
106
  ```
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.6
1
+ 0.0.7
@@ -65,13 +65,13 @@ class Sprite
65
65
  end
66
66
 
67
67
  def action
68
- @action ||= @actions[@default_action]
68
+ @action ||= @actions[@default_action || :default]
69
69
  end
70
70
 
71
71
  def add_action(name, options={}, &blk)
72
72
  raise 'options must be a Hash' unless options.respond_to?(:to_hash) || options.respond_to?(:to_h)
73
73
  options = options.to_hash rescue options.to_h
74
- options = { sprite: self }.merge(@default_action_options).merge(options)
74
+ options = { sprite: self, name: name }.merge(@default_action_options).merge(options)
75
75
 
76
76
  @actions[name] = Action.new(options, &blk)
77
77
  end
@@ -7,17 +7,18 @@ class Sprite
7
7
  end
8
8
  end
9
9
 
10
- attr_reader :sprite, :frames
10
+ attr_reader :sprite, :frames, :name
11
11
  attr_accessor :current_index
12
12
 
13
13
  def initialize(options, &blk)
14
14
  raise 'options must be a Hash' unless options.respond_to?(:to_hash) || options.respond_to?(:to_h)
15
15
  options = options.to_hash rescue options.to_h
16
16
 
17
+ raise 'options[:name] must be given' if options[:name].nil?
17
18
  raise 'options[:sprite] must be given' if options[:sprite].nil?
18
19
  raise 'options[:sprite] must be a Sprite' unless options[:sprite].instance_of?(Sprite)
19
20
 
20
- @sprite = options[:sprite]
21
+ @sprite, @name = options.values_at(:sprite, :name)
21
22
  @current_index, @frames = 0, []
22
23
 
23
24
  DSL.call(self, &blk)
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "rmagick-sprite"
5
- s.version = "0.0.6"
5
+ s.version = "0.0.7"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Ryan Scott Lewis"]
9
- s.date = "2012-11-05"
9
+ s.date = "2012-11-14"
10
10
  s.description = "Encapsulates a \"Sprite\" in RMagick."
11
11
  s.email = "ryan@rynet.us"
12
12
  s.files = [".gitignore", ".rvmrc", "Gemfile", "Gemfile.lock", "README.md", "Rakefile", "VERSION", "lib/rmagick-sprite.rb", "lib/rmagick-sprite/action.rb", "lib/rmagick-sprite/frame.rb", "rmagick-sprite.gemspec"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rmagick-sprite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-05 00:00:00.000000000 Z
12
+ date: 2012-11-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rmagick
@@ -90,7 +90,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
90
90
  version: '0'
91
91
  segments:
92
92
  - 0
93
- hash: -3528737833198202252
93
+ hash: 2005499775495730886
94
94
  required_rubygems_version: !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements: