サイログ。

~雑多な記事置き場~

Miyako2.1.0をプレリリースいたします

というわけで、コツコツと作っていたMiyako2.1.0、完成前にプレリリースいたします。
一部のコメントが入ってませんが・・・ごめんね。

ソースはGithubに上げています。
http://github.com/cyross/

主な変更点は↓より。

Miyakoの初期起動を制御、他ライブラリとの親和性を向上

今回、新しく"Miyako/miyako_require_only.rb"を追加いたしました。
このファイルをrequireすると、miyako.rbをrequireしたときに自動的に画面が表示されるなど、SDL関連のライブラリを自動的に初期化していましたが、このファイルをrequireすると、これらの実行を抑制いたします。

つまり、他のライブラリでSDL(Ruby/SDL)を使われているときは、そちらのほうを優先できます。

Miyako.openメソッドを呼び出すと、これまで通りの初期化を行います。

また、各機能ごとにこれらの初期化処理を呼び出すメソッドを用意、個別に初期化することができます。

  • Miyako.init : SDLの初期化。SDL.initを呼び出します
  • Screen.init : 画面の初期化。既存のSDL::Screenインスタンスがあるときは引数として渡すことができる
  • Audio.init : 音声・BGM関連の初期化。再生バッファサイズとサンプリング周波数を指定することができます。
  • Font.init : フォント関係の初期化。

サウンド関連の見直し

これまでのサウンド関連の機能は、正直言って使えませんでした。たとえば、繰り返し演奏するときに、再生位置が繰り返し先頭に戻るときにplaying?メソッドの値がfalseになるといったものです。

2.1では、モジュールメソッドとして、Audio.updateを用意いたしました。使い方は、Input.updateと同じく、音声の再生状態を監視・更新します。

このメソッドを利用することで、確実な繰り返し終了・フェードアウト・同時再生数の管理などの重要な項目を実現いたしました。

また、2.1からは、BGMは1曲のみ同時演奏可能となっております。

エラーの細分化

以前までは、Miyakoでの例外はMiyakoErrorクラスのみ投げていましたが、2.1からは、以下のクラス構成になりました。

  • MiyakoError : 既存の例外クラス・他のクラスの基底クラス
  • MiyakoIOError : ファイルI/O関連の例外
  • MiyakoFileFormatError : MiyakoIOErrorの派生。ファイル形式の例外
  • MiyakoValueError : 値が不正なときの例外
  • MiyakoProcError : ブロック関連の例外(ブロックが渡ってきていないなど)
  • MiyakoTypeError : 引数のクラス制限に引っかかった時などに発生する例外
  • MiyakoCopyError : インスタンスの複製を行うときに起きる例外

ディープコピーの実装

これまで、配列・ハッシュのインスタンスの複写は、それ自身のみで、要素は参照のみ複写という「浅い複写(shallow copy)」のみでしたが、2.1では、これに加えて要素も複写する「deep_dup」「deep_clone」というメソッドを追加いたしました。

複写の確実化

これまでは、dup/cloneメソッドでインスタンスを複写するとき、中身が正しく複写されない問題がありましたが、この点も修正いたしました。

Sceneモジュールで使う現在実行シーンを@nowからnow_sceneに変更

インスタンス変数で返すのではなく、メソッドで返すことができるようにしました。2.1では、互換性のために@nowも使えるようになっています。

SpriteBase,Animationモジュールのmixinを徹底

できる限り、各インスタンスで共通のインタフェースを持てるようにいたしました。

Yukiのメソッド追加が容易に

Yuki.add_methodメソッドにより、Yukiスクリプトで使えるメソッドの追加を容易に実装できるようにいたしました。

Yuki上で別のYukiエンジンを実行可能に

Yuki#over_execメソッド(Yukiスクリプトでも使用可能)で、Yukiで実行している画面の上に、別のYukiの画面を描画することができるようになります。
また、そのYukiエンジンの実行を待つwait_over_execメソッドも追加いたしました。

Arrayクラスの機能追加

Arrayクラスでrenderメソッドが使えるようになりました。配列の要素を一気に描画することができます。

SpriteListクラス

名前-スプライトの一対一対応で関連づけられるSpriteListクラスを用意いたしました。これも、renderメソッドで一気に描画ができます。

・・・他

Partsクラスにinsert,swapメソッドを追加いたしました。

というわけで、

一通り説明いたしました・・・しんどかった。