ブログって事もあってファイル添付を避けて、モジュールって形でイメージを作ってみました。
ruby/sdlの関数だけでも,何とか絵も描けるものだ。
SDL::Surface#draw_lineを駆使して星型とか、ちょっと特殊な図形を描くのも、いい遊びになりそう。
リファレンスに  SDL::Surface#draw_line(x1,x2,y1,y2,color) と書いてあり、その通りにしたら、とても綺麗な図形になった。それもありかななんて思ったけど・・
SDL::Surface#draw_line(x1,y1,x2,y2,color) が正しいかな。
リファレンスが出来て何年もたってると思うけど、直ってないってことはSDL::Surface#draw_lineは、ほぼ使われってないって事か。イコール俺はマイナー指向!?

ロケットが飛んで行く奴。

#!/usr/bin/env ruby

require 'rubygems'
require 'sdl'

module Items
module Rocket
def load_item
self.get_surface(50,50)
x,y = 25,0
for i in 0..10
@surface.draw_line(x - i / 2,i,x + i / 2,i,[255,100,0])
end
@surface.fill_rect(20,10,10,25,[200,255,225])
@surface.fill_rect(16,25,3,10,[200,255,225])
@surface.fill_rect(31,25,3,10,[200,255,225])
x,y = 25,35
for i in 0..15
@surface.draw_line(x - i / 3,y + i,x + i / 3,y + i,[255,230,0])
end
@surface.set_color_key(SDL::SRCCOLORKEY,@surface.get_pixel(0,0))
end
end
end

class Cell
include Items::Rocket
attr_reader :surface
def initialize(surface)
@home = surface
@x,@y = 125,125
end
def get_surface(w,h)
@w,@h = w,h
@surface = SDL::Surface.new(SDL::SWSURFACE,@w,@h,@home)
end
def update
@y -= 5
@y = 300 if @y == -50
end
def blit
SDL.blit_surface(@surface,0,0,@w,@h,@home,@x,@y)
end
end

class Phase
def initialize(screen)
@screen = screen
@cell = Cell.new(@screen)
@cell.load_item
end
def item_save(filename="a.bmp")
@cell.surface.save_bmp(filename)
end
def run
loop do
while event=SDL::Event.poll
case event
when SDL::Event::Quit
exit
when SDL::Event::KeyDown
exit if event.sym == SDL::Key::ESCAPE
end
end
sleep(0.05)
@screen.fill_rect(0,0,@screen.w,@screen.h,[143,100,143])
@cell.update
@cell.blit
@screen.update_rect(0,0,0,0)
end
end
end

SDL.init( SDL::INIT_VIDEO )
SDL::Mouse.hide
screen = SDL::setVideoMode(300,300,16,SDL::SWSURFACE)
phase = Phase.new(screen)
#phase.item_save("rocket.bmp")
phase.run
[PR]
# by gaziya | 2010-08-23 20:44