Appendix

広告

Entries

Fiberを使おう

Fiberとは?
Ruby 1.9 で新しく導入されたクラスで、ノンプリエンプティブな軽量スレッドを提供してくれます。

何言ってるのかさっぱりですね。
私も未だにノンプリエンプティブだのスレッドだのの意味を問われても、何となくこんな感じ的な答えしか出来ません。
要は思い通りに動けばいいんです。


Fiber(ファイバー)とは、簡単に並列処理ができるクラスなんです!

並列処理もなんだか難しく聞こえます。
でもそんなことありません。
なぜなら、ツクールのイベントコマンドのトリガーにある並列処理と同じだからです。
つまり、本来の処理やイベントとは別に、もう一つイベント処理が行えるようなものです。


細かな説明をするととても長くなるのでイメージだけで語ると、スクリプトの処理を少しづつ実行できるような感じです。
普通にメソッドを呼び出すと、def ~ end(もしくは def ~ return) の間を全て実行して終わってしまいます。

ですがFiberを使うと、最初のメソッド呼び出しで def ~ Fiber.yield までを処理し、次に呼び出したときは前回中断した Fiber.yield から処理を再開してくれます。
ローカル変数を保存しといてくれるもの とも言えると思います。

ファイバーが使えるようになれば、1フレーム毎に少しづつメソッドを処理するという事が可能になります。
メソッドが簡略化されるだけでなく、処理も軽くなるので使い勝手はいいです。


そしてそのファイバーは「箱庭の勇者たち」でも大量に使われていたりします。
というのも、ファイバーはAIなどを作るのに向いていると何処かで見た気がしたので、戦闘中のキャラのAIを作るためにファイバーを勉強し、そして実装しました。
キャラクター1人につき1つのAI用ファイバーが使われており、そしてほとんどのスキルの動作にもファイバーによる処理が行われています。
11人対11人の戦闘で、だいたい30以上のファイバーが動いていることになります。

もしこのファイバーがなかったら、キャラクターのAIはとても複雑なものになっていたでしょう。
というか、今の状態でも結構ごちゃごちゃしていて、作った本人でも読むのが困難な内容になってるくらいなので、ファイバーなしではもしかしたら完成しなかったかもしれません。
VXAceに変えて一番の恩恵はコレだと思っています。


なんだか文章ばかりの日記になってしまいました。
スクリプト自作できるような人じゃないと分かりにくい内容だし、しかも具体的な使い方も書いてないし・・・

とにかく、まずはどんな動作をするのかイメージできることが大切だと思います。
少なくとも、私はそうです。
ファイバーがどんなものかのイメージが伝わればいいなあと思って書きました。

まあ、今回は次のファイバーの話の前置きみたいなもんです。
続きはもうちょっとわかりやすいものになるかなあ(自信なし
スポンサーサイト
この記事にトラックバックする(FC2ブログユーザー)
http://woodpenguin.blog.fc2.com/tb.php/18-1d94b560

トラックバック

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

Appendix

プロフィール

木星ペンギン

Author:木星ペンギン
ほぼツクールのことばかり書いてます。
名前は↑から取りました。
木製ですが木星です。
トカゲは関係ありません。

ゲーム

  • 箱庭の勇者たち(体験版)
  • アクイ ト アイ
  • ぼくらの大革命!
  • 勇者がやらねば俺がやる!
  • 3Turn Battle!
  • 3TurnBattle!2nd 体験版

メールフォーム

wood_penguin@yahoo.co.jp

名前:
メール:
件名:
本文: