Changeset 27465 for lang/ruby/starframe
- Timestamp:
- 12/27/08 10:00:10 (4 years ago)
- Location:
- lang/ruby/starframe
- Files:
-
- 2 added
- 1 removed
- 8 modified
-
lib/starframe/sprite/collision.rb (modified) (1 diff)
-
lib/starframe/sprite/collision/base.rb (added)
-
lib/starframe/sprite/collision/circle.rb (modified) (2 diffs)
-
lib/starframe/sprite/collision/dot.rb (modified) (1 diff)
-
lib/starframe/sprite/collision/rect.rb (modified) (4 diffs)
-
test/starframe/sprite/collision/test_base.rb (added)
-
test/starframe/sprite/collision/test_circle.rb (modified) (2 diffs)
-
test/starframe/sprite/collision/test_dot.rb (modified) (2 diffs)
-
test/starframe/sprite/collision/test_rect.rb (modified) (2 diffs)
-
test/starframe/sprite/test_collidable.rb (modified) (1 diff)
-
test/starframe/sprite/test_collision.rb (deleted)
Legend:
- Unmodified
- Added
- Removed
-
lang/ruby/starframe/lib/starframe/sprite/collision.rb
r27463 r27465 1 # = StarFrame::Sprite::Collision -- スプライト当たり判定定義 1 require "starframe/sprite/collision/base" 2 2 3 3 module StarFrame 4 4 class Sprite 5 # = Sprite::Collisionクラス 6 # スプライト当たり判定クラス。 7 # 8 # 衝突判定を行い、適切な衝突処理を実行するクラス。 9 class Collision 5 module Collision #:nodoc: 10 6 autoload :Dot, "starframe/sprite/collision/dot" 11 7 autoload :Circle, "starframe/sprite/collision/circle" 12 8 autoload :Rect, "starframe/sprite/collision/rect" 13 14 # 基準座標 - 当たり判定の基準座標のX座標。15 attr_accessor :x16 # 基準位置 - 当たり判定の基準座標のY座標。17 attr_accessor :y18 # 当たり判定の基準座標を[x, y]の配列で取得。19 def position20 [@x, @y]21 end22 # 当たり判定の基準座標を[x, y]の配列で設定。23 def position= position24 @x, @y = position25 end26 27 class << self #:nodoc:28 # 指定された点が矩形の中に入っているかどうか判定する29 def dot_in_rect? dot, rect30 rect[0][0] <= dot[0] && dot[0] <= rect[1][0] &&31 rect[0][1] <= dot[1] && dot[1] <= rect[1][1]32 end33 34 # 指定された点が円の中に入っているかどうか判定する35 def dot_in_circle? dot, circle36 (circle[0][0]-dot[0])**2 + (circle[0][1]-dot[1])**2 <= circle[1]**237 end38 end39 40 def initialize sprite, method_name, *options #:nodoc:41 @sprite, @method_name = sprite, method_name42 @x = @y = 043 end44 45 # 衝突しているかどうかを判定する46 def collide? other47 other.collide_dispatch? self unless @dispatched48 end49 50 # 衝突しているかどうかを判定し、衝突していれば衝突処理を実行する51 def collide other52 return false unless collide? other53 call other.sprite54 other.call @sprite55 return true56 end57 58 protected59 attr_reader :sprite #:nodoc:60 61 def call other #:nodoc:62 @sprite.__send__ @method_name, other if @method_name63 end64 65 def global_position #:nodoc:66 [@sprite.x+@x, @sprite.y+@y]67 end68 69 def collide_dispatch? other #:nodoc:70 @dispatched = true71 self.collide? other72 ensure73 @dispatched = nil74 end75 9 end 76 10 end -
lang/ruby/starframe/lib/starframe/sprite/collision/circle.rb
r27463 r27465 1 require "starframe/sprite/collision/base" 2 1 3 module StarFrame 2 4 class Sprite 3 classCollision4 class Circle < Collision5 module Collision 6 class Circle < Base 5 7 attr_reader :x, :y, :radius 6 8 … … 19 21 return super 20 22 end 21 Collision.dot_in_circle?(other.global_position, [global_position, radius])23 dot_in_circle?(other.global_position, [global_position, radius]) 22 24 end 23 25 end -
lang/ruby/starframe/lib/starframe/sprite/collision/dot.rb
r27463 r27465 1 require "starframe/sprite/collision/base" 2 1 3 module StarFrame 2 4 class Sprite 3 classCollision4 class Dot < Collision5 module Collision 6 class Dot < Base 5 7 attr_reader :x, :y 6 8 -
lang/ruby/starframe/lib/starframe/sprite/collision/rect.rb
r27463 r27465 1 require "starframe/sprite/collision/base" 2 1 3 module StarFrame 2 4 class Sprite 3 classCollision4 class Rect < Collision5 module Collision 6 class Rect < Base 5 7 attr_reader :x, :y, :width, :height 6 8 … … 24 26 return super 25 27 end 26 Collision.dot_in_rect?(other.global_position, [[left, top], [right, bottom]])28 dot_in_rect?(other.global_position, [[left, top], [right, bottom]]) 27 29 end 28 30 … … 41 43 42 44 other_position = other.global_position 43 return false unless Collision.dot_in_rect?(other_position, [[vleft, vtop], [vright, vbottom]])45 return false unless dot_in_rect?(other_position, [[vleft, vtop], [vright, vbottom]]) 44 46 45 47 case … … 61 63 end 62 64 63 return Collision.dot_in_circle?([x, y], [other_position, other.radius])65 return dot_in_circle?([x, y], [other_position, other.radius]) 64 66 end 65 67 end -
lang/ruby/starframe/test/starframe/sprite/collision/test_circle.rb
r27463 r27465 1 1 require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "helper")) 2 2 require "starframe/sprite" 3 require "starframe/sprite/collision"4 3 require "starframe/sprite/collision/dot" 5 4 require "starframe/sprite/collision/circle" … … 9 8 @texture = StarRuby::Texture.load "test" 10 9 end 11 class NoneCollision < StarFrame::Sprite::Collision 10 class NoneCollision < StarFrame::Sprite::Collision::Base 12 11 end 13 12 -
lang/ruby/starframe/test/starframe/sprite/collision/test_dot.rb
r27463 r27465 1 1 require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "helper")) 2 2 require "starframe/sprite" 3 require "starframe/sprite/collision"4 3 require "starframe/sprite/collision/dot" 5 4 … … 8 7 @texture = StarRuby::Texture.load "test" 9 8 end 10 class NoneCollision < StarFrame::Sprite::Collision 9 class NoneCollision < StarFrame::Sprite::Collision::Base 11 10 end 12 11 -
lang/ruby/starframe/test/starframe/sprite/collision/test_rect.rb
r27463 r27465 1 1 require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "helper")) 2 2 require "starframe/sprite" 3 require "starframe/sprite/collision"4 3 require "starframe/sprite/collision/dot" 5 4 require "starframe/sprite/collision/circle" … … 10 9 @texture = StarRuby::Texture.load "test" 11 10 end 12 class NoneCollision < StarFrame::Sprite::Collision 11 class NoneCollision < StarFrame::Sprite::Collision::Base 13 12 end 14 13 -
lang/ruby/starframe/test/starframe/sprite/test_collidable.rb
r27463 r27465 1 1 require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "helper")) 2 2 require "starframe/sprite" 3 require "starframe/sprite/colli sion"3 require "starframe/sprite/collidable" 4 4 5 class StarFrame::Sprite::Collision 5 class StarFrame::Sprite::Collision::Base 6 6 attr_accessor :target, :method_name, :options 7 7 end 8 8 9 9 class TestStarFrameSpriteCollidable < Test::Unit::TestCase 10 class TestCollision < StarFrame::Sprite::Collision 10 class TestCollision < StarFrame::Sprite::Collision::Base 11 11 attr_accessor :options 12 12
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)