DXRubyFramework0.0.2チュートリアル

いろいろと不具合はありそうだが、とりあえずリリース直前。
なんとなくチュートリアルその1を書いてみたからそれを公開してみる。
超基本の使い方がわかる。かもしれない。
マニュアルはまだ真っ白なのでそれが書けたらWikiに置く予定。
対応するバージョンはDXRuby1.0.9のみ、としておく。動作確認してないし。1.1系はいまのところ×。
チュートリアルは続きで。

DXRubyFrameworkチュートリアルみたいなもの01

■1.はじめに

この文章はDXRubyFramework0.0.2のチュートリアルみたいなものです。
機能が少し複雑なので、使う側からの視点で、一通りの機能を順に解説します。
解説はテキストのみですが、コードはサンプルとしてsampleディレクトリに入れてありますので、ぜひ実行したりいじったりしてみてください。


■2.DXRubyFrameworkとは

DXRubyFrameworkは、DXRubyを使ってゲームを作るときに必要になりがちな、キャラ管理の仕組みを提供するライブラリです。
また、キャラをたくさん動かすとRubyの実行速度では厳しいのですが、DXRubyFrameworkはそのあたりの処理をC言語で実装してますので、これを使うことでRubyで弾幕シューティングなどを作ることができるようにもなります。

DXRubyFrameworkで提供するのはSpriteクラス(だけ)です。あと、Windowモジュールに描画メソッドを一つ追加します。
Spriteは画像や表示位置などの情報を持ち、Window.drawSpriteで描画したり、自分にエフェクトをかけたり、アニメーションしたり、あらかじめ指定した通りに移動したりできます。他のSpriteと衝突しているかどうかの判定もこなします。
また、これらの処理を最高速で行うために、配列に入れたSpriteをまとめて管理するためのクラスメソッドも提供しています。

このファイル(tutorial01.txt)では、まずSpriteクラスの基本的な機能を説明します。
02、03と進むと少しずつ高度な機能や使い方の解説になっていきます。


■3.まずは生成と表示から

とりあえず、Sprite.newとすれば生成できます。引数はありません。
Sprite#x=、Sprite#y=で表示位置を指定することができ、Sprite#image=で表示するImageオブジェクトを指定できます。表示にはWindow.drawSpriteを使います。
この「Sprite#x=」という書き方は、Sprite.newで生成したオブジェクトのメソッドx=を表し、これらのメソッドは以下のように使うことができます。

---sample01.rb

require 'dxruby'
require 'dxrubyfw'

# (100,100)の位置に50*50のサイズの白い四角を表示する
spr = Sprite.new
spr.x = 100
spr.y = 100
spr.image = Image.new(50, 50, [255, 255, 255])

Window.loop do
  Window.drawSprite(spr)
end

---

表示に影響を与えるメソッドとして、回転角度を指定するSprite#image_angle=や、拡大率を指定するSprite#image_scale_x=/image_scale_y=、α値を指定するSprite#image_alpha=などがあります。
まとめて指定しちゃったサンプルは以下です。

---sample02.rb

require 'dxruby'
require 'dxrubyfw'

# (100,100)の位置に50*50のサイズの白い四角をちょっと細工して表示する
spr = Sprite.new
spr.x = 100
spr.y = 100
spr.image_angle = 30    # 360度系、右回転(時計回り)する。
spr.image_scale_x = 3   # 横の倍率。1で等倍
spr.image_scale_y = 0.5 # 縦の倍率。1で等倍
spr.image_alpha = 128   # 0で完全に透明。255で完全に表示。中間なので透けてグレーになる。
spr.image = Image.new(50, 50, [255, 255, 255])

Window.loop do
  Window.drawSprite(spr)
end

---


■4.アニメーションさせる

絵をアニメーションさせるには、Sprite#animation_image=でアニメーションさせる絵の配列を指定してから、Sprite#start_animationでアニメパターンを指定します。
配列の最初から最後までを繰り返すアニメパターンは、切り替える時間(フレーム数)だけの指定となります。
また、アニメーションをきちんと進めるために毎フレームSprite#updateを呼ぶ必要があります。

---sample03.rb

require 'dxruby'
require 'dxrubyfw'

# (100,100)の位置にenemy2.pngの画像をアニメーションしつつ表示する
spr = Sprite.new
spr.x = 100
spr.y = 100
spr.animation_image = Image.load_to_array("image/enemy2.png", 4, 1)
spr.start_animation(30)

Window.loop do
  spr.update
  Window.drawSprite(spr)
end

---

アニメパターンとして(フレーム数, アニメパターン配列)を渡すと、指定した絵を繰り返すことができます。
アニメパターン配列はanimation_image=で指定した配列の番号の配列です。
具体的には以下のような感じになります。

---sample04.rb

require 'dxruby'
require 'dxrubyfw'

# (100,100)の位置にenemy2.pngの画像をアニメーションしつつ表示する
spr = Sprite.new
spr.x = 100
spr.y = 100
spr.animation_image = Image.load_to_array("image/enemy2.png", 4, 1)
spr.start_animation(10, [0,1]) # ←animation_image=で指定した配列の[0]と[1]を交互に繰り返す

Window.loop do
  spr.update
  Window.drawSprite(spr)
end

---


■5.自動的に移動させる

Sprite#dx、Sprite#dyに値を設定すると、Sprite#update時にxとyに加算されます。
これを利用すると、キャラを自動的に移動させることができます。

---sample05.rb

require 'dxruby'
require 'dxrubyfw'

# enemy2.pngの画像をアニメーションしつつ右下に移動させる
spr = Sprite.new
spr.x = 0
spr.y = 0
spr.dx = 1
spr.dy = 1
spr.animation_image = Image.load_to_array("image/enemy2.png", 4, 1)
spr.start_animation(30)

Window.loop do
  spr.update
  Window.drawSprite(spr)
end

---

もちろん、毎フレームspr.x += 1、spr.y += 1としても同じことができます。


■6.おしまい

これで基本の説明はおしまいです。
Spriteは自分で自分の表示位置や画像を持ち、勝手に色んなことをしてくれるクラスです。
少し高度な使い方を、tutorial02.txtで説明します。