SDLUdon Advent HitoriSumotori 1

参加型というものに、手を伸ばしたくも極めて臆病になってしまっている今日この頃でございますが、
それでもひそりと出来るだけ、Rubyゲーム制作関連、アドベント・ヒトリスモトリ。

RubySDLゲームライブラリ、SDLUdon(仮名) ver 0.0.1 ( download(Dropboxの共有リンクへ飛びます) )


RubyからSDL(ver2.0.0以降)を利用してゲームを制作するためのライブラリ(フレームワーク含)です。まだまだ土台がゆーらゆら。
基本的に自分の作りたいモノ、使いたいモノにそって実装していくため、現在は2DRPG・アクション・STGに重点を置いてゆく予定。
Rubyライクに気軽に気楽に対話するように、そして、なるべく各種エディタを介す必要の無い使い勝手が一応の理想郷。

@ 使い方…というか、現在までに使える事(require 'sdl_udon')

(※ 今後のアップデートによって縦横無尽に変更される可能性がございますので、あしからず)

メインループ
Game.loop(opt={}) { |game| }

ウィンドウが表示されます。メソッド引数にはハッシュでオプションを渡し、loop(title: "", fps: 60) のように、
ウィンドウタイトルやFPS値の設定する事が可能。ここから、ブロック引数の|game|を使い、ゲームの中身を定義していきます。

中身の設定
Game.loop(opt={}) { |game|
  game.set_and_run { |scene|
    # ここに中身を添えていく。
  }
}

set_and_runメソッドは、初回の処理でブロック内の設定を読み取り(set)、
次回以降はそこから生成された更新メソッドが代わりに毎フレーム実行(run)されます。
設定はブロックの返り値をハッシュで返す(未実装)か、上にあるように各種ブロック引数から直接メソッドを実行して行います。
今回の引数に出ているsceneは、後述するアクターの管理が主な機能。

アクターの生成
actor = Actor.load("sample.png")

ライブラリごとに様々な言い回しが存在しますが、役割を持ち画面に表示される演者(キャラクターからエフェクト、背景も含む)の事を指します。

アクターのアクション
Game.loop(title: "Timeline Sample", fps: 30) { |game|
	game.set_and_run do |scene|
		actor = Actor.load("sample.png")
		actor.tl.move_by(300,300,60).move_by(-300, -300, 30)
                scene << actor
}

tl(TimeLine)を用いて動きを作り上げていきます。この例では、move_by(x,y,duration)メソッドを使い、
それぞれ(xy)の移動量と移動時間(duration)を指定することで目標までの動きが定義されます。
メソッドチェインを用いる事で次のアクションを次々と予約しておく事も可能です。
tlの更新にはtl.updateが必要なのですが、上記の(scene << actor)のように、シーンに登録しておく事で毎フレーム自動的に呼び出されます。


本当はInputモジュールでの動かし方も入れる筈が、表に出す直前に不覚に気付くメソッドが発動したのでまた次に。

現状は以上です、ホントに以上です、もうメラゾーマなんです。

変なトコ覗くわるい子は、セグメンテーションフォルトおじさんが出てきて唐揚げに勝手にレモンかけて足跡(バックトレース)残して去っていくよ!

@ 目標

これ他のエンジンで使ったことある!的な、そのままな機能もある通り、
RubyならDXRubyやStarRuby、他言語ならenchantjs等々、自分が出会い触れ親しんで来たものを、
心のままに、自分の手で組み合わせて実装して見ようということで、まだまだ見よう見真似の模倣の代物。


ここから25日までに一定のオリジナリティというか、パーソナリティを獲得する事が出来れば、
元旦にソースにサンプルゲーム付けてGithub等に公開してみようかなという按配でございます。

@ 次回以降

まだ手を付けていない、Collision・Font・Sound関連の実装や、今回も内部で動いている、StateMachine・Tween・EventDispatcher等、
個々のクラス・モジュールの説明をしたり、Cによる拡張ライブラリの作り方の簡単な説明・備忘録をしていこうかなと。