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


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

DXライブラリ 総合スレッド その12



1 名前:名前は開発中のものです。 mailto:sage [2012/02/23(木) 21:35:32.53 ID:Si08WDH/]
Cを習得した程度のスキルでも、
ゲームのグラフィックを比較的容易に描画する事のできる、
「DXライブラリ」に関するスレッドです。
DXライブラリに関するテクニックなどの情報交換などを行う事で、
多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。

【公式】
homepage2.nifty.com/natupaji/DxLib/

【過去スレ】
DXライブラリ 総合スレッド
pc11.2ch.net/test/read.cgi/gamedev/1197468399/
DXライブラリ 総合スレッド 2008
pc11.2ch.net/test/read.cgi/gamedev/1224923873/
DXライブラリ 総合スレッド その3
pc11.2ch.net/test/read.cgi/gamedev/1238429676/
DXライブラリ 総合スレッド その4
pc11.2ch.net/test/read.cgi/gamedev/1249822550/
DXライブラリ 総合スレッド その5
pc11.2ch.net/test/read.cgi/gamedev/1259912953/
DXライブラリ 総合スレッド その6
hibari.2ch.net/test/read.cgi/gamedev/1267108154/
DXライブラリ 総合スレッド その7
hibari.2ch.net/test/read.cgi/gamedev/1286180687/
DXライブラリ 総合スレッド その8
hibari.2ch.net/test/read.cgi/gamedev/1301818631/
DXライブラリ 総合スレッド その9
hibari.2ch.net/test/read.cgi/gamedev/1310904069/
DXライブラリ 総合スレッド その10
hibari.2ch.net/test/read.cgi/gamedev/1313655495/
DXライブラリ 総合スレッド その11
toro.2ch.net/test/read.cgi/gamedev/1322844235/

775 名前:名前は開発中のものです。 mailto:sage [2012/05/17(木) 12:51:45.63 ID:XdhnKfWC]
別にsetter, getterない publicなメンバ変数を持ってもいいし、
visual studio c++ 専用だけどpropertyという機能もある

776 名前:名前は開発中のものです。 mailto:sage [2012/05/17(木) 16:09:41.33 ID:jk5kVr/j]
>>774
安心しろ、俺もだ

777 名前:名前は開発中のものです。 mailto:sage [2012/05/17(木) 16:36:03.67 ID:LEC6LKtf]
C++の構造体ってデフォがpublicなクラスみたいなもんだし
メンバ関数作って使い方の感覚得るとかいんじゃね

778 名前:名前は開発中のものです。 [2012/05/17(木) 17:43:23.17 ID:ucuijB6C]
厨房だけど、何からすればいいか分からん
C言語は入門書一冊熟読した
知識はそれだけです

779 名前:名前は開発中のものです。 mailto:sage [2012/05/17(木) 17:53:24.70 ID:A/eH0jcf]
何すれば良いか分からんやつは大抵できないから好き勝手ゲーム作ったりしてれば良いと思う

780 名前:名前は開発中のものです。 mailto:sage [2012/05/17(木) 18:19:27.36 ID:Le624jWk]
ファミコンのマリオみたいなの作るといいよ
あの滑らかなジャンプの曲線の動きとか作るのすげー勉強になるし、実際に動いてるの見ると楽しい

781 名前:名前は開発中のものです。 mailto:sage [2012/05/17(木) 18:25:10.94 ID:sA5HBbyr]
>>778
作りたいもの作ればいいよ。
作りたいものがなければ違うことやればいいと思うよ

782 名前:名前は開発中のものです。 mailto:sage [2012/05/17(木) 18:42:01.27 ID:Lq82mTDs]
ちょっと待て、熟読したとは言ったが、実際にコードを入力して試したのか?
ともかく、DxLibとC言語で簡単なゲーム作る本があるから探して買うか図書館で借りるかして試してみればいいよ。

783 名前:名前は開発中のものです。 mailto:sage [2012/05/17(木) 18:44:31.06 ID:CIWlPPKp]
昔はベーマガを見て覚えたもんだが



784 名前:名前は開発中のものです。 mailto:sage [2012/05/17(木) 19:04:17.83 ID:1miPR200]
俺は見た(読む)だけじゃ絶対身につかなかったな。
実際に動かして見てやっと理解できる。

785 名前:名前は開発中のものです。 mailto:sage [2012/05/17(木) 21:17:20.29 ID:MVax3Amg]
俺はサンプルプログラムを1個改造して、
次のサンプルプログラムを1個改造して、
気に入ったのがあったら沢山改造して、というのを繰り返して身に着けたな

786 名前:名前は開発中のものです。 mailto:age [2012/05/18(金) 00:14:29.29 ID:4zRGqSRr]
rpg.nengu.jp/game/dl/

このサイトのソース読みながら覚えたいのですが
RPG.vcprojをドラッグアンドドロップして
vc++2008に変換しようとすると
「ゲームファイルの初期化に失敗しました」と何度試しても出ます。
VC++2010は低スペなので使えないのですがどうすれば変換できるのでしょうか

もしダメならこれ以外でVC++2008で公開されているrpgのサンプルがあれば教えてください

お願いします


787 名前:名前は開発中のものです。 mailto:sage [2012/05/18(金) 00:56:44.66 ID:Kw1eEMY1]
staticで保持して置いた配列を使い終わったら開放したいんだけどどうしたらいいでしょうか?

788 名前:名前は開発中のものです。 mailto:sage [2012/05/18(金) 00:58:13.40 ID:gx1xQNnD]
staticの固定長配列はプログラムが終了すると自動的に解放されます
それ以外に開放手段はありません

789 名前:名前は開発中のものです。 mailto:sage [2012/05/18(金) 00:59:03.38 ID:Kw1eEMY1]
関数func1,func2でそれぞれstatic変数を宣言した時、中身は共通になりますか?


790 名前:名前は開発中のものです。 mailto:sage [2012/05/18(金) 00:59:42.96 ID:mamO/m7+]
C++なら終了するまでスコープから外れないので解放されない。

解放する必要があるなら、
配列へのポインタで変数を確保してnewでヒープを確保、
必要になったらdeleteすればok

791 名前:名前は開発中のものです。 mailto:sage [2012/05/18(金) 00:59:50.88 ID:Kw1eEMY1]
>>788
ありがとうございます

792 名前:名前は開発中のものです。 mailto:sage [2012/05/18(金) 01:00:56.05 ID:mamO/m7+]
>>789
関数内で宣言されるstatic変数はスコープは関数の内部のみ。
従って別物。

793 名前:名前は開発中のものです。 mailto:sage [2012/05/18(金) 01:04:36.26 ID:Kw1eEMY1]
>>790
なんかよくわからないので具体的にコード書いてくれると嬉しいです。
・配列arrの引数m分だけ要素数を持つint型配列を引数&pに作成する関数
とかだとわかりやすくて自分が喜びます。
図々しくてすみません。



794 名前:名前は開発中のものです。 mailto:sage [2012/05/18(金) 01:05:51.71 ID:Kw1eEMY1]
やはり某製作支援サイトのようにメインループの前に変数宣言した方が良いのかな・・・

795 名前:名前は開発中のものです。 mailto:sage [2012/05/18(金) 01:20:06.21 ID:mamO/m7+]
>>793
//えーと、

// 適当な配列
int[] arr = {0,1,2,3,4,5,6,7,8,9,}

void dynamic_array(int*& p, int length)
{
  //lengthnこのintを確保
  p = new int[length];

  // arrからコピー
  for(int i = 0; i < length; ++i)
  {
    p[i] = arr[i];
  }
}

// pを解放するときは、
// delete[] p;

796 名前:名前は開発中のものです。 mailto:sage [2012/05/18(金) 02:44:50.20 ID:g6CQrJUG]
>>793
>>795 のSTL版
#include <vector>
void dynamic_array(int*& p, int length)
{
 auto v = std::vector<int>(length);
 p = v.data();
}

797 名前:名前は開発中のものです。 mailto:sage [2012/05/18(金) 12:33:49.02 ID:AXglkRe5]
なんでここC++スレになってるんだ

798 名前:名前は開発中のものです。 mailto:sage [2012/05/18(金) 12:39:42.25 ID:aBuN5zeL]
DXライブラリで詰まる人はcなのかライブラリなのか区別が付かないからではないでしょうか

799 名前:名前は開発中のものです。 mailto:sage [2012/05/18(金) 12:52:20.63 ID:tTxAGc55]
俺みたいにDXライブラリに頼らなくてはゲームも作れないレベルの人間だと
C++についてもよくわかってなかったりするからつい、だろうね。

他のスレだと”DXライブラリに頼らなくていい人”ばかりに思えて気後れする。


800 名前:名前は開発中のものです。 mailto:sage [2012/05/18(金) 14:58:56.44 ID:AqX5CuAi]
>>796
dynamic_array終了時に開放されね?
>>787が単にヒープに置きたいということでなければ>>795の方法しかないと思う

もしくはvector自体new/deleteするか

801 名前:名前は開発中のものです。 mailto:sage [2012/05/18(金) 21:35:11.00 ID:0qQFV47b]
今時ダウンロードしてまでゲームやる人いるのかね

802 名前:名前は開発中のものです。 mailto:sage [2012/05/18(金) 22:52:22.12 ID:Avt8/Znc]
>>800
>vector自体new/delete
スマポをnewするとか意味ないだろ。
>>796はドヤ顔でSTL勧める本人がSTLを理解してなかった良い例。

803 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 00:27:03.52 ID:VD4oJ3BE]
STLのmapに(キー重複しない)insertを繰り返していくと、
メモリはわずかながら消費されていくと思うんだけど、
それってnewが繰り返されてるってことだよね。

アクション性の高いゲームでメインループ内でnewとか使っていいのかな。
普段は軽い処理でも、メモリ確保と開放が絡むと、どこかでカクついたりしないか心配。
気にせずやってるけどカクつきなんて発生したことないよ、ということなら安心なんだけど。



804 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 00:28:28.08 ID:r1qEY4jZ]
冷静に考えて、今時って携帯ゲームやネトゲが主体だろ?
DXライブラリでパソコンで動くゲームって当たり前だが
そういうのが逆に新鮮じゃね?


805 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 00:49:21.53 ID:TBtSNI4j]
>>803
もしも、メインループで毎フレームほど行なうっていうのなら、
そういう処理を行なう事自体を、見直す必要があると思うけど。

806 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 01:02:15.71 ID:a+urZXjQ]
GCが起動するわけでもないならnew/deleteにあまり神経質になる必要はないと思うけど・・

807 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 01:10:30.26 ID:ZOsD1vO4]
>>803
new deleteが重いというけど、なにをnew deleteするかでまた違うのよ。
new int とか new char[32] みたいに1回で終われば気にするほどでもない。

new Hoge で Hogeのコンストラクタの中でまたたくさん new() よばれているような
階層深く大きいクラスのnew, deleteが重いから、
その場合だけオブジェクトプールを検討すればいい。

808 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 01:27:35.13 ID:QmsbQiPL]
一応ラウンド(ステージ)管理クラス生成時に
設定されたキャラクターの数だけ配列を宣言する形なんだけど
配列用ポインタを持たせたら、参照先が使い捨てになる。
で、動的に配列の要素数を操作すればポインタで使い捨てじゃなくてもいいんじゃないかと


809 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 02:35:24.88 ID:ZOsD1vO4]
それは最大数がステージの開始時にわかってて、
最大数分のメモリを確保しっぱなしにするって話だろ?

それができる(普通な)規模のステージならそれがいい。
ステージだとかシーンと呼ばれる単位で一括確保・解放できればそれがベスト。

810 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 09:17:44.64 ID:9Hyd3HTN]
最近のPCの場合、個人制作のゲームなら
全部メモリ確保してもいいともうけどな

811 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 10:43:57.82 ID:lxOdfsYj]
new/delete遅い遅いっつーけどwinの実装はくそ速いぞ。
一定サイズ以下ならただのプールからの切り出しだし。


812 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 10:46:39.32 ID:VD4oJ3BE]
>>807
オブジェクトはゲーム起動時に最大数をメモリ確保してある前提だったりする。

そこで、mapにinsertするpairが仮にintとポインタだったとして、
insertのときにそのintとポインタ分の小さいnewが起動するし、
eraseのときにはそれがdeleteされると思う。

で、その回数が膨大になったとき、GCみたいな時間くう処理が起動して
カクついたら困るなーと。特にアクション性の高いゲームだと。
たとえばメモリを新たに大量確保する処理が起動して時間くうとか。
そんなものは発生しない、なら、安心してコンテナ使ってゲーム作れるんだけど。

アクション性の高いゲームでも普通にコンテナ使うのが定番だよ、ということなら安心なんだけど、
そのあたりよくわからなくて。

813 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 11:09:09.97 ID:ArUyj87Z]
>>809
具体的なコードがわからないんだよ

class RoundAdmin{
Character character[];
RoundAdmin(int i){
for(int t=0;t<i;t++){
character[i] = new Character;
}
}
}



814 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 11:09:37.11 ID:ArUyj87Z]
iPhoneスペース無視されてワロタ

815 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 11:24:53.82 ID:8/80f/4q]
>>812
メモリを確保する時間よりも、メモリが確保できるかどうかが問題だな
コンテナが定番かどうかはこういうのが詳しい
ttp://d.hatena.ne.jp/i-saint/20101012/1286822888
個人・小規模でPCゲー製作ならSTLで充分かと

816 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 11:38:54.28 ID:ArUyj87Z]
>>813続き
イメージとしてはこれができたら楽なんだ
winmain(~~~~~){
 int state;
 while(error()){
  switch(state){
   case 0:
   RoundAdmin RAdmin=new RoundAdmin();
   break;

   case 1:
   state=RAdmin.Func();
   break;

   case 99:
   delete RAdmin;
   break;
  }
 }
}


817 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 11:52:46.30 ID:aIMhivPJ]
try,catch,throwじゃ駄目なのか?

818 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 12:00:09.24 ID:gXEjt6C9]
goto使えば良いんでね?

819 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 12:22:43.39 ID:VD4oJ3BE]
>>815
ありがとう。参考になる
自分はまさに個人・小規模でPCゲー製作だから、
out of memoryの心配だけはないんだよな

820 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 12:24:45.52 ID:HSIQMcFD]
オーバーライドして作ったクラスのオブジェクトをコンテナに突っ込んでイテレータで回しながら共通関数を実行するんだろ

821 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 12:49:35.26 ID:JpqeYW60]
>>820
ポリモーフィズムと言え。ややこしい

822 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 12:58:30.97 ID:zRojJiyg]
>>816
OGRE3DのAdvancedOgreFrameworkがシーンの使い分けを解りやすく実装してるよ
仕組みだけなので2Dでも十分使える、ただ3DゲームならOGRE3D使ったほうがDXライブラリより楽だけど

823 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 13:12:00.32 ID:dlfQry7w]
メモリ確保かー。
そういえばこの間、少し大きめの構造体の配列を用意しようとしたんだけど

 STRUCT_HOGE hoge[1024];

だと実行時エラーで、

 STRUCT_HOGE *hoge = new STRUCT_HOGE[1024];

だと問題なく動くってことがあった。
頭では理解してたけど、実際遭遇したのは初めてだった。



824 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 13:46:07.27 ID:PlH7X2T2]
>>823
初心者が良くやるミスだね

825 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 14:26:49.52 ID:1CGbweqQ]
ちなみにそれ原因は何ですか?

826 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 14:51:44.70 ID:VD4oJ3BE]
stackとheapでぐぐれ

827 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 14:53:36.27 ID:ZHekMysl]
ただのスタックオーバーフローってこと?

828 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 14:57:27.20 ID:VD4oJ3BE]
yes

829 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 15:14:52.35 ID:GOROOjbN]
>>823
大文字で書かれると分かりにくいのは俺が初心者だからかな
普通小文字じゃない?

830 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 15:18:21.89 ID:ArUyj87Z]
>>817-818
それしか方法ないのかなー
最悪、最大数宣言して存在フラグなんだけど

831 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 16:51:36.07 ID:dlfQry7w]
>>824
それなりにプログラムやってるけど、遭遇したの初めてでなー。

>>829
こういう例示だと、結構使い分けることも多い気がする

832 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 17:03:35.58 ID:ZOsD1vO4]
>>812
>mapにinsertするpairが仮にintとポインタだったとして、
>insertのときにそのintとポインタ分の小さいnewが起動するし、
>eraseのときにはそれがdeleteされると思う。
ツリーマップは木構造のノードに必要なデータ、キー、バリューを
一つの構造体として1回のnew(), delete()で済ませる。
だからstd::listの追加・削除・挿入は比較的速いアルゴリズムと言われてるが、
これとnew(), delete()の回数自体は変わらない。(木構造を辿る負荷は別計算)

でも毎フレームstd::mapに大量の追加・削除されるのって
そもそも連装配列に向いてないペアなんじゃないか?(キーがHPとか?)

例えば >>816 なら関数ポインタ or クラス継承して
ストラテジーパターンのポインタを使うべきだ。

833 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 17:09:43.18 ID:ZOsD1vO4]
>>825
VC++の初期値では、スタックサイズの最大値、ヒープサイズの最大値に
低めの値10MBが設定してあるから、これを超えると例外が発生して終了。




834 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 17:12:49.37 ID:VD4oJ3BE]
>>832
>一つの構造体として1回のnew(), delete()で済ませる。
>これとnew(), delete()の回数自体は変わらない。(木構造を辿る負荷は別計算)
同意。

小さい負荷が積もり積もって、トータルでみれば大きな負荷となること、
その負荷軽減のためのチューニングや根本的な設計の方針については、
いろいろ情報も得やすいし、なんとかなる気がしている。

他言語のGCのような突発的大負荷の心配をしてたけど、
このケースでは、その心配はあまりなさそうという気がしてきた。

835 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 17:46:09.07 ID:pWSSP6VZ]
DXライブラリ 雑談スレッド その12
toro.2ch.net/test/read.cgi/gamedev/1330000532/

836 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 18:29:25.01 ID:FNz7dsVi]
そういえば、ゲーム製作に関わるC, C++全般のスレって無いのか。

837 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 18:50:09.12 ID:aIMhivPJ]
>>833
これでエラー回避出来なくなった人って少なくないんだろうな(合掌)
>>834
GCが動き出すぐらいにメモリーをいじってれば、
いずれはフラグメンテーションの餌食になるだろうな。
そうなったら、メモリー管理の方法を根本から見直した方が良いな。


838 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 18:56:35.62 ID:aIMhivPJ]
>>836
立てるか?それとも俺が立てる?

839 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 19:20:40.08 ID:+n/uAHmA]
>>833
10MBじゃなくて1MB

840 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 19:59:32.27 ID:oQPWMkDd]
>>838
あったほうがいいかも。
軽く雑談できるくらいのスレは確かに欲しい。
ム板はstlやら何やらで分かれまくっててメンドイ。

841 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 21:40:01.48 ID:aIMhivPJ]
こんな所か?っつーか立てられ無かった。

題名:C/C++総合スレッド Part1
ゲーム製作におけるC/C++全般に関するスレです。

元スレ
DXライブラリ 総合スレッド その12
toro.2ch.net/test/read.cgi/gamedev/1330000532/


842 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 21:51:45.49 ID:VD4oJ3BE]
C/C++でDXライブラリ以外のメジャーどころのライブラリも
知ってる人がいたらテンプレに入れてみては?
俺は不勉強ゆえDXライブラリしか知らないけど…

843 名前:名前は開発中のものです。 mailto:sage [2012/05/19(土) 22:19:17.33 ID:oQPWMkDd]
考え出したら色々あるな。
boostとかsdlとかwtlとか



844 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 02:25:40.47 ID:b4J8kKZD]
switch分岐でnew-deleteできないのかぁ!!
誰かメインループ中でラウンド管理クラス(キャラクター数、オブジェクト数などのゲーム本体を管理するクラス)
を作りたいんだけど!

全然わからん。綺麗にできない。
ラウンド管理クラスを、例えばゲームのロード画面時にパッとnewして
キャラクターをその分だけパッとメンバの配列を動的に宣言して
リザルト画面に戻ったらパッとdeleteしたい



845 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 02:28:54.36 ID:rvG7rk61]
キリがないからやめろ

846 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 02:43:46.36 ID:m1rxCUFY]
その前に、自分のできる方法でゲーム完成させて経験値増やしたほうがよいように見える

847 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 03:09:05.33 ID:b4J8kKZD]
>>846
キャラクターのクラスをラウンドクラスで配列で持って管理するっていう方法を想定して作ったんだよ

ラウンドクラスをコンストラクタの引数で指定されたファイルでマップやキャラクターや武器を初期化して
このラウンドクラスはその名の通りラウンド中は保持してラウンドが切り替われば新しく作る。
というのがしたいんだ。
だから
switch(hoge){
case 0:
 hoge=func();
case 1:
 Round round=new Round();
 hoge=2;
 break;
case 2:
 hoge=round.main();
 break;
case 3:
 delete round;
 hoge=0;
 break;
}
これがしたい
case0がメニューで1で初期化(つまりロード画面?)2がメインゲーム、3がリザルト画面
みたいな

848 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 03:12:36.92 ID:b4J8kKZD]
でもswitchスコープ抜けると開放されちゃうんよ( ;´Д`)
staticにすれば、ひょっとしたら言語特性でできるかもしれないし
でもそうするとdeleteしても消えないかもしれないし


849 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 03:26:03.65 ID:m1rxCUFY]
そういう概念をどこかで齧ったのなら、
そのソースごと真似すればいいんじゃないかな

スコープはC/C++では割と基礎的なところなんで、そこの理解がまだ足りないうちに
そこまで高度・大規模なことを「そらで」やろうとしても挫折してしまうと思う
手本があるなら手本を理解するまでやったほうがいい、その意味で、手本の真似が足りない

850 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 04:19:36.26 ID:rvG7rk61]
>例えば >>816 なら関数ポインタ or クラス継承して
>ストラテジーパターンのポインタを使うべきだ。

switchをやめろ。

851 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 04:32:17.32 ID:ETYUDOJj]
LILO and switch

852 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 05:20:07.65 ID:J67XAZ6b]
なんでローカルにnew

853 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 06:11:28.75 ID:rvG7rk61]
まず、メモリリークチェックしたほうがいいな。
>>847 のプログラミングからは駄々漏れ臭いがぷんぷんする。
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

ゴリ押しおまじないプログラミングは危険だぜ。



854 名前:名前は開発中のものです。 [2012/05/20(日) 08:54:21.16 ID:jxpb7tAX]
>>847
無理すんな。普通にやれw

855 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 09:17:03.32 ID:GdVgJDsL]
綺麗に書く素人が「綺麗に」とか考えて作っても読みやすくはならんと思うぞ

856 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 09:24:37.57 ID:rvG7rk61]
DXライブラリのC++ラッパー作ってます。よろしく。
mint.ninja-web.net/dpp/index.html

857 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 09:33:19.40 ID:QwDamEGA]
>>847
メンバ変数にでも保持しておかないと、
スコープ抜けたらローカル変数は保持できないので、結果的にメモリリークする

まあ、>>849がFAだと思うが

858 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 09:47:55.18 ID:b4J8kKZD]
>>849
確かにswitchはオススメしないって言われた

お手本のコードは無いです。
メインループのこの部分(タイトル画面やメインゲームやオプション画面の変異)って
どのようにした方がいいですか?
他の方法がわからない


今思いついたのは

NowState=&Start();
while(~~~){
NowState=NowState();//次に実行するべき関数のアドレスを返す
}

859 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 09:49:23.86 ID:b4J8kKZD]
タスクシステム?というのは聞いたけど昔のものだとかする必要が無いとか言われた

860 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 09:50:46.90 ID:GdVgJDsL]
グローバルにenumでモード切り替え用の変数作ってswitchが一番簡単

861 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 10:17:37.19 ID:K5FhX9FA]
シーン管理でggr

862 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 10:21:43.19 ID:b4J8kKZD]
c#やjavaでいいんじゃないかってくらい全部クラス化してる。
クラスは自分が管理クラス(今回の場合はラウンドクラス)から渡されたデータを使って処理を行う。


例えば一連の流れをいうと
キャラクターが攻撃を行ったら判定クラスのメソッドが呼ばれ
判定クラスのメンバ変数ポインタからキャラクターの情報を貰って
判定結果がtrueならダメージ処理クラスに攻撃方法と対象と攻撃者が渡されるメソッドが呼ばれ
ダメージ処理クラスが持っているキャラクターの情報を貰って
HPが0ならキャラクターに死亡フラグを立て、UIクラスのメソッドに攻撃者と対象を渡す。

つまりキャラクタークラス→判定クラス→ダメージ処理クラス→UIクラス
とバトンリレーになってる。
この時、キャラクタークラスや判定クラスやダメージ処理クラスは、キャラクターの情報を持ってないと仕事にならないのでラウンド管理クラスが保持している。
イメージとしてはクラゲと、クラゲの触手

class RoundAdmin{
 Character character[];
 Judge judge;
 Damage damage;
public:
 void SetCharaNum(int);
 void SetJudgeClassChara(Character* hoge){damage.SetChara(hoge);};
 void SetDamageClassChara(Character*);
}


以上のことを踏まえて誰か中央部の設計お願いします。もう設計の最初からやり直しするのは嫌ですヽ(;▽;)ノ

863 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 10:39:42.64 ID:b4J8kKZD]
>>861
d.hatena.ne.jp/selvaggio/touch/20060821/1156148509
関数ポインタ?をスタックしまくるんですか
でもタイトルシーン→ゲームシーン→リザルトシーン
という流れがあった場合リザルトシーンを予めタイトルシーン時にリザルトをpushしなきゃならないってことですよね



864 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 10:48:07.65 ID:rvG7rk61]
昨日はアクションでstd::mapが速い遅いの話だったが、今日はRPGの戦闘か?

C++だと相互参照するのに嫌な制限あるから難しいよね。
>>856のサンプルに入ってるソースではデータと振る舞いを分けちゃってますが、
クラスを名前だけ前方宣言してダブルディスパッチするほうが一般的なのかなぁ。

865 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 11:49:53.71 ID:rvG7rk61]
>>862
こうか?

class Charactor
{
__int HP;
__bool isDead;
__void Attack(Charactor* target, How* how)
__{
____Judge judge;
____bool is = judge.IsHit(target);
____if( is )
____{
______Damage damage;
______damage.Set(this, target, how);
______if( HP == 0 )
______{
________isDead = true;
________UI ui;
________ui.Set(this, how);
______}
____}
__}
};

866 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 11:56:57.34 ID:rvG7rk61]
だめだ、エスパーよろ。

867 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 14:50:25.73 ID:b4J8kKZD]
>>865
それぞれの返り値がないから
例えばjudge.ishit()っていうメソッドの中でdamageを定義してメソッドを呼んでる
こう・・・

class Charactor
{
 int HP;
 int x,y;
 double Angle;
 bool isDead;
 RoundAdmin* Admin;
 void Attack(int Kind){
  Admin->judge.IsHit(this,x,y,Angle,Kind);
 }
};

class Judge{
 RoundAdmin* Admin;
 void Judge(RoundAdmon tmpAdmin){
  Admin=tmpAdmin;
 }
 void IsHit(Attacker,x,y,Angle,Kind){
  for(int i=0;i<Admin->CharaNum;i++){
   if(~~~){
    Admin->damage.func(Attacker,i,Kind);
   }
  }
 }
}

868 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 14:50:56.96 ID:b4J8kKZD]
説明が下手でスパゲティで死にたい

869 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 14:54:58.64 ID:d1pNr8pV]
enum
{
  TITLE,
  MAIN,
  ENDING,
};

int state = TITLE;

int main(void)
{
  while()
  {
    func[state]();
  }
}

870 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 15:33:37.24 ID:GdVgJDsL]
>>863
ゲームオーバー処理の時にゲームシーンをpopして、そのままゲームオーバーをpushすればいいんじゃないの?

871 名前:名前は開発中のものです。 [2012/05/20(日) 16:09:24.24 ID:b4J8kKZD]
>>870
逆だと思ってました(popしたものが実行されると思ってた)
そういうことですか

>>869
func[MAIN]関数内で保持したい変数ってどうすればいいんですか?
func[MAIN]以外が呼び出されたら消えて欲しいです。

あと今更ですが質問厨でウザいですし基本設計の質問はDxlibスレでスレチだった・・・

872 名前:名前は開発中のものです。 mailto:age [2012/05/20(日) 18:03:42.86 ID:B+9uILOG]
Charactor*のようにポインターのマークが後ろにつくのはどういう意味だっけ?

873 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 18:16:08.20 ID:eBiE/F9z]
Character* x; // Characterのポインタ型を表す型名
Character*30 // Characterという変数と30の乗算(演算子オーバーロードがされていない場合)
Character*=10 // Characterという変数に30を乗算し代入(演算子オーバーロードがされていない場合)
/*Character*/ // コメントの終端

どれでもお好きな物をどうぞ

C++のスレがないってのは
ここで質問して良いって言う理由にはならないからな?



874 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 18:30:54.34 ID:rvG7rk61]
中高生の黒歴史

875 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 18:44:31.78 ID:iNm25OoA]
いい加減、スレ立てるか。>>841でいい?






[ 続きを読む ] / [ 携帯版 ]

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

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