[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2ch.scのread.cgiへ]
Update time : 09/28 23:53 / Filesize : 245 KB / Number-of Response : 908
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++でRPGゲームを作成する



1 名前:じっち [04/11/23 07:14:50 ID:CCsv+84e.net]
少し前まではHSPで作ろうと思っていたのですが、HSPでRPGゲームを作るのは難しいらしいので、C++で作ろうと思います。
C++のプログラミングは初めてですので、みんなの力が必要です。
お願いします。
あと質問ですが、C++ってMMORPGつくれますか?

840 名前: ◆MBbNHCnf2M mailto:sage [2011/03/26(土) 13:03:14.90 ID:npmu6kKT.net]
>>837
.cpp(GameInput.cppとしている)のnamespace内の定義は
現在のスコープでは定義できませんとなります

841 名前: ◆UUwiUCL1P6 mailto:sage [2011/03/26(土) 14:20:22.37 ID:pvmCllah.net]
>>840
では、namespace{}での括りは外してしまってください。



842 名前: ◆UUwiUCL1P6 mailto:sage [2011/03/26(土) 14:22:30.73 ID:pvmCllah.net]
keyboardの初期化です。

GameInput::Init
input->CreateDevice( GUID_SysKeyboard, &keyboard, NULL );
keyboard->SetDataFormat( &c_dfDIKeyboard );
keyboard->SetCooperativeLevel( Window.Handle(), DISCL_FOREGROUND|DISCL_NONEXCLUSIVE );
{
DIPROPDWORD dipd = {};

dipd.diph.dwSize = sizeof( DIPROPDWORD );
dipd.diph.dwHeaderSize = sizeof( DIPROPHEADER );
dipd.diph.dwObj = 0;
dipd.diph.dwHow = DIPH_DEVICE;
dipd.dwData = 8;

keyboard->SetProperty( DIPROP_BUFFERSIZE, &dipd.diph );
}
keyboard->Acquire();

GameInput::Free
if ( keyboard ) {
keyboard->Unacquire();
keyboard = NULL;
}

843 名前: ◆MBbNHCnf2M mailto:sage [2011/03/26(土) 14:36:20.30 ID:npmu6kKT.net]
>>842
SetCooperativeLevelの引数、Window.Handle()って
Handleって関数作ってないみたいです

844 名前: ◆UUwiUCL1P6 mailto:sage [2011/03/26(土) 14:40:47.38 ID:pvmCllah.net]
WINDOWクラスに下記の関数を作成してください。

public:
const HWND Handle( void ) const { return handle; }

>>842
GameInput::Init
keyboard = NULL // ねんのため追加してください
input->CreateDevice( GUID_SysKeyboard, ...

GameInput::Free:
解放の順番は初期化と反対にしてください。

input初期化->keyboard初期化 〜 keyboard解放→input解放


845 名前: ◆MBbNHCnf2M mailto:sage [2011/03/26(土) 15:28:08.48 ID:npmu6kKT.net]
変数のスコープとかよく分からなくなってきた・・・

Window.Handle()のWindowって、最初の方で定義したWindow window;の
windowっていうインスタンスだと思うんですけど
GameInput::Initが書かれているファイルGameInput.cppからアクセスするには
インスタンスを渡すしかないと思うんですけど
そこの処理はまだ書いてませんよね?

あれ、それともなんか勘違いしてるかな

846 名前:名前は開発中のものです。 mailto:sage [2011/03/26(土) 16:01:06.60 ID:QDwsR5XB.net]
いいかげんスレ違い
RPGのロジックに入るまでブログでやれ

847 名前:名前は開発中のものです。 mailto:sage [2011/03/26(土) 16:35:54.83 ID:ai5/F2yB.net]
どうせ他に使うやついないのになにいっちゃってんの?アホなの?

848 名前: ◆UUwiUCL1P6 mailto:sage [2011/03/26(土) 16:40:45.61 ID:pvmCllah.net]
>>845
下記を宣言してください。

extern WINDOW window;

この先いろんなところで参照するので、ヘッダに記載した方がよいです。

(>>846)のような意見も出ていますし、ソースを断片的に記載していくのは効率や誤謬が出やすいので、
別の手段を検討したほうがよいかも知れません。
ブログかアップローダを指定いただければそちらでお渡ししますんで、
ご検討ください。





849 名前: ◆UUwiUCL1P6 mailto:sage [2011/03/26(土) 16:53:57.96 ID:pvmCllah.net]
extern WINDOW Window; でした(最初大文字)

ソース全体でこれだけはグローバル変数にしています。
他の変数はクラスの静的メンバでprivateにしています(IDirectInput8* input等)。

ここに書いてやり取りするのは楽でいいんですけど先々難しそうですね。
スレッドのリサイクル法が適用されて日記帳扱いになればOKかも。

850 名前: ◆MBbNHCnf2M mailto:sage [2011/03/26(土) 17:11:30.81 ID:npmu6kKT.net]
>>846
>>1の書き込みとスレッドの中身を見る限り、このレベルからやっても
良いように感じましたが・・・
>>1さんもC++のプログラミングは初めてって書いてますし

>>848
確かにこのままソース書いていくのは難しいと感じてました
どんどん大きくなっていきますからね
とりあえず
gmdev.xrea.jp/
このアップローダが、この板でプログラムを作っている方々が
使用しているアップローダのようです
今後はここにソース置きましょうか

>>849
common.hみたいなヘッダを作成して
#include "WINDOW.h"
extern Window window;
として
WINDOWクラスにアクセスする必要があるクラス全部に
インクルードしたら良いんですね

851 名前: ◆UUwiUCL1P6 mailto:sage [2011/03/26(土) 18:14:33.03 ID:pvmCllah.net]
>>850
gmdevにDirectInputの.h/.cppを置きました。
ttp://gmdev.xrea.jp/st/up/245.txt

>common.hみたいなヘッダ
そうです。自分専用のマクロとか定義とかの置き場にヘッダ作りますよね。
そこに入れておいてください。

ついでに↓もお願いします。
#define ARRAY(a) (sizeof(a)/sizeof(a[0]))
配列の要素数のマクロです。


置いたソースですが現在の自分のソースからいろいろはしょって整形しているので、
部分的に文法がおかしくなったりで、エラーがでるかも知れません。
それはすいませんがうまく直してください。


852 名前: ◆MBbNHCnf2M mailto:sage [2011/03/26(土) 18:47:47.52 ID:npmu6kKT.net]
>>851
すごく見やすいソースですね、大体の感じは理解出来ました

GameInput.cppのunsigned int GameInput::index;で
静的でないメンバーはクラスの外側で定義できませんと出たので
ヘッダの宣言でstatic付けときましたけど、staticにして大丈夫ですか?

それと、DATA_MAXが未定義だったので、適当に#define DATA_MAX 256
と、とりあえずしておきました

以上でコンパイルできました
これからじっくりとソース見ていきたいと思います

853 名前: ◆MBbNHCnf2M mailto:sage [2011/03/26(土) 18:59:27.28 ID:npmu6kKT.net]
今ソース眺めてたら
enum { DATAMAX = 0x100, };ってあるけど
これがDATA_MAXかな?

854 名前: ◆UUwiUCL1P6 mailto:sage [2011/03/26(土) 19:15:55.16 ID:pvmCllah.net]
>>852
index は static です。付け忘れました。

>>853
DATA_MAXです。記述ミス。

入力ワーク回りで間違い多いのは、現在その部分は環状リストで可変長で実装しているので、
急ごしらえで変更したためです。

一部、ヘッダにあって実装されていない関数(JoyPush等)は実際にゲーム中で使用する関数です。
これはGameInput.cppとは別ファイルにした方がよいです。

GameInput.cppはいったん完了するとほとんどいじらなくなります。
ライブラリィ化してもいいかも知れません。

855 名前:名前は開発中のものです。 mailto:sage [2011/03/27(日) 19:06:12.75 ID:7F6awSJl.net]
>>825
> InitとFreeの中身は対称(確保⇔解放)になる事が多いです。

なんでコンストラクタとデストラクタ使わないの?

856 名前: ◆UUwiUCL1P6 mailto:sage [2011/03/27(日) 22:08:40.18 ID:In3d1Uaw.net]
>>855
インスタンスを作成しないからです。メンバーは変数も関数もstaticだけです。
インスタンスを作成できないように、privateでコンストラクタを記述しておくべきですね。


857 名前: ◆MBbNHCnf2M mailto:sage [2011/03/27(日) 22:25:46.92 ID:rtEoqdWq.net]
ここ二日でDirectInputについては大体理解できた気がする
今頃気が付いたけど、DirectInputって今後非推奨なのか

858 名前:名前は開発中のものです。 mailto:sage [2011/03/27(日) 22:49:20.93 ID:7F6awSJl.net]
>>856
いや、だからインスタンスを生成しないのはなんで?って話だったんだけど。

まぁプログラム中で1回だけしかやらないなら、 Init()/Free() 呼び忘れや2重呼び出しも
そうそう起こらないだろうから、コンストラクタやデストラクタ使ってもそんなにおいしくないの
かもね。



859 名前: ◆UUwiUCL1P6 mailto:sage [2011/03/27(日) 22:58:33.14 ID:In3d1Uaw.net]
>>858
Cで作り始めてからC++にしたのでグローバル関数が自分的にしっくりきたという理由です。
合理的な理由はとくになく、個人の好みの範疇を出ないです。


>>857
続きをおきました。
ttp://gmdev.xrea.jp/st/up/246.txt

ゲーム中で使う関数の使い方さえ変えなければ、実装はDirectInputでなくともよいかと思います。


860 名前:名前は開発中のものです。 mailto:sage [2011/03/27(日) 23:12:17.94 ID:BpzKp4Cl.net]
「趣味の範疇」なら何回もつっこまれないと思うけどなぁ
自分も「えー」って思ったし

861 名前: ◆UUwiUCL1P6 mailto:sage [2011/03/27(日) 23:39:29.93 ID:In3d1Uaw.net]
>>860
クラスのないCで作ってから、あとでclass{}で括るとこんな感じになりますよ。
そこからC++ならではの形に作り変えるまでに至らずというところです。

>◆MBbNHCnf2Mさん
この先こんな感じで趣味っぽいところが満載なので自分流に変更するなり、
他の意見を参考いただくなりで、そこは適当にやってください。

ウィンドウ表示⇒コントローラ入力と来たので、次は描画&ファイル読み込みですが、
ここから私としてはタスクシステムをご提案になります。
すごーく突っ込みが入るテーマのようなんで少々気が重いです。

862 名前:名前は開発中のものです。 mailto:sage [2011/03/28(月) 00:17:25.15 ID:Dt+tXZ6j.net]
>>861
わかってるならやめとけばいいのに。どうせ必要性もないんだろ?

やるなら自分でわかってる範囲の突っ込み所と、それでも敢えて押し通す意義(必要性)を
最初にひととおり明示しておけば、繰り返しツッコミが入ってグダグダになるのは避けられる、
かもしれない。

863 名前:名前は開発中のものです。 mailto:sage [2011/03/28(月) 00:29:53.10 ID:iY/f3p70.net]
RPGの描画や更新なんてすることもタイミングも決まりきってるのにタスクシステムなんか何に使うんだよw
上の人も言ってるけど、まずどういうものを作ろうとしててそのためにこういう技術が必要だというのを
はっきりさせてくれ

864 名前: ◆MBbNHCnf2M mailto:sage [2011/03/28(月) 00:30:16.73 ID:+ECkFPgj.net]
>>861
自分的には分かりやすいので、全然問題ないです
まあ、細かい実装はそれぞれのやり方があるでしょうからね

私なんかCにしてもC++にしても言語仕様も十分に理解しないまま
やってるので、基本的に何でも参考になります
本当はちゃんと勉強した方が良いんでしょうけど

タスクシステムは、確かにこの板のスレ見ると荒れてますね
そもそも、タスクシステムの定義自体が曖昧というか
人によって微妙に違う感じですね
タスクシステムは一度勉強してみたかったので、ちょうど良かったです

865 名前: ◆MBbNHCnf2M mailto:sage [2011/03/29(火) 22:24:52.26 ID:o6OtSixI.net]
どうやら風邪をひいてしまったようで、喉が痛い

ところで話は今までの流れと急に変わりますけど
今時のRPGってアイテムのデータはどのように持ってるんだろう

昔なら、アイテム番号だけを持ってて(ゲーム全体で256個までなら1バイト
65536個までなら2バイト)、その番号からアイテムデータを参照してたけれど
例えば、武器にランダム性があって、ショートソードに+1とかの強さの幅がある場合
アイテム番号1がショートソード、アイテム番号2がショートソード+1みたいな
のだと無駄にアイテムデータ増えるからあり得ないかな

昔だと、メモリも少ないし、データをセーブする媒体の容量も少ないから
アイテムのインデックスだけを持っていたけれど、今はデータ全体を
そのまま持っているのかな

866 名前: ◆MBbNHCnf2M mailto:sage [2011/03/29(火) 22:28:15.54 ID:o6OtSixI.net]
多分、基本となるデータのみ存在していて、入手時にそのデータ元に
ランダムで性能を確定させて、そのデータを全部を持ってるのか

867 名前:名前は開発中のものです。 mailto:sage [2011/03/29(火) 23:19:08.33 ID:W0uoKekZ.net]
これだ!っていうデータ構造なんて無いんじゃないかな
ゲームごとにチューニングする必要があるわけで
パフォーマンスに余裕があればリレーショナルデータベースとか使っちゃうのかな

868 名前:名前は開発中のものです。 mailto:sage [2011/03/30(水) 00:26:46.80 ID:jEpUZgct.net]
アイテムのインスタンスに持たせた方がいいんじゃないかなぁ
手持ちの装備を強化できるようなシステムが追加したくなった場合とかやりやすいし



869 名前:名前は開発中のものです。 mailto:sage [2011/03/30(水) 01:14:37.31 ID:fixmLHL7.net]
>>865
仕様に沿って素直なコードを組むのが最強。
リソース制約が顔を出しにくくなった「今時」ならこれでいいでしょ。

"Premature optimization is the root of all evil."

870 名前: ◆MBbNHCnf2M mailto:sage [2011/03/30(水) 20:18:14.12 ID:eH7gPhm2.net]
>>867-869
やっぱりデータが変化するようなものだと、インデックスだけで
管理は無理ですね。よく考えたら当たり前の事だった。

まあ、今ならアイテム程度のバイナリデータいくつ持ってても
問題無いか。携帯とかモバイル環境だと制限あるかもしれないけど
そんな環境だと、そもそもそれ程大規模のゲームも作らないだろうし。

871 名前:名前は開発中のものです。 mailto:sage [2011/04/03(日) 21:06:06.82 ID:t0UP3s0y.net]
しーん

872 名前: ◆MBbNHCnf2M mailto:sage [2011/04/03(日) 21:10:34.12 ID:wtGWHPRo.net]
>>871
ちょうど今書こうと思ってた所です
今週は、風邪をひいてあまり集中して出来なかったので

とりあえず、ポリゴン出したりテクスチャ貼ったりというのは理解したと思う
これで音を出す以外の大体の事は何とかなるような気がする

873 名前: ◆MBbNHCnf2M mailto:sage [2011/04/03(日) 21:17:09.28 ID:wtGWHPRo.net]
で、マップスクロールについて考えていたんですけど

d.hatena.ne.jp/aidiary/20040918/1251373370

上記のサイトのRPGの項目にあるような、マップ全体を裏画面に描画して
そこから表示画面分だけ切り出すという方法が結構検索していると
見つかるのに驚いたわけです

これって結構スタンダードな方法なのかな?
いくらメモリを気にしなくてもいいPC環境とはいえ、マップ全体を描画って
あり得るのだろうか、少なくとも市販作品では無いような気がする

874 名前: ◆MBbNHCnf2M mailto:sage [2011/04/03(日) 21:23:57.58 ID:wtGWHPRo.net]
昔はマップスクロールというと、RPG作成において一番の難所で
これが出来たらもうRPGは出来たも同然というような感じだった

特に私が使っていたMSXなんかだと、ハードウェアスクロール機能が
縦方向しかなかったので、1ドットスクロールは厳しかった

本当に最初の頃は、レイヤという概念も無くて(知らなかっただけかも)
そもそもレイヤをいくつも重ね合わせられるほどの処理速度もメモリも無かった

875 名前:名前は開発中のものです。 mailto:sage [2011/04/03(日) 21:27:16.75 ID:/2gPwasz.net]
昔とかどうでもいい話してないでDirectX使えよ。
無理ならDXライブラリでも使え

876 名前: ◆MBbNHCnf2M mailto:sage [2011/04/03(日) 21:32:21.82 ID:wtGWHPRo.net]
そこで、どういう風にマップスクロールを実装していたかと言うと
裏画面に表示画面より、縦・横共にマップチップ1個分大きいマップを描画し
そこから1ドットずつずらしてコピーするという方法だった
ページフリッピングも出来ないわけではなかったけど、VRAM容量を考えると
そんなもったいない方法は許されなかった

今でも縦・横でマップチップ一個分だけの裏画面からコピーするのが
定番だと思っていたけれど、マップ全体からコピーするという方法が
多く見つかるというのは、そっちの方が定番のかな

877 名前:名前は開発中のものです。 mailto:sage [2011/04/03(日) 21:34:32.01 ID:t0UP3s0y.net]
>>873
256*256のマップだけで256MB消費ってのは普通じゃないと思う

878 名前: ◆MBbNHCnf2M mailto:sage [2011/04/03(日) 22:04:18.84 ID:wtGWHPRo.net]
>>877
そうですか、やはり普通じゃないのか
説明しやすいからそうしているのが多いのかな

今考えている方法は
用意すべき画面
1. 表示画面分の表・裏のサーフェイス(DirectX初期標準)
2. 最終的に合成する画面、ここから1ドットずつすらして裏サーフェイスにコピー
(表示画面より縦・横1チップだけ大きい画面を確保)
3. レイヤを3つ使うとして、各レイヤ分の裏画面(これも表示画面より1チップ分だけ大きい)
4. マップチップ・キャラやNPC等のグラフィック

処理
1. まず、方向キーが押されたら、3の各レイヤ用の画面にマップ描画
2. 最下層のレイヤ分を2に画面にコピー
3. 最下層上にいるキャラクタ・NPCを2に描画
4. 2-3をレイヤ分処理
5. 2の画面から1の裏画面にコピーして裏画面を表に
6. 2-5までを1ドットずらして1チップ分処理

無駄がありそうだけれど、これでいけそうな気がする
でもテクスチャって座標指定でコピーできないから
1ドットずつコピーするのが難しそうな気が
もっとテクスチャについて勉強する必要がありそう



879 名前:名前は開発中のものです。 mailto:sage [2011/04/03(日) 22:06:51.98 ID:/2gPwasz.net]
あのさ?座標にマイナスを指定できるの知ってる?

880 名前: ◆MBbNHCnf2M mailto:sage [2011/04/03(日) 22:36:46.84 ID:wtGWHPRo.net]
>>879
失礼、連続で5回以上書き込めないようで

テクスチャ座標に負の値が使えるのは知ってます
それをどこに使うんですか?
まだ勉強中なので教えてください

881 名前:名前は開発中のものです。 mailto:sage [2011/04/03(日) 23:07:20.50 ID:mqRgK4Gz.net]
あなたの文章を読んでいて思ったのだが。
まさか、一枚のテクスチャに複数のレイヤーを重ねて最終的に
画面に描画しようとしている?

DirectXのバージョンをいくつ使うか知らないけど
いくらなんでも概念が古すぎるよ。
(DirectDrawとか使おうとしてる?)

WindiwsXPターゲットのDirectX9ならポリゴンまたはスプライト使えば解決できることを
わざわざ難しい方法でやろうとしているように見える。

ここで説明するのは無理があるからいくつかサイトのURL貼っとく

DirectX8の解説サイト
rina.jpn.ph/~rance/directx8/index.html
Microsoft本家のゲームプログラミング入門資料(数学の知識必須)
msdn.microsoft.com/ja-jp/academic/cc998598

まさかとは思うがDirectX7ならこの辺り
rina.jpn.ph/~rance/directx7/directx7study/index.html

入門者ならDirectXと言わずDXライブラリを使うのもありだと思う。
DXライブラリを使った解説サイト
dixq.net/g/

あと、ネットの情報は色々不足な部分や整理されていないから
一冊、入門書を買うことをお勧めする。


882 名前:879 mailto:sage [2011/04/03(日) 23:08:21.00 ID:mqRgK4Gz.net]
あれID変ったw

883 名前: ◆MBbNHCnf2M mailto:sage [2011/04/03(日) 23:49:00.27 ID:wtGWHPRo.net]
全然連続で書き込めない、この板人が少な過ぎるのか・・・


>>881
DirectX 9.0c でやろうと思ってます
つまり、DirectDrawでなくて、DirectX Graphicsですね

そのサイトも読んだんですけど、多分ポリゴンにテクスチャに貼り付けて
2Dの処理をするのがよく理解できてないんですね
特にテクスチャの扱いが多分よく分かってないので、勉強しときます
ポリゴンに単純にテクスチャ貼るところまでは理解できてる(と思う)んですが

884 名前:名前は開発中のものです。 mailto:sage [2011/04/04(月) 00:57:26.26 ID:EfnOmkqq.net]
だったら素直にD3DXのSprite使えばいいよ
表示範囲内のタイルを毎フレーム全て描画しなおせばいいだけ
一見効率悪そうだけど>>878よりは遥かに効率が良い

885 名前:名前は開発中のものです。 mailto:sage [2011/04/04(月) 01:16:24.28 ID:EfnOmkqq.net]
一つのレイヤ内で使われるタイルを一つの大きなテクスチャにまとめておいて
レイヤ全体を一つの図形とみなしてテクスチャ座標でマッピングするのが
多分一番速くて効率の良い方法
スプライトはそれと同じようなことを自動でやってくれるから
毎フレーム大量の描画を行ってもわりと速い

886 名前:名前は開発中のものです。 [2011/04/23(土) 16:35:48.28 ID:CvPk8hGJ.net]
ゲーム制作メンバーを募集しています。

yuzuru.2ch.net/test/read.cgi/ff/1298538064/l50
www31.atwiki.jp/fftsukurou/

・最近のFFが嫌い
・昔のFFが好き

どちらかに当てはまれば誰でも結構です。
昔ながらのFFをみんなで作りましょう。


887 名前:名前は開発中のものです。 mailto:sage [2011/04/28(木) 16:06:00.10 ID:odTXZLNY.net]
募集要項の大雑把さにフイタ

888 名前: 忍法帖【Lv=18,xxxPT】 mailto:sage [2011/05/05(木) 11:29:11.77 ID:Zs6VE70C.net]
うん?



889 名前:名前は開発中のものです。 [2011/07/08(金) 21:16:59.44 ID:nxuNDnA1.net]
マップ画面から事ある事に戦闘画面に行くよくあるRPGを作ろうと思うんだけど、
戦闘画面を呼び出すのはマップ画面の中で関数呼び出す感じにするもんなの?
それともデータ保存してマップ画面終了してから戦闘画面に行くもんなの?
作る時は前者が楽だけど、メモリがちょっと心配。

890 名前:名前は開発中のものです。 mailto:sage [2011/07/08(金) 21:29:25.17 ID:TDxk0CvB.net]
メッセージループ内でシーン分岐

891 名前:名前は開発中のものです。 mailto:sage [2011/07/08(金) 21:34:45.63 ID:nxuNDnA1.net]
ああ、やっぱそれか……ありがとう。

892 名前:名前は開発中のものです。 mailto:sage [2011/07/13(水) 17:30:26.96 ID:7GbeQNs3.net]
> それともデータ保存してマップ画面終了してから戦闘画面に行くもんなの?

毎回状態を記憶した一時セーブデータみたいなの書き出して読み込んで、
オブジェクトの生成と破棄とリソースの読み込みと開放してまた再現するって事?
その処理を作ってテストするのが大変そうだなぁ…
所謂普通のセーブデータと共用できればマシそうだけど…
仕様にもよるけど、マップ画面でのbgmを元の位置から再生したい時とかも少し面倒だね。
イベントなんかの途中で戦闘が始まるようなのは復元するの大変そうだなぁ…

どんなゲームなのか判らないから一概には言えないけど、
メモリなんてせいぜい該当マップで利用する敵グラや音のリソースが+されるだけなんだし、
そこまで気にする程でも無いような。

昨今のPC事情で考えたらCPUやメモリの容量は異常だよね。
10万満たない簡素なPCでも凄い積んでる。
ところがHDアクセスはまだまだ遅いんだよね。
だから前者でいいんでね?

> 戦闘画面を呼び出すのはマップ画面の中で関数呼び出す感じにするもんなの?

> メッセージループ内でシーン分岐

要するにマップ画面に戦闘画面への遷移を固定化するコードを持たさないで部品化した方がいいよねって話かと。
方法はいろいろあって、FSM(有限オートマトン)やstateパターンでシーン単位で切り替えるのが有名だけど、
遷移を管理する側にごちゃごちゃさせたくないなら、マップと戦闘を保持したクラスを用意してやれば済む話だよね。
つーか別に仕様が完全固定化されてるなら戦闘からマップ直接呼んでもいいと思うよ。
あの手の技法なんて納期とか変更とかに厳しい世界の人たちが使ってる苦肉の策なんだしw
難しい事や汎用的な事は手段であって、それが目的化するよりはゲームが動くほうがいいよね。

それからこれも仕様によるけど、
所謂シーン単位での完全切り替えだとマップの上に戦闘を描くスタイルできないけどいいの?
あとエンカウントのアニメーションなんか必要な場合、マップ画面側にその処理だけが残るとかキモクない?

893 名前:名前は開発中のものです。 mailto:sage [2011/07/14(木) 16:32:39.19 ID:0xB3ByY3.net]
ふぅ…

894 名前:名前は開発中のものです。 [2011/12/06(火) 13:22:55.40 ID:oDkZLgbY.net]
あげ

895 名前:名前は開発中のものです。 mailto:sage [2012/03/26(月) 23:19:50.12 ID:q+Fv8Yng.net]
>>889
グラフィック関連はさすがに解放すると思う
でもドラクエみたいな2Dロープレなら何をどう作ってもメモリ不足なんてありえない

もう1つの質問の意図はマップ画面の下位に戦闘画面が来るか
それともマップ画面と戦闘画面を同じ立場において別途切り替える機構を作るかっていう問題だと思うけど
何らかのイベントやミニゲームなどで戦闘シーンを使う場合に上下関係が密接に関係してると
後で再利用しづらいのにで戦闘画面は独立させておいたほうがいいと思う。



896 名前:名前は開発中のものです。 mailto:sage [2012/05/10(木) 12:17:40.31 ID:CvbrCj71.net]
FFよりダンマスみたいなの作ってよ
いっとくけどMSX版の方じゃないよw

897 名前:名前は開発中のものです。 mailto:sage [2012/08/23(木) 21:04:32.49 ID:8Fyjiw0F.net]
MSXのダンジョンマスターをオンライン対応でリメイクして欲しいけど

スレ違いだし他力本願だねw

898 名前:名前は開発中のものです。 mailto:age [2012/09/07(金) 19:10:16.76 ID:M4WerZHY.net]
あげ



899 名前:名前は開発中のものです。 mailto:sage [2012/09/16(日) 21:05:26.04 ID:3z6vfuIt.net]
ダンマスならRTC版じゃいかんのか?

900 名前:あずにゃん ◆PaaSYgVvtw [2012/11/29(木) 18:47:56.93 ID:T/exNI7l.net]
c始めたばかりなのですが質問です。

tp//codepad.org/WsNDfYIs

これをビルドしたら実行結果が
a = 1
&a = 18ff44
*pa = 1
&pa = 18ff3c
b = 1

と表示されたんですが&aと&paが何故こう表示されるのか分かりません
16進数で表示される事は分かるんですが
printf("&pa = %04x\n",&pa); 
実行結果が18ff3c
これが特に分かりません^^;
数学的に考えるとpa=&a;でアドレスがaに代入されるからaの16進数表示に
ならないんですか?
仕組みはよく分からなくてどなたか教えて下さい。

まずは基礎から勉強してるので宜しくです。
まずはcからなのでc+はまだ先のことですが^^;
ゲ制作も遠い道のりです。。。

901 名前:名前は開発中のものです。 mailto:sage [2012/11/29(木) 19:15:49.60 ID:f6gZcj+t.net]
paのアドレスじゃん

902 名前:名前は開発中のものです。 mailto:sage [2012/12/01(土) 19:58:04.77 ID:CrVsmJCK.net]
>>900

codepad.org/qZh2vLXf

903 名前:名前は開発中のものです。 mailto:sage [2012/12/01(土) 20:18:25.61 ID:CrVsmJCK.net]
>>900
ごめん、やっぱこっちで
codepad.org/UB5JFPnU

904 名前:名前は開発中のものです。 [2012/12/28(金) 09:37:26.68 ID:8KDAkRIs.net]
ズルするならマップでエンカウント直前のスクリーンを保持しておいて、戦闘画面の背景にあてれば出来るね。
動くマップチップで戦闘中も動かしたいなら見えてる部分をきちんとしたデータで渡して戦闘シーンで再構築しないといけないけどたぶん難しくないか。
やっぱマップと戦闘だと載せるUI違うから分けた方が見やすくなるんじゃないかと思ってる。
背景がマップだと戦闘場面が戦闘UIという意識でマップにのっかってるって感覚が強くなりそうだから一緒に書くのが自然に思えなくもないけど、
ほかのシーンは分けてるのにマップと戦闘はくっついてるというのは汎用的ではないような気がする。
でも面倒になったら分けない。

905 名前:名前は開発中のものです。 [2015/10/16(金) 10:06:10.59 ID:c5lx3m67.net]
>>1は消息不明?

DXライブラリだけど
俺もアクション、シューティングと何作か作って来たので
そろそろRPG作ってみたいんだけど、
膨大になるゲーム中の台詞を合理的に管理する方法が思い付かないんだよね。
それが解決するなら重い腰あげられそうなんだけど。。

906 名前:名前は開発中のものです。 mailto:sage [2015/10/23(金) 21:15:34.15 ID:yK+GV+yo.net]
あえて一度ツクールなりウディタなり触ってみればいい

907 名前:名前は開発中のものです。 [2017/01/31(火) 20:51:48.28 ID:D6yECHIX.net]
age






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<245KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef