イライラ棒的なもの
DXRuby1.4.0のSpriteは画像の回転・スケーリングに同期した衝突判定がミソで、矩形だろうが三角形だろうが回転して他の形状との判定ができる。
これを利用すると、使わない場合には大変面倒な衝突判定が発生するようなモノも気軽に作れる。
ためしにイライラ棒的なものを作ってみた。
ソースはめっちゃ適当なんだけども。障害物の四角はぐるぐる回っていて、カーソル位置にある丸(スタート左上)を右端まで持っていけばゴールなのだが右端まで行っても何も起こらない(手抜き)。ちなみに画面外に出ることができるという隠しテクニックも用意してある。
require 'dxruby' def create_block_sprite(*ary) image = Image.new(640,480) col = [] ary.each do |a| case a.size when 3 image.circle_fill(a[0], a[1], a[2], C_RED) when 4 image.box_fill(a[0], a[1], a[2], a[3], C_CYAN) end col << a end s = Sprite.new(0, 0, image) s.collision = col return s end block1 = create_block_sprite([100,100,150,380], [490,100,540,380]) block2 = create_block_sprite([100,100,150,380], [490,100,540,380]) block2.angle = 90 block3 = create_block_sprite([100,100,150,380], [490,100,540,380]) block3.angle = 45 block4 = create_block_sprite([100,100,150,380], [490,100,540,380]) block4.angle = 135 circle = create_block_sprite([320, 240, 100]) bar = create_block_sprite([300, 60, 340, 420]) objects = [block1, block2, block3, block4, circle, bar] cursor = Sprite.new(0, 0, Image.new(10, 10).circle_fill(5, 5, 5, C_WHITE)) Input.set_mouse_pos(0, 0) Window.loop do cursor.x, cursor.y = Input.mouse_pos_x, Input.mouse_pos_y block1.angle += 0.05 block2.angle += 0.05 block3.angle -= 0.1 block4.angle -= 0.1 bar.angle += 1 Sprite.draw(objects) Input.set_mouse_pos(0, 0) if cursor === objects cursor.draw break if Input.key_push?(K_ESCAPE) end