Changeset 28067 for lang/ruby/starframe

Show
Ignore:
Timestamp:
01/07/09 02:18:52 (5 years ago)
Author:
isaisstillalive
Message:
  • SpriteをRenderableにした。今までx,yだった引数がscreen,x,yに変わるので互換性がなくなる。newする際のscreenをnilにする修正は必要だが、それ以外のrender_toは今まで通り使えるので修正の必要は無い。
Location:
lang/ruby/starframe
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • lang/ruby/starframe/lib/starframe/sprite.rb

    r28058 r28067  
    33require "starframe/initializable" 
    44require "starframe/updatable" 
     5require "starframe/renderable" 
    56 
    67module StarFrame 
     
    8384    include Initializable 
    8485    include Updatable 
     86    include Renderable 
    8587     
    8688    #:stopdoc: 
     
    111113    #  
    112114    # initializeを参照。 
    113     def self.new x = 0, y = 0, options = {}, &block 
     115    def self.new screen = nil, x = 0, y = 0, options = {}, &block 
    114116      return super unless block 
    115117      # Ruby 1.8の場合、inheritの呼ばれる順番がおかしいためclass_evalで後からブロックを実行している。 
    116118      klass = Class.new(self) 
    117119      klass.class_eval(&block) 
    118       klass.new x, y, options 
     120      klass.new screen, x, y, options 
    119121    end 
    120122     
    121123    # 初期化し、initイベントをコールする。 
    122     def initialize x = 0, y = 0, options = {} #:notnew: 
     124    def initialize screen = nil, x = 0, y = 0, options = {} #:notnew: 
    123125      initialize_texture 
    124126       
     127      @screen = screen 
    125128      @x, @y = x, y 
    126129      @movement_x, @movement_y = 0, 0 
     
    299302    end 
    300303     
     304    # 描画する。 
     305    def render 
     306      super 
     307      render_to @screen 
     308    end 
     309     
    301310    private 
    302311    def initialize_texture #:nodoc: 
  • lang/ruby/starframe/samples/15puzzle/main.rb

    r28058 r28067  
    6464      height.times do |y| 
    6565        width.times do |x| 
    66           @parts << self[x, y] = PartSprite.new(0, 0, :px => x, :py => y, :width => @src_width, :height => @src_height) 
     66          @parts << self[x, y] = PartSprite.new(self, 0, 0, :px => x, :py => y, :width => @src_width, :height => @src_height) 
    6767        end 
    6868      end 
     
    101101     
    102102    render do 
    103       @parts.render_to @screen 
     103      @parts.render 
    104104    end 
    105105     
  • lang/ruby/starframe/samples/stg/main.rb

    r27903 r28067  
    2525  # 爆煙を追加して消滅 
    2626  def crash 
    27     @smoke_collection << Smoke.new(@x, @y) 
     27    @smoke_collection << Smoke.new(@screen, @x, @y) 
    2828    StarRuby::Audio.play_se @crash_se 
    2929    @scene.score += @score 
     
    4747  animation :shot, :loop => false, :start => false do 
    4848    frames 3, 2 do 
    49       shot Shot::Player.new(@x-8, @y-16) 
    50       shot Shot::Player.new(@x+8, @y-16) 
     49      shot Shot::Player.new(@screen, @x-8, @y-16) 
     50      shot Shot::Player.new(@screen, @x+8, @y-16) 
    5151    end 
    5252  end 
     
    171171  # 自機狙い弾 
    172172  def fire_to_player speed = 3, add_angle = 0 
    173     enemy_shot = Shot::Enemy.new(shot_x, shot_y) 
     173    enemy_shot = Shot::Enemy.new(@screen, shot_x, shot_y) 
    174174    shot_angle = to_target_angle + add_angle 
    175175    enemy_shot.movement_x = Math.cos(shot_angle) * speed 
     
    320320  animation :enemy do 
    321321    frame 30 do 
    322       @enemies << Enemy::Disc.new(16+rand(320-32), -64, @enemy_options) 
     322      @enemies << Enemy::Disc.new(@screen, 16+rand(320-32), -64, @enemy_options) 
    323323    end 
    324324  end 
     
    332332    @enemy_shots = StarFrame::Sprite::Collection.new 
    333333     
    334     @player = Player.new(-64, -64,        :scene => self, :shot_collection => @shots,       :smoke_collection => @smokes) 
    335     @enemy_options = {:target => @player, :scene => self, :shot_collection => @enemy_shots, :smoke_collection => @smokes} 
     334    @player = Player.new(@screen, -64, -64, :scene => self, :shot_collection => @shots,       :smoke_collection => @smokes) 
     335    @enemy_options = {:target => @player,   :scene => self, :shot_collection => @enemy_shots, :smoke_collection => @smokes} 
    336336     
    337337    @score = 0 
     
    439439    render_texture @background, 0, @bg_scroll-544 
    440440     
    441     @enemies.render_to @screen 
    442     @player.render_to @screen 
    443      
    444     @shots.render_to @screen 
    445     @enemy_shots.render_to @screen 
    446     @smokes.render_to @screen 
     441    @enemies.render 
     442    @player.render 
     443     
     444    @shots.render 
     445    @enemy_shots.render 
     446    @smokes.render 
    447447     
    448448    render_number 96, 8, @score 
  • lang/ruby/starframe/test/starframe/sprite/test_collidable.rb

    r28001 r28067  
    6060   
    6161  def test_initialize 
    62     sprite = CollisionSprite.new(10, 10) 
     62    sprite = CollisionSprite.new(nil, 10, 10) 
    6363    assert_equal       1,             sprite.collisions.size 
    6464    assert_equal       true,          sprite.collisions.key?(:test) 
     
    6868   
    6969  def test_collision_reader 
    70     sprite = CollisionSprite.new(10, 10) 
     70    sprite = CollisionSprite.new(nil, 10, 10) 
    7171    assert_not_nil                           sprite.collision(:test) 
    7272    assert_equal   sprite.collisions[:test], sprite.collision(:test) 
     
    7878  end 
    7979  def assert_collide_sprite_and_sprite expected, collide = false, &block 
    80     sprite1 = CollisionSprite.new(10, 10) 
    81     sprite2 = CollisionSprite.new((expected ? 10 : 11), 10) 
     80    sprite1 = CollisionSprite.new(nil, 10, 10) 
     81    sprite2 = CollisionSprite.new(nil, (expected ? 10 : 11), 10) 
    8282     
    8383    assert_collide sprite1, sprite2, expected, &block 
     
    136136  def assert_collide_collection_and_sprite collide = false, &block 
    137137    collection = StarFrame::Sprite::Collection.new 
    138     collection << csprite1 = CollisionSprite.new(10, 10) 
    139     collection << csprite2 = CollisionSprite.new(10, 10) 
    140     collection << csprite3 = CollisionSprite.new(11, 10) 
    141     sprite                 = CollisionSprite.new(10, 10) 
     138    collection << csprite1 = CollisionSprite.new(nil, 10, 10) 
     139    collection << csprite2 = CollisionSprite.new(nil, 10, 10) 
     140    collection << csprite3 = CollisionSprite.new(nil, 11, 10) 
     141    sprite                 = CollisionSprite.new(nil, 10, 10) 
    142142     
    143143    assert_collide collection, sprite, 2, &block 
  • lang/ruby/starframe/test/starframe/test_sprite.rb

    r27987 r28067  
    4545   
    4646  def setup 
    47     @sprite = TestSprite.new 
    48      
    4947    @screen = StarRuby::Texture.new(100, 100) 
     48    @sprite = TestSprite.new(@screen) 
    5049  end 
    5150   
     
    133132    sprite = TestSprite.new 
    134133    assert_kind_of TestSprite, sprite 
     134    assert_nil         sprite.screen 
    135135    assert_equal 0,    sprite.x 
    136136    assert_equal 0,    sprite.y 
     
    139139  end 
    140140  def test_initialize_with_position 
    141     sprite = TestSprite.new(1, 2) 
     141    sprite = TestSprite.new(nil, 1, 2) 
    142142    assert_equal 1,    sprite.x 
    143143    assert_equal 2,    sprite.y 
     
    146146  end 
    147147  def test_initialize_with_options 
    148     sprite = TestSprite.new(1, 2, :angle => 3, :alpha => 4) 
     148    sprite = TestSprite.new(nil, 1, 2, :angle => 3, :alpha => 4) 
    149149    assert_equal 1, sprite.x 
    150150    assert_equal 2, sprite.y 
     
    153153  end 
    154154  def test_initialize_with_block 
    155     sprite = TestSprite.new(1, 2) do 
     155    sprite = TestSprite.new(nil, 1, 2) do 
    156156      @texture = StarRuby::Texture.load("test2") 
    157157    end 
     
    163163   
    164164  def test_position_reader 
    165     sprite = MovableSprite.new(1, 2) 
     165    sprite = MovableSprite.new(nil, 1, 2) 
    166166    assert_kind_of Array, sprite.position 
    167167    assert_equal [1, 2],  sprite.position 
     
    170170  end 
    171171  def test_position_writer 
    172     sprite = MovableSprite.new(1, 2) 
     172    sprite = MovableSprite.new(nil, 1, 2) 
    173173    sprite.position = 2, 3 
    174174    assert_equal 2, sprite.x 
     
    184184  end 
    185185  def test_movement_writer 
    186     sprite = MovableSprite.new(1, 2) 
     186    sprite = MovableSprite.new(nil, 1, 2) 
    187187    sprite.movement = 20, 22 
    188188    assert_equal 20, sprite.movement_x 
     
    323323  end 
    324324   
     325  def test_render 
     326    @sprite.x = 0 
     327    @sprite.y = 1 
     328    @sprite.render 
     329     
     330    assert_equal :render_texture, @screen.last_method 
     331    assert_equal @sprite.instance_variable_get(:@texture), @screen.last_method_args[0] 
     332    assert_equal 0, @screen.last_method_args[1] 
     333    assert_equal 1, @screen.last_method_args[2] 
     334    assert_equal 0, @screen.last_method_args[3].size 
     335    assert_equal({}, @screen.last_method_args[3]) 
     336  end 
     337   
    325338  def test_render_to 
    326339    @sprite.x = 0 
     
    379392   
    380393  def test_call 
    381     sprite = MovableSprite.new(1, 2) 
     394    sprite = MovableSprite.new(nil, 1, 2) 
    382395    sprite.call 
    383396    assert_equal [11, 14],  sprite.position 
     
    386399  end 
    387400  def test_move 
    388     sprite = MovableSprite.new(1, 2) 
     401    sprite = MovableSprite.new(nil, 1, 2) 
    389402    sprite.move 
    390403    assert_equal [11, 14],  sprite.position 
     
    393406  end 
    394407  def test_move_minute 
    395     sprite = MovableSprite.new(1, 2) 
     408    sprite = MovableSprite.new(nil, 1, 2) 
    396409    sprite.move_minute 0.6 
    397410    assert_equal [7, 9.2],  sprite.position 
     
    400413  end 
    401414  def test_futures 
    402     sprite = MovableSprite.new(1, 2) 
     415    sprite = MovableSprite.new(nil, 1, 2) 
    403416    assert_equal [7, 9.2],  sprite.future_position(0.6) 
    404417    assert_equal 8.4, sprite.future_angle(0.6) 
     
    407420   
    408421  def test_squared_distance 
    409     sprite1 = TestSprite.new(0, 0) 
    410     sprite2 = TestSprite.new(3, 4) 
     422    sprite1 = TestSprite.new(nil, 0, 0) 
     423    sprite2 = TestSprite.new(nil, 3, 4) 
    411424    assert_equal 25, sprite1.squared_distance(sprite2) 
    412425     
    413     sprite1 = TestSprite.new(0, 0) 
    414     sprite2 = TestSprite.new(2, 2) 
     426    sprite1 = TestSprite.new(nil, 0, 0) 
     427    sprite2 = TestSprite.new(nil, 2, 2) 
    415428    assert_equal 8, sprite1.squared_distance(sprite2) 
    416429  end 
    417430  def test_distance 
    418     sprite1 = TestSprite.new(0, 0) 
    419     sprite2 = TestSprite.new(3, 4) 
     431    sprite1 = TestSprite.new(nil, 0, 0) 
     432    sprite2 = TestSprite.new(nil, 3, 4) 
    420433    assert_equal 5, sprite1.distance(sprite2) 
    421434     
    422     sprite1 = TestSprite.new(0, 0) 
    423     sprite2 = TestSprite.new(2, 2) 
     435    sprite1 = TestSprite.new(nil, 0, 0) 
     436    sprite2 = TestSprite.new(nil, 2, 2) 
    424437    assert_in_delta 2.828, 0.00, sprite1.distance(sprite2) 
    425438  end 
     
    427440  def bench 
    428441    require "benchmark" 
    429     sprite1 = TestSprite.new(0, 0) 
    430     sprite2 = TestSprite.new(2, 2) 
     442    sprite1 = TestSprite.new(nil, 0, 0) 
     443    sprite2 = TestSprite.new(nil, 2, 2) 
    431444    Benchmark.bmbm do |bm| 
    432445      bm.report{ 10000.times{ sprite1.distance(sprite2) } }