トップページgamedev
1001コメント346KB

【初心者】スレを立てる前にココで質問を【Part17】

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2008/05/11(日) 03:14:48ID:lWW0Pcx0
疑問に思うことがあれば、スレを立てずに、まずはココで質問。
スレッドを立てる前にはローカルルールを読みましょう。
http://pc8.2ch.net/gamedev/

>>980 を踏んだ人は次スレ立てをお願いします。
【アップローダ・避難所・Wiki】
ゲーム製作技術板公式Wiki
http://gamdev.org/w/

ゲーム製作技術板公式アップローダ
http://gamdev.org/up/

ゲーム製作技術板公式掲示板避難所
http://bbs.gamdev.org/gamedev/

ゲーム製作技術板予備
http://yy13.kakiko.com/gamdev/

アップローダー予備
http://gamdev.hp.infoseek.co.jp/

gamdev.orgが落ちるたびにあげてみるスレ
http://pc8.2ch.net/test/read.cgi/gamedev/1107022166/
0230名前は開発中のものです。2008/06/09(月) 23:33:46ID:L6Itig/s
>>210の具体的な説明はいただけないのでしょうか?
0231名前は開発中のものです。2008/06/09(月) 23:59:25ID:HQlmVvbu
C#を使ってる人、いないと思う。
0232名前は開発中のものです。2008/06/10(火) 00:10:46ID:W+Ff/0l3
>>230
>215みたいなので正解じゃね?

レイヤ管理クラスを作って、イベントに応じたレイヤを起動
0233名前は開発中のものです。2008/06/10(火) 00:20:08ID:wpwmQgMR
横レスで質問入れて悪いけど、レイヤで管理されたMAPグラフィックをクリッカブルにするにはどうするの?
0234名前は開発中のものです。2008/06/10(火) 00:36:05ID:kiGBb3yj
クリッカブルってなに?
0235名前は開発中のものです。2008/06/10(火) 00:40:00ID:wpwmQgMR
>>210に書いてある
MAP部分をクリックするとイベントが起こるって意味だろう
0236名前は開発中のものです。2008/06/10(火) 13:03:02ID:b0FZhEos
>>233
もともとそういう設計にするんだよ
0237名前は開発中のものです。2008/06/10(火) 14:28:50ID:nytbfz/3
>>215の「表示はスタック最下位から行う」というのは
背景が透明なpanelを重ねて表示するような感覚でやればいいのかな?
0238名前は開発中のものです。2008/06/10(火) 14:43:48ID:mUsLFEhP
ノベルゲームエンジン制作だったかのタイトルの本でC使ってADVエンジン作るのにレイヤ管理システム実装してたぞ。
選択肢もレイヤで実装してたからクリッカブルなレイヤを実装してるんだと思う。
0239名前は開発中のものです。2008/06/10(火) 16:41:44ID:3I/gGTbX
>>229
>不十分なのでしょうか?
>どうなんでしょうねぇ。

自身が気にならないなら「気にしない」でいいと思うよ
0240名前は開発中のものです。2008/06/10(火) 18:05:33ID:a1ieDkwY
垂直同期しない場合の問題ってティアリングくらい?
自分の目は腐ってるんでティアリングを判別できないんだけど
目のいい人にはどう見えてるんだろう。

まあ、反射神経を要求するゲームじゃない限り気にしないで良いと思う。
0241名前は開発中のものです。2008/06/10(火) 19:25:28ID:vmMmwty8
あれを判別できないってのはやばいな
連続した2フレームA・Bをそれぞれ2つにぶったぎって、
A上半分とB下半分をくっつけた感じ

デメリットとしては、GPUとかをウェイト無しでぶん回すからアッチッチ
0242名前は開発中のものです。2008/06/11(水) 02:26:47ID:dl2UA+Ho
RPGで次のレベルまでの経験値だとか敵の強さってどういう風に決めればいいんでしょうか?
適当に決めてから調整していくしかありませんか?
0243名前は開発中のものです。2008/06/11(水) 03:03:06ID:UjwNo3Ti
ある程度は計算で求められると思う。
経験点の取得方法はゲームによって異なるから、その計算式は自分で導き出すしかないんだけどな。

敵を倒すと経験点がもらえるのか、
プレイヤーの操作(スキル)によって与えられるのか


って書こうとしたけど眠くて力尽きた。おやすみ
02442432008/06/11(水) 12:22:37ID:ezoaWSsV
まあ、>243の最初の2行で答えは出ちゃったので。
興味があるならこっちへおいで。

◆ 神のゲームバランスを実現するには 3 ◆
http://pc11.2ch.net/test/read.cgi/gamedev/1103652057/
0245名前は開発中のものです。2008/06/11(水) 12:43:34ID:dl2UA+Ho
>>243>>244
ありがとうございます、勉強してきます
0246素人2008/06/11(水) 23:10:57ID:pnwQC7GC
今本を見ながらborland C++を勉強してるのですが、実行とデバッグができません。なんかクリックできないのです。
理由が分かる方、お願いします。教えてください
0247名前は開発中のものです。2008/06/11(水) 23:18:02ID:klFSvztV
>>246
> なんかクリックできないのです。
マウスのボタンが堅くて押せないとか?

というのは冗談だけど、実行ボタンだかコンパイルボタンだかが無効になってるのは
「今開発しているプログラムがどのファイルをどんな風に使っているのか」を登録する
プロジェクト情報が無いからなんじゃないかと思う。
borland C++は使ったことが無いけど、新規プロジェクトやワークスペースを作成する
みたいな項目は無いですか?
0248名前は開発中のものです。2008/06/12(木) 02:14:29ID:Uc2wXT7l
ゲームコンテスト
http://www.tohofuhai.com/  豆腐ゲームコンテスト
http://kirara111.sakura.ne.jp/  星屑きらら杯
http://3punge.com/ 3分ゲーコンテスト
0249名前は開発中のものです。2008/06/12(木) 05:50:43ID:gzO65s1E
>>248
ひとつだけ劣悪なものを混ぜてるなw
残り二つとはどう考えても釣り合わない地雷コンテスト
0250名前は開発中のものです。2008/06/12(木) 08:28:39ID:1Dxos4zW
格闘ゲームを作りたくてgoluahのソースファイルをダウンロードして
見てるんですが、タスクについて質問があります。

goluahには3つのタスクの種類があるみたいなんですが
それぞれどういう役割があるんでしょうか?
・通常タスク
・常駐タスク
・排他タスク

よろしくお願いします。
0251素人2008/06/12(木) 10:14:46ID:YCgQbZ2q
>>247
ワークスペースは分かりませんが、新規プロジェクトというのはあります。
0252名前は開発中のものです。2008/06/12(木) 12:54:09ID:aAoeQ5Mp
>>251
BorlandC++と勉強中(フリーソフト?)ってあたりからエスパーすると
もしかしてとBCC Developerと組合わせて使ってるのか?
もしそうならコード打ち込んだ後メイクボタン押した?エラー無く完了した?

つか、いくら素人でわからないって言ってももう少し詳しく書かないと答えられないと思うが。
0253名前は開発中のものです。2008/06/12(木) 16:21:11ID:gzO65s1E
>>250
ソース読まずにESP

通常→キャラとか弾とか
常駐→名前のとおり。ゲーム起動から終了まで存在するインスタンス
排他→番兵

多分これで正解だ。つか、おめーソース読んでねーだろ
カルト教団に入信してお布施して松浦尊師のタスクシステム本でも買っとけ
0254素人2008/06/12(木) 20:56:36ID:YCgQbZ2q
Fatal: ファイル VORBISFILE_STATIC.LIB が開けません
** error 1 ** deleting Debug\spgame02.exe
Make End !! (Elapsed time 0:00.375)
ってな感じになります。・・・errorって出てますね・・・
0255名前は開発中のものです。2008/06/12(木) 21:18:00ID:gzO65s1E
>>254
それはメッセージの通りだな
リンカがVORBISFILE_STATIC.LIBを見つけられないんだ
ライブラリを置いてる場所にパスを通してないんだろ
0256名前は開発中のものです。2008/06/12(木) 23:00:22ID:xs8x640a
3Dゲームで、
多くの物体同士の当たり判定(1対1ではなく、多対多の当たり判定)ってどうするんですか?
全ての組み合わせでやると物凄い計算量になってしまいそうです。
999+998+987+986...といった具合に。当たり判定にはバウンディングボックスを使います。
0257名前は開発中のものです。2008/06/12(木) 23:54:28ID:gzO65s1E
>>256
物凄いがどの程度の話なのか知らんけど、富豪厨の俺は
数年前のモバイルノートで1000発のAABB相互作用を力任せ法でやったが
結果は余裕だった。この程度の処理量なら鼻糞だ

それっぽい総当り処理のサンプルソースは某スレに貼ったことあるが
そんなクズソース見なくてもできるだろ
0258名前は開発中のものです。2008/06/13(金) 00:29:37ID:/jwDkXsA
まあ、あとは、エリア分割なりグループ分けなり、
何らかの方法で計算量を抑えるようにすればいいってことだよな。

あと、数が多いと、ちょっと1つあたりの計算量を減らすだけで大幅に変わったりするので
厳密にやらずに適当にやる、とかも効果的だったりする。
0259名前は開発中のものです。2008/06/13(金) 04:43:05ID:O4NLI/1r
ゲームコンテストに出しなさい。
http://www.tohofuhai.com/  豆腐ゲームコンテスト
http://kirara111.sakura.ne.jp/  星屑きらら杯
http://3punge.com/ 3分ゲーコンテスト(今休止中)


何でもかんでも詰め込もうとしないで、切り捨てるとこころは切り捨てて
完成させねば。。
0260名前は開発中のものです。2008/06/13(金) 10:03:33ID:FGpNXRkP
すでにそれっぽい指摘が出てるが
星屑きららはやめといた方がいいぞ
主催がDQNてことで知れ渡ってる
詳細はノウハウ板の止めとけスレ
あるいはこの板の語るスレ辺りで
0261名前は開発中のものです。2008/06/13(金) 11:13:31ID:hIYZdXb5
つか
マルチで宣伝うぜー
0262名前は開発中のものです。2008/06/13(金) 15:01:22ID:xNnxVjQD
そうなのか。
よく分からんけど、投稿作品一覧のコメントを見て色々と酷いことだけは分かった。


神のゲームバランススレが落ちそう。誰か立てて。
0263名前は開発中のものです。2008/06/13(金) 17:21:08ID:iI+lriih
>>240
全画面スクロールさせるとズレが上から下に移動しているのが分かる。
0264名前は開発中のものです。2008/06/14(土) 08:10:31ID:Vx/ilw+o
ところで液晶の場合CRTと違って電子線の走査がないから
液晶の駆動回路が生成するVSYNC信号無視してフレッシュレート60Hzと
決め付けて高精度タイマーでタイミング取って60Hzでフレーム切り替えしても
2Dスクロールのガタツキは体感できても
上側=旧フレーム、下側=新フレーム、みたいな現象は視認できないような
気がするんだが、実際どうなの?

と、未だにトリニトロン管を使ってるマイノリティの俺

体感できなくね?思うのだが
0265名前は開発中のものです。2008/06/14(土) 08:12:18ID:Vx/ilw+o
最後の一行は消し忘れだ!
0266名前は開発中のものです。2008/06/14(土) 09:41:01ID:WEqkvEOP
warrockや、バトルフィールドみたいにFPSでコクピット視点で車運転するプログラム作りたいんですが
それ関係のオープンソースや、作り方のHow to とか載ってるサイトや本ってありますか?
0267名前は開発中のものです。2008/06/14(土) 10:17:32ID:yvWyvXql
>>264
うちのPC2台だと視認できるよ
察するところ、ビデオカードからディスプレイ端子に出力された信号自体が
「上半分と下半分で1フレーム分違う」状態なら、それがきっちり反映されるんだろう
0268名前は開発中のものです。2008/06/14(土) 19:50:19ID:nT6UYhMt
ESPお願いします
使用言語:C++ 開発環境:製品版VisualStudio2005

問題の部分は恐らくPlayer.cpp&.h Enemy.cpp&.hだと思います
Playerクラスのvoid GetDistance2Target(Enemy *e);という宣言(定義は空実装)に下記のビルドエラーが発生します
error C2061: 構文エラー : 識別子 'Enemy'
Enemyクラス(Playerクラスがフレンド)があるヘッダもインクルードしてあります
Aクラスを宣言し引数を(A *e)に変更するとエラーは発生せずその後AをEnemyに書き換えビルドをするとエラーが発生しません
ただPlayerクラスがあるヘッダを1行でも書き換えると上記のエラーが再び発生します
0269名前は開発中のものです。2008/06/14(土) 19:56:25ID:BjxsUuMK
>>268
そのヘッダファイルの上のほうに
class Enemy;
と書く
0270名前は開発中のものです。2008/06/14(土) 20:12:45ID:nT6UYhMt
>>269
ありがとうございました
簡単に解決できるような事を聞いて申し訳ないです
オブジェクト指向の概念ばかりでなくプログラムも弄って勉強するように努めます
0271名前は開発中のものです。2008/06/14(土) 21:09:31ID:uDqAdFXo
>>270
オブジェクト指向自体ももっと勉強汁
そのクラスの関係は悪手
0272名前は開発中のものです。2008/06/15(日) 12:24:09ID:EcGkhplh
>>267
レスd
そうか。つかよく考えたらビデオカードはあくまでも伝送方式(アナログRGBやDVI
インターフェースの仕様)に従って映像信号を出力(アナログRGBならHSYNC
検知する毎に画面上端ラインから順に、デジタル方式のDVI-DやHDMIも
上端ラインから順だったかな)してるんだよな。だから、例え出力装置の中で
画面切り替えが一瞬で行えようとも、CRTと違いスキャンラインの概念がなかろうとも
ケーブル経由の伝送に時間をかけていれば上側=旧フレーム、下側=旧フレーム
という現象は起きるのか
0273名前は開発中のものです。2008/06/15(日) 12:46:49ID:EcGkhplh
×下側=旧フレーム
○下側=新フレーム
0274名前は開発中のものです。2008/06/16(月) 01:42:19ID:jf5cBPIE
  ,..-──- 、
おしえて           /. : : : : : : : : : \
               /.: : : : : : : : : : : : : : ヽ    
               ,!::: : : :,-…-…-ミ: : : : :',
              {:: : : : :i '⌒'  '⌒' i: : : : :}
                 {:: : : : | ェェ  ェェ |: : : : :}
.         , 、      { : : : :|   ,.、   |:: : : :;!
        ヽ ヽ.  _ .ヾ: :: :i r‐-ニ-┐ | : : :ノ    
          }  >'´.-!、 ゞイ! ヽ 二゙ノ イゞ‐′      
          |    −!   \` ー一'´丿 \
         ノ    ,二!\   \___/   /`丶、
        /\  /    \   /~ト、   /    l \
       / 、 `ソ!      \/l::::|ハ/     l-7 _ヽ
      /\  ,へi    ⊂ニ''ー-ゝ_`ヽ、    |_厂 _゙:、
      ∧   ̄ ,ト|    >‐- ̄`    \.  | .r'´  ヽ、
     ,ヘ \_,. ' | |    丁二_     7\、|イ _/ ̄ \
     i   \   ハ       |::::|`''ー-、,_/  /\_  _/⌒ヽ
0275名前は開発中のものです。2008/06/16(月) 13:54:36ID:V29OceOR
BGMにMP3やOGG等の圧縮されたものを使用しているケースが多いですが、
実行時にデコードしているんですよね?
特にOGGはデコードが遅いと聞きますが、
だったら最初からWAVEにしないのはどういった理由なのでしょうか?
0276名前は開発中のものです。2008/06/16(月) 14:10:08ID:CWBMeGpP
waveだとサイズでかいだろ。
それにいまどきのエンコーダならoggも遅くない。
0277名前は開発中のものです。2008/06/16(月) 14:10:30ID:yolkQjtt
>だったら最初からWAVEにしないのはどういった理由なのでしょうか?
圧縮できることのメリットすべて

>特にOGGはデコードが遅いと聞きますが
実際にはMP3より少し遅いくらい。(エンコードはかなり遅い)
使うライブラリにもよるが、公式の実装でもあまり問題にならないよ。
このへんは実際にストリーミング再生させて
ゲーム中にどのくらいCPU食ってるのか数字出さないと議論にならんよ。
0278名前は開発中のものです。2008/06/16(月) 14:10:38ID:CWBMeGpP
×エンコーダ
○デコーダ
02792752008/06/16(月) 14:43:16ID:V29OceOR
>>276>>277
返信ありがとうございます。

ということは、WAVEがダメなところはメモリ消費量だけでしょうか?
メモリを気にしなければ数MBあるWAVEをBGMとしても問題ない
ということでしょうか?
デコードしない分CPU負荷も少ないですし
0280名前は開発中のものです。2008/06/16(月) 14:51:04ID:il/CiK3K
実行時のメモリより配布時のファイルサイズがでかくなる方が問題じゃない?
0281名前は開発中のものです。2008/06/16(月) 14:54:56ID:ELtfR4ND
>>279
まぁそうだけど、44kHz・16ビット・ステレオのwavで、1分≒10MBだぞ
0282名前は開発中のものです。2008/06/16(月) 15:07:51ID:S6nxqRuD
>>279
正直俺は、mp3の128位とwav44kHz・16ビットの音質の違いが解らん。
それでもwavが良いんだ!と言うこだわりが無ければ、
データは小さければ小さい程、色々良いと思うな
02832752008/06/16(月) 16:07:30ID:V29OceOR
確かにファイルサイズがすごいことになりそうです。
今時のPCならmp3やoggのストリーミングも気にならないようですし、
oggでいこうと思います。
大変参考になりました。
返信ありがとうございました。
0284名前は開発中のものです。2008/06/16(月) 16:55:24ID:uX6B7Jne
ナローバンダーは、モバイルを含めると意外にまだいるからな。俺とか。
0285名前は開発中のものです。2008/06/16(月) 16:58:18ID:uX6B7Jne
書き忘れ。

BGMとか長くなりそうなものはmp3やoggなどの圧縮ファイルを使い、
効果音のような比較的短く、かつ再生タイミングがシビアなものはwaveそのまま、なんて人もいる。

あと、ウェブでダウンロードさせるのと、コミケでCDを頒布するのとでは
状況がまた違うから、そこで分けてる人もいるようだ。
0286名前は開発中のものです。2008/06/17(火) 02:25:10ID:k5Hbpskc
ある敵にいくつかAIパターンがあって、条件で切り替わる場合、
どういう風にして実装してます?
C++という想定で

1.行動を決定するメンバ関数(update()とか)に大量のif文を突っ込んで処理

2.敵クラスは、staticな関数へのポインタをもち、指し示す関数を入れ替えることでAIを切り替える
  関数にthisポインタを渡して処理

3.敵クラスは、AIクラスへのポインタをメンバとしてもち、
  指し示すAIクラス(の継承クラス)を入れ替えることでAIを切り替える
  で、AIクラスのメンバ関数にthisポインタを渡して処理

1が簡単だけど、2、3は同じAIを複数の敵クラスで共有できるって言う利点がありますよね
0287名前は開発中のものです。2008/06/17(火) 02:48:32ID:sJZvekW7
パターンデザイン的には3だよね。
いわゆるストラテジパターンというやつ。

あとはメンバ関数へのポインタを使って入れ替えるとかね。

class Hoge {
private:
  // メンバ関数型を定義
  typedef void (Hoge::*ACTION_PTR)(void);
  // メンバ関数へのポインタを格納する変数
  ACTION_PTR action;

public:
  // 行動のセット
  void action1(void) {}
  void action2(void) {}
  void action3(void) {}

  // コンストラクタで初期値を設定
  Hoge() { action = &Hoge::action1; }
  // 同様の構文でメンバ関数を変更可能

  //ポインタを通してメンバ関数起動
  void update(void) { (this->*action)(); }
};
0288名前は開発中のものです。2008/06/17(火) 09:37:29ID:XINqrfBX
ストラテジーパターンだな
0289名前は開発中のものです。2008/06/17(火) 15:08:42ID:sS8dV5wo
1が簡単とはおもえんのだがw

>>287
C++はよくわからんが、行動のセットってクラス外にださんの?
なんか見通しが悪い気がするんだが
0290名前は開発中のものです。2008/06/17(火) 23:15:33ID:sJZvekW7
>>289
そうかな?
データと行動セットをひとまとめにして隠蔽しちゃうことにも、
それなりにメリットあると思うんだけどね。
一回作っちゃえば後から考えなくても良い。

でもまぁ、「ふるまい」クラスを作れば、他のクラスにも適用できるというメリットはあるね。
個人的にはオープンすぎるのは逆に不整合を起こしがちだから苦手だけれども。
0291名前は開発中のものです。2008/06/18(水) 21:31:16ID:WrwNxCgo
良し悪しは別として、ifが並ぶのは個人的にイヤだw
0292名前は開発中のものです。2008/06/18(水) 23:30:26ID:kSLx4lcS
この板初めてな俺が来ましたよ

この板の人たちはPSPとかDSとかwiiとかのすごいかんじのゲーム作ってるの?
それともケータイのアプリみたいな簡単な作りっぽいゲーム作ってるの?
パソコンでやるゲームを作ってるの?
ネットしてたら、なんか餌とかあげたらなついて誰が一番なついてるみたいなランキング付きのペット育成みたいなんあるじゃん
あんなん勉強したら一人でつくれる?
お金かかる?
作ってみたい
0293名前は開発中のものです。2008/06/18(水) 23:32:07ID:O5zucpEm
礼儀知らずに答える義務はない
0294名前は開発中のものです。2008/06/18(水) 23:53:36ID:Q1s+fteM
>>292
紙ですごろく作ったっていう話は聞かないな。
ほとんどがPCで動作するものを前提に話を進めてる気がする。
0295名前は開発中のものです。2008/06/19(木) 00:05:06ID:g8qpIga7
>>292
PSPとかコンシューマハード向けのゲーム開発は、
ゲームカテゴリーの裏技・改造板の方が詳しい
ゲーム製作技術板は基本的にPC向け

内容はファミコンみたいなミニゲームもあるし、
2000円で販売して飛ぶように売れるゲームを作る人もいる

開発環境はタダで手に入る(Visual Studio Expressでググれ)し、
情報はネット上に転がっているので、金はかからない
出来れば専門の本を買うか、図書館で手に入れて読んだほうが良いけど

ゲームを一人で作るのは限界があるよ
プログラムは勉強するとしても、絵や音楽はどうする気だ
テキストベースのゲームなんて豪快なことしたら誉めてやるが
0296名前は開発中のものです。2008/06/19(木) 00:17:48ID:VxrSErVz
みんなありがとう
ちょっと楽しそうな板だから勉強してみる
絵くらいはなんとか書くよ 音は鳴らなくてもいいやw
暇潰し程度のもんをネットにあげてみたいな
0297名前は開発中のものです。2008/06/19(木) 12:39:21ID:8LUlnvdl
ifがネストするのは嫌よね
0298名前は開発中のものです。2008/06/19(木) 21:41:06ID:/TWRozlQ
while、forなら2回まで、ifなら3回くらいまでなら許せる。switchは1回かな。
0299名前は開発中のものです。2008/06/20(金) 17:43:56ID:HYR3VEF9
こういうのは特に嫌だな、たまにやっちゃうけど
if(Aの取得){
 if(Bの取得){
  if(Cの取得){
   if(Dの取得){
    if(Eの取得){
     処理
     Eの開放
    }
    Dの開放
   }
   Cの開放
  }
  Bの開放
 }
 Aの開放
}
0300名前は開発中のものです。2008/06/20(金) 18:56:25ID:smksGIRq
それは単に愚かなだけでは…。
0301名前は開発中のものです。2008/06/20(金) 22:12:26ID:0jFV+g1O
思いついたアイデアを試験的に実装するときに書くコードだな
0302名前は開発中のものです。2008/06/22(日) 00:46:33ID:Nh8dlMcG
すいません、質問です。

勉強の為、C++で2Dのシューティングゲームを作っています。
自機や敵などのアニメーションを作ってみたいのですが、
何か一般的な手法とかありますでしょうか?
0303名前は開発中のものです。2008/06/22(日) 00:54:26ID:i0gJBqIP
楽な手は無い。
爆発するアニメのコマを一つずつ用意して適当な時間間隔ですり替えていく。
ちょっとプログラミング技術を要する。
03043022008/06/22(日) 02:26:24ID:Nh8dlMcG
>>303さん
レスありがとうございます。

その手法はなんとなくイメージできたので試してみたいと思います。
実際にプログラムで処理するとしたら、
アニメのコマの範囲や、切り替えの間隔をを管理するようなテーブルみたいなのが必要そうですね。

とりあえず現状は試しでソースにテーブルを直接書いてみる事にしますが、
キャラクタやらアニメーションのパターンやらが増えてきたら、
ソースに直接手書きで作成とかだと効率悪いような気がしました。

アニメーション管理に使えそうなツールとかあるのかな?
その辺も探してみようかと思います。

ありがとうございました。
0305名前は開発中のものです。2008/06/22(日) 11:08:20ID:g06tuC8K
>304
やり方なんて幾通りもあるが、その方法で別に問題ないと思う。

アニメ管理ツールみたいなのは見たことがある。
企業だと確実に有るだろうな。
0306名前は開発中のものです。2008/06/22(日) 11:33:19ID:GKAOzkXe
>>304
絵描きとプログラマが別人だとツール無しじゃやっとれんかもね。
俺は複数人での製作経験無いけど。
勉強も兼ねてるんならツール一式も自前で作ってみたらどうだろう。
0307名前は開発中のものです。2008/06/22(日) 18:39:39ID:8b6P9lU/
簡単なシューティングゲームを作りました。
で、いままですっかり忘れていたんですが、メニュー画面ってどうやって実現しましょう

void main(){
  /*画面とかデバイスの初期化とか*/
  int select;
  while(true){
    select = menu(); //メニュー画面
    switch(select){
      ....
    }
  }
}

で、selectに応じてゲームを始めたり、オプション画面を出したり?
0308名前は開発中のものです。2008/06/22(日) 19:01:36ID:PrpfkLMi
ほかの状態遷移はどうやってんの?
それと同じで良いと思うんだが・・・。
0309名前は開発中のものです。2008/06/22(日) 19:11:44ID:8b6P9lU/
やべぇ、キャラセレ画面も考えてなかった

>>308
ゲームそのものはゲームクラスをインスタンス化して、
そのメソッドをmain関数内のループから呼び出してます
0310名前は開発中のものです。2008/06/22(日) 19:20:28ID:PrpfkLMi
もしかして状態遷移考えて作ってなかったってこと?
0311名前は開発中のものです。2008/06/22(日) 19:22:40ID:g06tuC8K
正直、>307で何がしたいのか見えてこないんだが。

while(1)
{
  if    (フラグ==タイトル   ) タイトル画面( );
  else if (フラグ==キャラセレ ) キャラセレ画面( );
  else if (フラグ==ゲーム本編) ゲーム本編( );
}

これでいいんじゃない?
0312名前は開発中のものです。2008/06/22(日) 20:25:34ID:iT3uPeFi
関数のポインタ使うか
"デザインパターン"でググるといいかも
0313名前は開発中のものです。2008/06/23(月) 00:11:11ID:T4uoidjV
class Scene{
void draw()
void move();
}

class Title : public Scene{
...いろいろ
}

class CharaSelect : public Scene{
...いろいろ
}

こんな感じで
currScene = new Title():
シーンごとに作るのがswitch使わなくてスマートになるんじゃないの?
0314名前は開発中のものです。2008/06/23(月) 00:45:50ID:mDDnsWDd
>>313
それでどうやってswitch使わなくて済むかよくわからないのですが
while(1){
switch(scene){
case TITLE: currScene = new Title(); break;
case CHARA_SELECT: currScene = new CharaSelect(); break;
....
}
currScene->move();
currScene->draw();
}
自部のがちょうどこんな感じになってるんですがいい方法あるんですかね?
0315名前は開発中のものです。2008/06/23(月) 00:59:18ID:fMSgUVEh
Scene* move()

p=move()
if(p!=NULL){
  delete currScene;
  currScene=p;
}


我ながら汚すぎて噴いた
0316名前は開発中のものです。2008/06/23(月) 01:03:30ID:jZlgp0tw
>>314
状態が多くないならそれでいいと思うけど
自分はこんな感じ

class Scene{
virtual void draw() = 0;
virtual void move() = 0;
}
enum SCENE{ TITLE, SELECT, SCENEMAX };
SCENE now_int;
*Scene now;
*Scene scene[SCENEMAX] = { &title, &select};

while(1){
now = scene[now_int];
now->move();
now->draw();
}
0317名前は開発中のものです。2008/06/23(月) 01:07:53ID:fMSgUVEh
now_intは誰が書き換えるん?
0318名前は開発中のものです。2008/06/23(月) 01:15:36ID:T4uoidjV
こんなんはどう?

class Scene{
virtual void draw() = 0;
virtual void move() = 0;
virtual Scene sceneChange() = 0;
}

Scene * next;
if( ( next = currScene->sceneChange() ) != NULL )
{
  currScene = next;
}

だめかw
0319名前は開発中のものです。2008/06/23(月) 01:25:34ID:jZlgp0tw
>>317
titleとかの状態のクラスが
0320名前は開発中のものです。2008/06/23(月) 01:32:04ID:uo+1ccfk
適当に書いてみた

int SceneManager::receiveMessage(Message* pMsg, int param1, int param2, int param3, int param4)
{
  switch (pMsg->getType()) {
    case MSG_CHANGESCENE:
      assert(SCENE_ID_MIN <= param1 && param1 <= SCENE_ID_MAX);

      m_pNextScene = m_allScenes[param1];
      break;
  }

  return SUCCESS;
}

int SceneManager::execScene()
{
  if (m_pNextScene != NULL) {
    Scene* current = m_pCurrentScene;
    Scene* next = m_pNextScene;

    current->onExit();
    next->onEnter();

    m_pCurrentScene = next;
    m_pNextScene = NULL;
  }

  return m_pCurrentScene->execute(this);
}
0321名前は開発中のものです。2008/06/23(月) 09:12:21ID:cIfICiuE
// あのね、僕の場合はね、シーンを総括するシナリオクラス作ったの。
// STLのlist(線形リスト)でSceneを管理するんだよ。
// (案外、スタックでもいいような気がするなー)
// (*1)Scenario::start()でシナリオが開始されて、
// (*2)登録されたScene::start()を呼び出すの。
// あ、Scene::start()っていうのは、そのシーンを開始するメソッドね。
// それでね、Sceneの中で次のシーンが決まったら、
// (*3)Scenario::addScene()で、次のシーンを登録して、
// 今実行中のシーンはただちに終わればいいの。
// (*4)登録されたシーンが全部無くなったらゲーム終了ね。

// ところで、これだけの長文読むより、プログラムを読む方が簡単に思えてくるだろ

list<Scene*> Scenario::scenelist;

void Scenario::start() // (*1)
{
while ( scenelist.size() > 0 ) { // (*4)
Scene* s = scenelist.front();
(*s)->start(this); // (*2)

scenelist.pop_front();
}
}

void Scenario::addScene(Scene* scene) // (*3)
{
scenelist.push_back(scene);
}
0322名前は開発中のものです。2008/06/23(月) 22:43:25ID:SqRC+pBQ
個人的にはswitchやif文羅列が健全だと思うよ

そういえば関数ポインタや多態は最適化が効かないから
速度的に不利って話どうなの?
0323名前は開発中のものです。2008/06/23(月) 23:23:03ID:0j4G1ygb
最適化する必要無いほど早い。
0324名前は開発中のものです。2008/06/23(月) 23:36:23ID:/qtuGijz
>>個人的にはswitchやif文羅列が健全だと思うよ
いわれてきづいたけど、小規模のシーン管理だとswitchとかifのほうがいいとおもた
RPGぐらい画面遷移が複雑だとクラスのほうがいいかもしれんけど

>>速度的に不利って話どうなの?
とりあえずクラス自体がわりと重いっぽい、いろいろ調べたら早くする方法が書いてあって
それ全部使えば矩形の当たり判定なら数千個までいけると思う
0325名前は開発中のものです。2008/06/24(火) 19:19:07ID:YG9wxXVw
関数ポインタ利用して関数並べて実行させるのとswitch/caseって分岐が少ないと殆ど速度に差が無いみたいだな
0326名前は開発中のものです。2008/06/24(火) 20:37:20ID:qocbnAno
今時関数ポインタ程度で重いって(笑)
0327名前は開発中のものです。2008/06/24(火) 23:07:53ID:nk5lzdPA
それを言い出すと、いまどき配列走査くらいで、
いまどきnewくらいで……と富豪厨化する
ていうか、それが俺
0328名前は開発中のものです。2008/06/24(火) 23:12:47ID:vNDV7jMM
javaのスレッドをnewするのはコスト高いぞ。
0329名前は開発中のものです。2008/06/25(水) 03:01:35ID:c0GyxKOT
どう実装されているかも分からないヴァーチャルマシンのコストを決めつけてかかる328は、
たぶん学歴が低い。
■ このスレッドは過去ログ倉庫に格納されています