はてな?RGSS(うらぐち) RSSフィード

9月25日の日記

本日の追加キーワード

字幕(とりあえず)

f:id:mr-80b:20050925022914j:image


class Caption
  attr_accessor :x
  attr_accessor :y
  def initialize(x,y,fontsize)
    @x = x
    @y = y
    @sprite = Sprite.new
    @sprite.bitmap = Bitmap.new(640,480)
    @sprite.ox = @sprite.bitmap.width / 2 # 基点を中心に
    @sprite.oy = @sprite.bitmap.height / 2 # 基点を中心に
    @sprite.bitmap.font.size = fontsize
    @sprite.bitmap.font.name = ["MS P明朝"]
    @sprite.x = @x
    @sprite.y = @y
  end
  def write(text)
    @sprite.bitmap.draw_text(0,0,640,480,text,1)
  end
  def clear
    @sprite.bitmap.clear
  end
end

#使ってみるテスト
ckaku = Ckaku.new(320,240,"色ハイゼル.bmp")
caption = Caption.new(320,400,32)
caption.write("なかなか気の強そうな娘だな")
1..200.times { Graphics.update }
caption.clear
1..200.times { Graphics.update }
exit

とりあえず、こんな感じ。

ただ、まだ複数行表示に対応していないので、それはまた今度対応したいと思います。

「|」で文章を切って、各行の描画位置を決定して、描画していくのは、結構めんどくさそうなので、後回し。

ひととおり(とりあえず)

とりあえずひととおりシーンを再現できるようになりました。

といっても、ちびキャラアニメとかマップ表示とかはまだですが。


■ウェイト関数

def wait(frame)
  1..frame.times { Graphics.update }
end

frameに指定したフレーム数空ループ回してるだけ。

#Ckaku.new(x,y,filename)

■Ckaku

class Ckaku
  attr_accessor :x
  attr_accessor :y
  def initialize(x,y,filename=nil)
    @x = x
    @y = y
    #スプライトを生成
    @sprite = Sprite.new
    #ビットマップ生成
    if filename == nil
      @sprite.bitmap = Bitmap.new(1,1)
    else
      @sprite.bitmap = Bitmap.new("Graphics/Pictures/"+ filename)
    end
    @sprite.ox = @sprite.bitmap.width / 2 # 基点を中心に
    @sprite.oy = @sprite.bitmap.height/ 2 # 基点を中心に
    @sprite.x = @x
    @sprite.y = @y
  end
  def clear
    @sprite.bitmap.clear
  end
end

clearメソッド追加。bitmapにclearメソッド発行してるだけ。

■字幕表示(Caption)

class Caption
  attr_accessor :x
  attr_accessor :y
  def initialize(x,y,fontsize)
    @x = x
    @y = y
    @sprite = Sprite.new
    @sprite.bitmap = Bitmap.new(640,480)
    @sprite.ox = @sprite.bitmap.width / 2 # 基点を中心に
    @sprite.oy = @sprite.bitmap.height / 2 # 基点を中心に
    @sprite.bitmap.font.size = fontsize
    @sprite.bitmap.font.name = ["MS P明朝"]
    @sprite.x = @x
    @sprite.y = @y
  end
  def write(text,waitframe=0)
    @sprite.bitmap.clear
    @sprite.bitmap.draw_text(0,0,640,480,text,1)
    wait(waitframe)
  end
  def clear
    @sprite.bitmap.clear
  end
end

writeメソッドの第2パラメータに数値を入れると、

そのフレーム数ウェイトするように。

これで、より簡潔にシーン部分がかけるようになった。

■顔グラ

class Face
  def write(position,filename)
    case position
    when "left","l","左"
      @l_ckaku = Ckaku.new(120,240,"顔"+filename)
    when "center","c","中"
      @c_ckaku = Ckaku.new(320,240,"顔"+filename)
    when "right","r","右"
      @r_ckaku = Ckaku.new(520,240,"顔"+filename)
    end
  end
  def clear(position)
    case position
    when "left","l","左"
      @l_ckaku.clear
    when "center","c","中"
      @c_ckaku.clear
    when "right","r","右"
      @r_ckaku.clear
    end
  end
end

顔グラのファイル名は「顔ほにゃらら.bmp」とかであることが前提になっています。

ポジションは、「l」「left」「左」のいずれかで指定できます。

■ストーリー

これまでに作った関数、クラスを使用して実際のストーリーをここに書いています。

#顔グラオブジェクト生成
face = Face.new
#字幕オブジェクト生成
caption = Caption.new(320,400,32)

#会話スタート
face.write "左","ハイゼル"
caption.write "なかなか気の強そうな娘だな",200
caption.write "私はハイゼルだ|お嬢 名は何という",200
face.clear "左"

face.write "右","サリエラ子供"
caption.write "あたしはサリエラ",200
caption.write "よろしくね  ハゲてる",200
face.clear "右"

caption.write "",200

face.write "左","ハイゼル"
caption.write "・・・ハイゼルだ",200

exit

昨日書いたのと同じ11行で同じ内容が表現できたので、とりあえずは満足、満足。

次は、マップ画面やちびキャラを表示したり、動かしたりするところですね。

これは、結構手ごわそうですが、それぞれの基本的なやり方はだいたい分かっているので、それを組み合わせればいける、はずです。

HOVERZHOVERZ2005/09/26 19:18『凄い!こんなRGSSに役立つ場所があったなんて』というテスト。
実行時の画像等付いてるのはとても親切ですね。
開設おめでとうございます。

mr-80bmr-80b2005/09/26 21:43役立つかどうかはともかく、コメントどうもです。