13/01/16 17:11:29.45 rfcXvvp9
2Dゲーならそこまで低レベルAPIに落ちなくてもいい。
ていうか面倒ごとが増えるから落ちずに済むならそれに越した事は無い。
66:名前は開発中のものです。
13/01/16 18:51:41.63 u7MUGbEN
つまりDXライブラリ最強ってことですね
67:名前は開発中のものです。
13/01/16 19:32:52.73 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:名前は開発中のものです。
13/01/16 19:43:47.57 vHhR3ta5
何をしたいかいまいち良く分からんが、
STLコンテナの類で全要素にアクセスするなら
イテレータ使うのがよろしい。
C++初心者にはキモイ構文かも知れんが、
まぁサンプル通りのコーディングすれば良し。
69:名前は開発中のものです。
13/01/16 23:25:51.98 uIyKClGc
イテレータ慣れると[]演算子でアクセスする方が気持ち悪くなってくるね
70:名前は開発中のものです。
13/01/17 22:34:40.20 yNq2XjTR
ムーブコンストラクタで無用なコピーを防ぐとか、そういう話かと
71:名前は開発中のものです。
13/01/17 22:47:58.36 SK+WC+I6
>>69
用途が違くね?
[]演算子ならどこでも一瞬でアクセスできるじゃん。
72:名前は開発中のものです。
13/01/17 23:59:25.21 QQuSP+8l
>>71
mapの場合は絶対にキーが格納済みであることが確実でもfind使うようにしてる
それとはまた違うがvectorもatがあるから[]は使ってないなあ
73:名前は開発中のものです。
13/01/18 00:50:51.69 0xoMQDl+
Vectorでatは毎回範囲チェックするから遅くなるだろ
ある程度連続してアクセスするなら無駄
74:名前は開発中のものです。
13/01/18 04:22:15.56 6OYOcstc
>>72
さすがにそれはどうかと思う
75:名前は開発中のものです。
13/01/18 21:17:01.14 h30YIVHQ
>>70
>>67の内容から察するにその辺の話だと俺も思うなぁ
C++11 std map pair move-semantics move-constructor move-assignment-operator
とかでググると>>67のやりたい事と一致する情報が色々拾える気がする
76:名前は開発中のものです。
13/01/18 22:19:03.33 6FSUVQjN
アルゴリズムでcopy一発じゃないの?
77:名前は開発中のものです。
13/01/19 12:36:02.05 q8h4iJfZ
DXライブラリでゲームのセーブ及びロード関係なんですが
fopenやfwriteではint型やchar型のデータは読み書きできると思うんですが
クラスなどのオブジェクトまるまる保存するにはどのような関数があるのでしょうか?
参考に出来るサイトなんかでもなんでもいいのでお願いします。
78:名前は開発中のものです。
13/01/19 13:49:54.50 BIw3jTiL
オブジェクトを保存できるような形式にすることを「シリアライズ」というが
DXライブラリとしてはシリアライズは提供してなかった、はず。
C++としても特にあるわけじゃない。
Boostではあるって聞いた。
データ形式が複雑じゃなければ自分で手でデータを並べてファイル出力。
structを一括とかすると若干見通しがいい。
余談だがこれには#pragma pack(1)とか非標準的な泥臭い話も若干出てくる。
79:名前は開発中のものです。
13/01/19 13:51:20.31 tuSK099a
boost::serializationで検索……と言いたいところだけど、
まずはstructか何かに必要なデータを纏めて、それを1つずつ順番にバイナリ出力するところから始めてみてはどうだろう
80:79
13/01/19 13:51:53.80 tuSK099a
あ、ごめん、リロってなかった
81:名前は開発中のものです。
13/01/19 15:03:13.68 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:名前は開発中のものです。
13/01/19 15:15:11.83 hcRANC3J
ファミコンゲームのセーブロードがシリアライズとかしてたかよ
必要なデータを洗い出してセーブデータの構造を自分で考えろよ
83:名前は開発中のものです。
13/01/19 19:26:10.66 tuSK099a
ファミコンソフトってC++で開発されてたのか、知らなかったぜ
84:名前は開発中のものです。
13/01/19 22:10:37.28 +PjkUk0Q
なんとなく想像はつくと思うけど、
セーブロード機構の実装はめんどくさいよ。
85:名前は開発中のものです。
13/01/19 22:30:50.58 CgroCKX/
いつどんなタイミングでもゲーム画面をまるごと保存&復元可能にするのと
ゲームのプレイデータをセーブできてロード時に適切なシーンへ移行するのとでは
かなり実装方法が違ってくるから注意だなあ
前者はアプリ用のライブラリとして組み込めるレベルの機能だけど
後者はゲーム別に高度にカスタマイズしたレベルでの機能になる