サイログ。

~雑多な記事置き場~

2.1の変更点をまとめてみました

というわけで、Miyakoの変更点を、わかりやすくまとめて見ました・・・が、多すぎ。
全部解説するのに時間が掛かりすぎる・・・。
というわけで、変更点は、一部を抜粋して連載形式で紹介します・・・スミマセン。


・Miyako1.5x/2.0.xからの変更点


大事な部分は文字を大きく。もっと大事な部分は、2回書いたら鬱陶しいだけなので、赤文字にしました。

・特徴・特長

  • Miyako.main_loopメソッド内処理の拡充
    • (2.1以前)入力更新・画像消去・画面反映のみ
    • (2.1.0)上記内容に加えて、スプライト自動描画、アニメーション自動更新、コールバック(タイマー)処理管理、音声再生管理を追加。
  • スプライトの定義を明示
    • (2.1以前)スプライトの定義が曖昧
    • (2.1.0)以下の条件を満たしたものがスプライト
      • 描画できる(画像であってもなくても)
      • 描画を制御できる
      • →SpriteBaseモジュールをmixinしているものがスプライト
  • アニメーションの定義を明示
    • (2.1以前)アニメーションの定義が曖昧
    • (2.1.0)以下の条件を満たしたものがアニメーション
      • アニメーションを開始できる
      • アニメーションを終了できる
      • →Animationモジュールをmixinしているものがアニメーション
  • 「スプライト」「アニメーション」として扱えるものの増加
    • Map,MapLayer,FixedMap,FixedMapLayer,MapEvent,Font,Viewport,TextBox,Parts,Array,SpriteList,choice,choices,planeの各クラス・モジュール・構造体やインスタンスは「スプライト」として扱える
    • Font#renderメソッドなどを追加(Font#text=メソッドで文字列を設定、Font#move!などで描画位置を変更可能)
  • スプライト描画の多様化
    • (2.0以前)Screen.updateによる自動描画のみ。順番はdpアクセサで変更。描画順に致命的問題あり
    • (2.0.x)自動描画を廃止。明示的な描画メソッド(render、render_to)を追加。画面以外へのスプライト描画を可能に
    • (2.1.0)Sprite.,Sprite.=メソッドにより、描画の自動描画が復活。
  • アニメーション更新の多様化(自動化の追加)
    • (2.1以前)アニメーションの更新は明示的呼び出しのみ(Animation#.update_sprite)
    • (2.1.0)自動化するアニメーションオブジェクトを管理するメソッドを追加(Animation.,=,anim_hash,start,stop,reset)。
  • コリジョンの多様化
    • (2.0以前)コリジョンに内部矩形だけでなく、外からの位置情報も所持(旧Collisionクラス)
    • (2.1以前)コリジョンの内部矩形と位置情報を独立(クラス外で位置情報を所持)(現Collisionクラス)
    • (2.1.0)旧Collisionクラスと同等の機能を持つCollisionEx・CircleCollisionExクラスを追加(実装時に選択可能)。Collisionクラスとの混在も可能(位置情報はCollisionEx#posメソッドで参照)
  • 簡易コールバック(タイマー処理)の追加
    • (2.1以前)WaitCounterクラスの管理は明示的なもののみ
    • (2.1.0)WaitCounter.append_callbackメソッドを追加(メインループ外で、所定の時間が経過したタイマーに対応づけているブロックを評価。繰り返し評価可能。繰り返し回数も指定可能)
  • 複数スプライトへの操作メソッドの拡充
    • (2.1以前)まとめて描画できるのはPartsクラスのみ。また、ベースとなるオブジェクトが必要で、管理が複雑になる危険性があった
    • (2.1.0)SpriteArrayモジュールの追加、Arrayクラスにmixin。Array#renderメソッドで、スプライトを一気に描画
    • (2.1.0)SpriteListクラスの追加。ハッシュのように名前-スプライトに対応するリストを管理。ハッシュと違い、順番を変更可能(SpriteList#swapメソッドなど)
    • (2.1.0)PartsクラスをSpriteListクラスインスタンスで再実装。ベースオブジェクト不要(LayoutSpace(パーツ空間の大きさ)がベースオブジェクトの替わりに)
  • 選択肢の表現の追加
    • Choice構造体にenable、body_disenableメンバの追加
    • TextBox,Yuki,InitiativeYukiにも、disenable状態の対応を追加
  • マップレイヤー仕様の多様化
    • (2.1以前)フォーマットに従ったCSVファイルのみ対応
    • (2.1.0)入力はフォーマットに従った配列を、MapStruct構造体に繋げる方式に変更。入力形式に囚われないマップレイヤー生成可能
  • 音楽再生の強化
    • (2.1以前)音声を再生できるのみ、繰り返し再生中に突然再生が終わるバグあり
    • (2.1.0)音声の繰り返し再生が確実にできるように修正
    • (2.1.0)音声の繰り返し回数を指定可能に
    • (2.1.0)音声の再成長・再生時間・残り時間を取得可能
    • (2.1.0)効果音再生の管理を強化(同時再生数の管理を独自に実装)
    • (2.1.0)効果音再生の優先度を設定可能(優先度の高い音声をできるだけ最後まで再生)
  • 配列のディープコピー
    • Arrayクラスにdeep_copyメソッドを追加、配列の中身を複写可能
  • require方法の簡素化・多様化
    • (2.1以前)require "Miyako/miyako"のみrequire可能
    • (2.1.0)require "miyako"でもrequire可能
    • (2.1.0)require "miyako_require_only"で、画面・描画に関係のない処理の実装・テストが可能
      • ただし、使いこなすにはRuby/SDLの知識が必要
  • オブジェクトのコピーの厳密化
    • (2.1.0)オブジェクトの中身をできる限り複写できる処理を追加
    • (2.1.0)複写すると不具合の起きるクラスは、複写すると例外を発生させる仕様に変更
  • Utilityモジュールの追加
    • (2.1.0)直線上の全ての点の座標を求めるUtility.product_linerメソッド
    • (2.1.0)格子状の空間に置いた矩形に重なる全てこう死の座標を求めるUtility.product_positionメソッド
  • InitiativeYukiの追加
    • (2.1以前)YukiではFiberを使っていたが、Fiberは時間が掛かるとの結果が
    • (2.1.0)メインルーチンをシナリオエンジン側で行わせるInitiativeYukiクラスを追加

・機能制限

  • (2.1.0)同時再生できるBGMは1曲までに制限(効果音はその限りではない)
  • (2.1.0)EXT/miyak_kairo.rbの削除