- 1 名前:名前は開発中のものです。 mailto:sage [2013/01/11(金) 19:10:40.87 ID:xdIUMDA+]
- ゲーム製作におけるC/C++全般に関するスレです。
元スレ DXライブラリ 総合スレッド その12 toro.2ch.net/test/read.cgi/gamedev/1330000532/ 前スレ C/C++ゲーム製作総合スレッド Part1 toro.2ch.net/test/read.cgi/gamedev/1337516528/ C/C++ゲーム製作総合スレッド Part2 toro.2ch.net/test/read.cgi/gamedev/1351015269/
- 67 名前:名前は開発中のものです。 mailto:sage [2013/01/16(水) 19:32:52.73 ID:Yd8Vz7lO]
- #include <iostream>
#include <map> class A{ public: int val; }; int main(){ std::map<int, A> Main_A; std::map<int, A> Sub_A; Sub_A.insert(std::make_pair(1, A())); Sub_A.insert(std::make_pair(5, A())); Sub_A[1].val = 100; Sub_A[5].val = 50; //Main_AにSub_Aの要素をinsertしたい std::cout << Sub_A[1].val << std::endl; std::cout << Sub_A[5].val << std::endl; return 0; } mapから他のmapに要素をinsertするといったことは可能なのでしょうか? イテレータとかいうやつを使うのでしょうか?
- 68 名前:名前は開発中のものです。 mailto:sage [2013/01/16(水) 19:43:47.57 ID:vHhR3ta5]
- 何をしたいかいまいち良く分からんが、
STLコンテナの類で全要素にアクセスするなら イテレータ使うのがよろしい。 C++初心者にはキモイ構文かも知れんが、 まぁサンプル通りのコーディングすれば良し。
- 69 名前:名前は開発中のものです。 mailto:sage [2013/01/16(水) 23:25:51.98 ID:uIyKClGc]
- イテレータ慣れると[]演算子でアクセスする方が気持ち悪くなってくるね
- 70 名前:名前は開発中のものです。 mailto:sage [2013/01/17(木) 22:34:40.20 ID:yNq2XjTR]
- ムーブコンストラクタで無用なコピーを防ぐとか、そういう話かと
- 71 名前:名前は開発中のものです。 mailto:sage [2013/01/17(木) 22:47:58.36 ID:SK+WC+I6]
- >>69
用途が違くね? []演算子ならどこでも一瞬でアクセスできるじゃん。
- 72 名前:名前は開発中のものです。 mailto:sage [2013/01/17(木) 23:59:25.21 ID:QQuSP+8l]
- >>71
mapの場合は絶対にキーが格納済みであることが確実でもfind使うようにしてる それとはまた違うがvectorもatがあるから[]は使ってないなあ
- 73 名前:名前は開発中のものです。 mailto:sage [2013/01/18(金) 00:50:51.69 ID:0xoMQDl+]
- Vectorでatは毎回範囲チェックするから遅くなるだろ
ある程度連続してアクセスするなら無駄
- 74 名前:名前は開発中のものです。 mailto:sage [2013/01/18(金) 04:22:15.56 ID:6OYOcstc]
- >>72
さすがにそれはどうかと思う
- 75 名前:名前は開発中のものです。 mailto:sage [2013/01/18(金) 21:17:01.14 ID:h30YIVHQ]
- >>70
>>67の内容から察するにその辺の話だと俺も思うなぁ C++11 std map pair move-semantics move-constructor move-assignment-operator とかでググると>>67のやりたい事と一致する情報が色々拾える気がする
- 76 名前:名前は開発中のものです。 mailto:sage [2013/01/18(金) 22:19:03.33 ID:6FSUVQjN]
- アルゴリズムでcopy一発じゃないの?
- 77 名前:名前は開発中のものです。 mailto:sage [2013/01/19(土) 12:36:02.05 ID:q8h4iJfZ]
- DXライブラリでゲームのセーブ及びロード関係なんですが
fopenやfwriteではint型やchar型のデータは読み書きできると思うんですが クラスなどのオブジェクトまるまる保存するにはどのような関数があるのでしょうか? 参考に出来るサイトなんかでもなんでもいいのでお願いします。
- 78 名前:名前は開発中のものです。 mailto:sage [2013/01/19(土) 13:49:54.50 ID:BIw3jTiL]
- オブジェクトを保存できるような形式にすることを「シリアライズ」というが
DXライブラリとしてはシリアライズは提供してなかった、はず。 C++としても特にあるわけじゃない。 Boostではあるって聞いた。 データ形式が複雑じゃなければ自分で手でデータを並べてファイル出力。 structを一括とかすると若干見通しがいい。 余談だがこれには#pragma pack(1)とか非標準的な泥臭い話も若干出てくる。
- 79 名前:名前は開発中のものです。 mailto:sage [2013/01/19(土) 13:51:20.31 ID:tuSK099a]
- boost::serializationで検索……と言いたいところだけど、
まずはstructか何かに必要なデータを纏めて、それを1つずつ順番にバイナリ出力するところから始めてみてはどうだろう
- 80 名前:79 mailto:sage [2013/01/19(土) 13:51:53.80 ID:tuSK099a]
- あ、ごめん、リロってなかった
- 81 名前:名前は開発中のものです。 mailto:sage [2013/01/19(土) 15:03:13.68 ID:CuXnatAE]
- >>77
クラスを読み書きするだけならこんな感じでどうでしょうか… #include <iostream> #include <fstream> using namespace std; struct Savedata{ int x, y, z; }; int main(){ Savedata save; //オブジェクト save.x = 1;save.y = 2;save.z = 3; const char* filename = "sav.dat"; //ファイル名 ofstream out; //セーブ out.open( filename ); out.write( ( const char* )&save, sizeof( Savedata ) ); out.close(); Savedata load; //ロード ifstream in; in.open( filename ); in.read( ( char* )&load, sizeof( Savedata ) ); in.close(); cout << load.x << load.y << load.z << endl; //確認 }
- 82 名前:名前は開発中のものです。 mailto:sage [2013/01/19(土) 15:15:11.83 ID:hcRANC3J]
- ファミコンゲームのセーブロードがシリアライズとかしてたかよ
必要なデータを洗い出してセーブデータの構造を自分で考えろよ
- 83 名前:名前は開発中のものです。 mailto:sage [2013/01/19(土) 19:26:10.66 ID:tuSK099a]
- ファミコンソフトってC++で開発されてたのか、知らなかったぜ
- 84 名前:名前は開発中のものです。 mailto:sage [2013/01/19(土) 22:10:37.28 ID:+PjkUk0Q]
- なんとなく想像はつくと思うけど、
セーブロード機構の実装はめんどくさいよ。
- 85 名前:名前は開発中のものです。 mailto:sage [2013/01/19(土) 22:30:50.58 ID:CgroCKX/]
- いつどんなタイミングでもゲーム画面をまるごと保存&復元可能にするのと
ゲームのプレイデータをセーブできてロード時に適切なシーンへ移行するのとでは かなり実装方法が違ってくるから注意だなあ 前者はアプリ用のライブラリとして組み込めるレベルの機能だけど 後者はゲーム別に高度にカスタマイズしたレベルでの機能になる
|

|