Class | MyGame::Image |
In: |
mygame/lib/mygame.rb
|
Parent: | DrawPrimitive |
画像描画をするためのプリミティブです。 キャラクタ画像の周りを透明色として扱う場合は TransparentImage を使用してください。
次のサンプルは画像オブジェクト生成して sample.bmp を画面に描画する例です。
require 'mygame/boot' img = Image.new("sample.bmp") main_loop do img.render end
angle | [RW] | 画像の中点を中心とした回転角。 360 で 1 回転 |
animation | [R] | |
image | [R] | |
scale | [RW] | 拡大率(縮小率)。基準値は 1.0 |
ロードした画像データのキャッシュをクリアします。
# File mygame/lib/mygame.rb, line 404 def self.clear_cache @@image_cache = {} end
画像プリミティブを生成します。
# File mygame/lib/mygame.rb, line 268 def initialize(filename = nil, *options) super(*options) @filename = filename load(@filename) if @filename @ox = @oy = 0 @animation = nil @animation_counter = 0 @animation_labels = {} end
アニメーションパタンを追加します。
次の例では animation.bmp 内の 3 パタンの画像を 20 フレーム毎に切り替えて描画します。
img = Image.new("animation.bmp", :w => 100, :h => 100) img.add_animation :abc => [20, [0, 1, 2]] # アニメーションパタンの設定 img.start_animation :abc # 最初のアニメーションを指定
# File mygame/lib/mygame.rb, line 329 def add_animation(hash) hash.each do |key, params| _set_animation(key, *params) end end
画像ファイルをロードします。 対応している画像フォーマットは BMP, PNM (PPM/PGM/PBM), XPM, XCF, PCX, GIF, JPEG, TIFF, TGA, PNG, LBM です。
# File mygame/lib/mygame.rb, line 350 def load(filename) unless @image = @@image_cache[filename] @image = SDL::Surface.load(filename).display_format @@image_cache[filename] = @image end @w ||= @image.w @h ||= @image.h @alpha_image = nil @image end
画像プリミティブを描画します。
# File mygame/lib/mygame.rb, line 379 def render if hide? or @image.nil? @disp_x = @disp_y = nil return end x = @x + offset_x y = @y + offset_y @disp_x, @disp_y = x, y @disp_x, @disp_y = x, y return if @alpha <= 0 img = if alpha < 255 @alpha_image ||= @image.display_format @alpha_image.set_alpha(SDL::SRCALPHA, alpha) @alpha_image else @image end if scale == 1 and angle == 0 SDL.blit_surface img, @ox, @oy, @w, @h, screen, x, y else SDL.transform_blit(img, screen, @angle, @scale, @scale, @w/2, @h/2, x, y, 0) end end
透明色の指定をします。透明色が存在するピクセルの座標を引数で与えます。
# File mygame/lib/mygame.rb, line 362 def set_transparent_pixel(x = 0, y = 0) pix = @image.getPixel(x, y) key = [@filename, pix] if image = @@image_cache[key] @image = image else # make dup @image = @image.display_format @image.set_color_key SDL::SRCCOLORKEY, pix @image = @image.display_format @@image_cache[key] = @image end @alpha_image = nil @image end
アニメーションを開始します。
# File mygame/lib/mygame.rb, line 336 def start_animation(label, restart = false) @animation_labels[label] or raise "cannot find animation label `#{label}'" return if @animation == label and !restart @animation = label @animation_counter = 0 end