EasyFAQ/81

Last-modified: 2009-08-02 (日) 09:41:44

_E3DFrameNumFromTimeの使い方が良く分からない

投稿者あきも
重要度
状態
カテゴリ
HSPバージョン3.2rc1
E3Dバージョン5.0.5.6
回答

ここから下を自由に編集してください。
上の投稿情報は安易に編集するとFAQリストのリストアップに支障が出るものもあります。
よく分からない方は分かる人に聞いてみてください。

  • ダウンロードしてサンプルを見てみたのですが、ソースの情報が多くて具体的にどう使っていいのかよくわかりませんでしたorz 普通にループで画面描画をするときの、基本的な使い方をどなたか提示していただけないでしょうか。 -- あきも? 2009-07-31 (金) 18:31:06
  • それは e3dhsp3_0.hsp の事ですね。一番上にあります。 -- 2009-07-31 (金) 21:31:47
  • すみません、書き方が悪かったみたいです。サンプルリンクにあるジオさん作のモジュールの使い方の質問です。http://easy3d.wikiwiki.jp/?%A5%B5%A5%F3%A5%D7%A5%EB%A5%EA%A5%F3%A5%AF#mea96588 -- あきも? 2009-07-31 (金) 21:43:11
  • ジオさんのモジュールもたくさんありますよね。どれの事でしょう? -- 2009-07-31 (金) 22:07:56
  • タイトル通り、_E3DFrameNumFromTime(処理速度に合わせて、指定したFPS分の処理をします)です。よろしくお願いします。 -- あきも? 2009-07-31 (金) 22:39:56
  • ソースを見るな。熟読せよ。『読書百遍意自ずから通ず』である。モジュールの用途、効能と副作用が分かるならばソースの意味は解るだろうし、わからないならまずそちらから勉強すべきだ。 -- ORZ? 2009-07-31 (金) 22:52:11
  • 「読書百遍意自ずから通ず」の意味がわからなかったので意味を調べたら、要するに自分で考えなさいということですね。でもそうするとここのFAQは何を質問すれば良い場所なんでしょうか? -- あきも? 2009-07-31 (金) 23:15:00
  • つまりこう言うことでしょうか?file_E3DFrameNumFromTime_Simple_Sample.hsp-- 2009-07-31 (金) 23:15:46
  • だいぶ分かりやすくなりました!ありがとうございます。自分でも何度も見返してみたのですが、_E3DGetFrameNumFromTime FNFTModID(_cnt), kizyunfps(_cnt), fpsnum, frametime(_cnt), dblframetime(_cnt) : chkfps1 = statの記述の部分が分かりません。モジュールをのぞいてみると、#modfunc _E3DGetFrameNumFromTime int inFPS, int inFrameNum, var outFrameNum, var outDblFrameNumとなっていて一番目の引数はFPSを指定するようになっているようなのですが、サンプルでは_E3DCreateFNFTIDで作成したモジュール?を指定しているようなのです。この辺りの構造がすごく難しく思えます・・・ -- 2009-07-31 (金) 23:37:32
  • もう少しじっくり読んでみました。描画自体はループ内で毎回行い、それ以外の計算部分等は、ループ内でさらにループさせて1ループに1回以上行わせるということでしょうか? -- あきも? 2009-08-01 (土) 01:01:17
  • このモジュールは「FPSが変化してもプレーヤが感じる体感時間は変わらない」と言う所が狙い目ですよね。でも一枚のウインドウ内でそれを表すサンプルを作ろうとした時に、FPSは一定なので「仮にFPSが変化した場合のキャラクターの方の変化を並べて見ました」と言う構造になってるんですね。まずは何か作品を作ってみて、そこにこのモジュールを組み込んでみるとスッキリ納得できるのではないでしょうか?まず作品ありきの補助的な機能を持つモジュールですからね。 -- 2009-08-02 (日) 03:00:41
  • そうだと思ったのですが、その組み込み方が分からなくてorz  初心者が扱うには危険なモジュールだったりするのでしょうか・・・ -- あきも? 2009-08-02 (日) 03:17:32
  • 危険と言う言い方は極端かもしれませんが、注意するべき点が多いので、見落としをやりやすいと言う意味では危険でしょか?
    キャラクターが移動する場合「FPSが1/3になったらベクトルは3倍する」とか「物理演算で扱う質量などの固有パラメータは変更する必要はない」とか。ミスを招きやすいかも知れません。
    「変数に変数を流し込んでカッコよくシステームを構築するぜ!」と思っても「あれ?これじゃいくらなんでも重過ぎる。これを組み込んで重くなったら何やってるんだかわかんないぞ?」って事もあるでしょう。
    作品ごとに注意点も変化します。今おちゃっこさんのブログで話題に上がっているモーフィング(やったー!)が登場したら、それを組み込む場合の固有の処理も必要になるでしょう。
    で。こう言う場合ミップマップの考え方が参考になるかも知れません。画面描画を軽くする仕組みなんですが、テクスチャを読み込んだ後521x521 256x256 128x128 など、いくつかのサイズに変更しておき、距離に応じて差し替える考え方です。FPS変化に対して60 30 10などいくつかの定数に合わせて処理を差し替えるんです。リアルタイムに対応した方がなめらかだとは思いますが、これなら極端に重くなる事はないでしょうし、やるべき事は決まっているのでトラブルが少ないと思います。
    全てをプログラマーさんに依存するような過負荷を避ける為に、ゲームデザインのレベルでFPSの安定を考えるのもごく普通の事だと思います。「このボスキャラはデザインが凝っていて関節も多いし、いかにもFPS下がりそう」と思ったら「玉座の間に閉じ込められて他のザコキャラは出て来ない」って事にしちゃうとか。リズムを安定させたい音ゲーなら特に重要なポイントでしょう。凝った背景の中を移動してFPSが不安定な音ゲーなんてちょっと怖いですよね(笑)。
    最初に基準になるデータでマシンテストを行って「あなたのマシンはFPS60で大丈夫です」 とか「FPS30を自動選択しました。コンフィグから変更できますが、やめといた方がいいですよ」とか定数を選択するやり方もあリますね。
    それらの選択肢の中からあえてリアルタイム処理(つまりこのモジュール)を選ぶならそれはがんばってやっちゃうしかないでしょう。御武運をお祈りします。うんうん。-- 2009-08-02 (日) 08:28:20
  • 既に見ていたら役に立ちませんけど、サンプルリンクのコメント欄に_E3DFrameNumFromTimeの説明書へのリンクがあります。前に私もこのサンプルの組み込み方が分かりにくそうと思って、アップしていた物です。
    処理速度に合わせて、指定したFPS分の処理をするだけなら、_E3DCreateFNFTIDで作成するこのモジュール用の変数は一つだけで良いです。
    「この辺りの構造がすごく難しく思えます・・・」についてですが、#modfuncの命令を呼び出す場合、最初の引数にモジュール型の変数を指定することが要るので、そうなっています。
    今もこのモジュールはとてもおすすめです。私も今年のHSPコンテストに出す作品に用いるつもりです (^^) -- ジオ? 2009-08-02 (日) 09:41:44