愛用のテキストエディタ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
KEV

愛用のテキストエディタ

#1

投稿記事 by KEV » 15年前

雑談です。
過去ログをざっと調べて無さそうだったので。

皆さんはどんなテキストエディタを使ってプログラムを書いていますか?

私はWindowsでVC++とC++Builderの両方を用途によって使いわけて作業してるんですが、
大体いつもIDEのままのエディタに書き込んでコードを書いてます。
これでもなんとか作業はできていたんですが、
たまにもっと効率よくコード書けないものかと思うことが最近多くなりました。(特にBuilderは…げふん
これを機に自分にとって最適なエディタを探してみようかなと思っています。
現時点で知ってるのは秀丸くらいですが、個人的に秀丸はそんなに使いやすくないかもしれない…。

これから現存するテキストエディタに順番に触れていく予定ですが、
皆さんが日々どのエディタを使用しているのか聞いてみたくなりました。
よろしければ愛用のエディタの名前と、それに対する熱い想いなんかが聞ければ嬉しいです。
シェアウェアでもフリーウェアでもOKです。

Justy

Re:愛用のテキストエディタ

#2

投稿記事 by Justy » 15年前


>皆さんはどんなテキストエディタを使ってプログラムを書いていますか?

 昔は Edtexというエディタを使っていましたが、今は EmEditorを使っています。
 さすがにそのままでは、まだまだ使い勝手が悪いので自作・多作のプラグイン・マクロを
多数入れてショートカットを割り当ててますが。

 EmEditorに限ったことではないですが、足りない機能があれば
マクロ書くなりプラグイン書くなりで対応できるエディタはお薦めです。


 VisualStudioのエディタは何年か前まで非 Windows向けの仕事が多くて
VSを使うことがあまりなかったことと、ちょっと癖があって
使いづらい面があるということで C/C++の場合はコンパイルしてエラーや警告が
出たときの修正とかデバッグ中くらいにしか使っていません。
(Refactor! Proとか入れたらまた変わってくるかも)

 ところが VSの補完が強力な C#となるとなかなかそうもいかなくて、
VSでざっくりコードを書いて、ソースの整形などを EmEditorで行うという流れに
なっています。

 ま、そんな感じで適当に使い分けてます。

ibis

Re:愛用のテキストエディタ

#3

投稿記事 by ibis » 15年前

「C言語を始めよう」を使ってます。
バージョン1.1.1.4~1.1.1.9を気分によって使い分けますね。
まぁ私はオートインデントだけしてくれれば満足なんですが。
このIDEはソースファイル単位でコンパイルできるので、結構小回りが利きます。
というかバージョン1.1.1.xではプロジェクトを扱えないんですよね。

たかぎ

Re:愛用のテキストエディタ

#4

投稿記事 by たかぎ » 15年前

いろいろ使っていますが、余りこだわりはありません。
カスタマイズもほとんどしません。

lbfuvab

Re:愛用のテキストエディタ

#5

投稿記事 by lbfuvab » 15年前

notepad++かTeraPadですね。
TeraPadの軽さは驚異的です。

御津凪

Re:愛用のテキストエディタ

#6

投稿記事 by 御津凪 » 15年前

私は会社でJmEdit2を使用しています。
起動時の軽さには少々負けますが、

オートインデント、フリーカーソル、矩形選択などがあり、(GERP検索も有りますね)
さらにソースブラウザ機能(別途ソフトが必要ですが)があるので、
(VisualStudioでいう「クラスビュー」)
これは結構扱いやすいです。

ただ、選択範囲のバグがあるのが玉に傷です^^;
(シフト押しながらカーソルの前方向でクリックするとうまく選択されないというもの)
開発が終了しているらしいので、それだけが悔やむ。
ソースを公開しているようなので、直せるかなとはおもいますけど。

バグが嫌ならTeraPadがいいと思いますね。
notepad++もいいのですが、会社の環境では相性が悪いので、使ってません。

管理人

Re:愛用のテキストエディタ

#7

投稿記事 by 管理人 » 15年前

特にエディタの種類の話じゃないんですが、
VisualStudioの画面を長時間見てると疲れるので、
ツール>オプションの「フォントと色」で自由に色の配色が決めれるので

画像

こんな風に暗くしてみると、目が疲れなくていいっすよ。
明るい画面を見続けると、目だけじゃなく、脳の体内リズムも壊すそうですから、
また、暗い文字を見ると目が悪くなると言うのは都市伝説らしいですから
結構オススメかもしれません。
まぁKEVはこれ以上目が悪くなるとか言う度合いを超えている気もするけど^^;

Re:愛用のテキストエディタ

#8

投稿記事 by » 15年前

Mana
漢字があった気がしますが…
と、VCのをそのまま
ですね…

ま~く

Re:愛用のテキストエディタ

#9

投稿記事 by ま~く » 15年前

メインはアドインとマクロでカスタマイズしたVSです。
アドインは新しいVSのバージョンが出るたびにいじってるので面倒ですが^^;
補助ではxyzzyです。

管理人さん
背景色を黒にすると確かに落ち着きますね。
でも・・・他のウィンドウとのコントラストの差が激しくありません??
ウィンドウズ自体の背景色を変えたほうが目に優しそうだけど。。

バグ

Re:愛用のテキストエディタ

#10

投稿記事 by バグ » 15年前

一時期、背景を黒、文字を緑のマトリックス仕様にしていましたが、なんとなく落ち着かないので、結局戻しました(笑)
今は、ディスプレイ自体の明るさを一番暗い状態で使用しています。

あ、テキストエディタはコーディングにはVisualStudioをそのまま使ってますが、文書の作成にはEmEditorを使いますね。

Justy

Re:愛用のテキストエディタ

#11

投稿記事 by Justy » 15年前

 背景色を白から少し灰色っぽい白にしています。
 それだけでも白のきつさは大分和らぎます。

kazuoni

Re:愛用のテキストエディタ

#12

投稿記事 by kazuoni » 15年前

ぜんっぜん知りませんでした^^;背景とか色を変えることができるのですか!?

自分も長時間やっているとたまに文字との焦点が合わず
しばらく休憩を取らないといけないなんてよくあります。
あとやはりディスプレイの明るさは下げたほうが目に優しいですかね。

今度からはJustyさんのおっしゃる少し灰色っぽい白にしてやろうと思います。

Mist

Re:愛用のテキストエディタ

#13

投稿記事 by Mist » 15年前

私は昔からMIFES使いです。
飛びぬけて何かがすごいってわけじゃないんですけど、エディタに必要な機能は抜けなく
一通りそろっていて、デザインがシンプルで自分好みのカスタマイズができるためずっと
使っています。
会社の経費で買ってるから自分の懐は痛まないですが、(学生さんだと)個人で買うとする
とちょっと高いかも(^^;

たいちう

Re:愛用のテキストエディタ

#14

投稿記事 by たいちう » 15年前

サクラエディタ。
検索の際に該当する文字列がハイライトするのが良いかな。
grepも使いやすく関数の定義や使われている場所等を簡単に探せたりできる。

管理人

Re:愛用のテキストエディタ

#15

投稿記事 by 管理人 » 15年前

背景色とかいじりだすと1時間位設定が終わらないですよね~w
「黒」を基調にしようとすると、背景と文字の明るさを逆にしないといけなくなりますけど、
各ソフトのウィンドウの背景の色はかわれど、文字の色が変わらなかったりして
背景黒にしたのに、あるアプリの文字の色は黒から変えれないみたいなことが起きて大変なんですよね~;
そこで色々試行錯誤しているうちに「薄い深緑(矛盾;)」にたどり着きました。
こんな感じです。

画像

背景が黒でも白でも見える色で、一番抵抗が無い色は自分的にはこの色でした。
昔はwindows blindsとかでコテっこてにいろいろいじりたおしていましたが、
結局こういう配色トラブルがたえなかったので、元に戻して自分で色設定してます。

まぁ結局見易い配色はデフォルトですよねぇ^^;

>ま~くさん
最初はそれで結構戸惑いましたw

>kazuoniさん
XPならデスクトップ右クリック>プロパティで画面のプロパティ開いて「デザイン」タブから色々設定出来ますよ。
後windows blindsとか使うと、世界中の人が作った無数のスキンをただで使えたりします。
もしwindowsの見た目カスタマイズしたことなかったらこういうの使うと面白いですよ。
http://desta.jp/category_list.php?page= ... 5&sort=new

組木紙織

Re:愛用のテキストエディタ

#16

投稿記事 by 組木紙織 » 15年前

C/C++ : VS or BCC Developer
Java : サクラエディタ or Net Beans
Fortran: サクラエディタ or Developer Studio
Haskell: サクラエディタ

以前授業でnotepad以外で書くなということだったので、それ以来エディタには
こだわりありません。
ただ、色や自動インデントなどの入力補助はなくていいから、全角空白と半角空白、タブは
見た目で区別できることと、行数を数える機能だけは欲しいです。
notepadを使ってそれだけはひしひしと感じました。

KEV

Re:愛用のテキストエディタ

#17

投稿記事 by KEV » 15年前

皆さん、こんなに多くの貴重な話をありがとうございます!
人によって多種多様ですねぇ…。

>Justyさん
EmEditorですか~。なるほど。
私も拡張機能はほしいと思っています。
まずはフリー版で試してみようかな。

>ibisさん
おお、「C言語を始めよう!」シンプルでいいですね。
今回おそらくIDEを変えることはないと思うのですが、
サブPCあたりにインストしてもいいかなと思いました。

>たかぎさん
3つ?以上のエディタを使いこなしている時点で
ある意味こだわりを持っていると見受けられます。

>lbfuvabさん
TeraPadを今触ってみましたがシンプルですね。
軽さってのは考えてませんでした。
参考になります。

>御津凪さん
JmEdit2開発終了してるのですか。
けどスクリーンショット見る感じだと見た目は好みかも。
触ってみますー。

>管理人
つまりVisualStudio大好きってことだよねアナタはw
エディタを黒くするのは秀丸で一度やったんだけど、
ブラウザ開くと大抵白い画面が出るし、差がきつかったのでやめてしまった。
カッコいいとは思うんだけどね。

>雷さん
真魚[まな] これかな?
こんなのもあるんですねぇ。初耳です。
是非試し切りしてみます。

>ま~くさん
VSはカスタマイズしたらもっと良くなるんですね。
あまり触ったことなかったからな…。
xyzzyかーなるほどなるほど。


>バグさん
文字を緑にしたら全部コメントに見えそうです…!
コーディングはほぼVSなんですね。

>kazuoniさん
毎日目にするであろうテキストエディタだから、
自分に最適のソフトや設定を探す時間はたっぷりかけてもいいと思っています。
色々と一緒にいじってみましょう!
あ、けど休憩は大事ですよ。

>Mistさん
MIFESかーこんなのもあるんだなぁ…。
大企業が統一して使用する高品質エディタって感じがします。
さすがに高くて手が出せないけど、インストしてるのを見かけたら触ってみます。

>たいちうさん
サクラエディタですかー。
検索機能が充実してるんですね。
紹介を読んでも利点がすぐにつかめなかったりするしこういう意見はかなり有難いです。




---------------
個人的な感想

なんだかんだで皆さんVisualStudioのエディタを使ってるんですねぇ。
IDEのエディタ+補助用のエディタという使い方で検討してみることにします。

ていうかエディタの種類多すぎだよ!

KEV

Re:愛用のテキストエディタ

#18

投稿記事 by KEV » 15年前

>組木紙織さん
空白とタブって混ざるとどえらいことになりますよね…。
エディタの使い分けがしっかりしてると迷うこともなさそうですね。

J

Re:愛用のテキストエディタ

#19

投稿記事 by J » 15年前

私は、
通常時:TeraPad
プログラミング時:BCC Dev
HTML類:Cresent Eve

を使わせていただいています。
TearPadは非常に軽いので。
Cresent Eveは軽いし、打ち込みには本当に便利です。
タグ予測が素晴らしい力を発揮します。
おすすめですよ~

kazuoni

Re:愛用のテキストエディタ

#20

投稿記事 by kazuoni » 15年前

あ、質問にそれてました。。
自分はVC++のみで頑張ってます^^;
自分からしたら使い分ける必要性が全く分からないです^^;
レポートはwordですけどww
いろいろ見てみようかなと思ってますが、なんとなく途中であきらめてしまいそうなw


>管理人さん
スキンの変え方はソフトを通さないとできないんでしょうか?
windows Blindsってソフトは有料の物しか見当たらないんですが・・・^^;?
あとvistaなんですが・・・?

GPGA

Re:愛用のテキストエディタ

#21

投稿記事 by GPGA » 15年前

テキストエディタは秀丸
開発はCodeWarrior
ツール作成はVS2008を使用しています。

管理人

Re:愛用のテキストエディタ

#22

投稿記事 by 管理人 » 15年前

スキンの変更はソフトを通さないと出来ないです。
一応フリー版ありますが、vistaですか・・。
多分vista対応のwindows blindsは無いのでは;

http://www.google.co.jp/search?hl=ja&q= ... +vista&lr=

この辺でおもしろそうなのを見つけてくるとかしか思いつかないです;
配色の変更はwindows標準の機能でもある程度出来ると思いますよb

k

龍神録プログラミングの館にリプレイをつける

#23

投稿記事 by k » 15年前

龍神録プログラミングの館で勉強しています。
現在、龍神録プログラミングの館やDXライブラリ置き場のサンプルコードを見ながら
リプレイについて試行錯誤しています。

リプレイの記録/再生自体はある程度うまく行ったのですが、
リプレイファイルのサイズが予想外に大きくなってしまい、
何かアイデアが無いかと思い、質問させていただくことにしました。

以下のようにリプレイを記録/再生しています。



リプレイ用の構造体と、保存したフレーム数を記録する変数を用意しています。

typedef struct{
	int paddata;//パッド記録用
	char keydata[256];//キー記録用
}*replay_t, *LP_recdata;

replay_t replay;
LP_replay_t recdata;


int RecFrame;//保存したフレーム数


リプレイ記録時は
malloc関数でrecdataの領域を(かなり多めに)確保しています。
メインループの中で、パッドとキーの状態を記録する関数を呼びます


//リプレイ記録用関数
void Rec_replay(){
	//パッドの入力状態を格納
	recdata[RecFrame].paddata = GetJoypadInputState( DX_INPUT_KEY_PAD1 );

	//キーの入力状態を格納
	GetHitKeyStateAll( recdata{RecFrame].keydata );

	//保存したフレーム数をインクリメント
	RecFrame++;
}
リプレイをファイルに保存する際に
変数 RecFrame

構造体 recdata
とを順に保存しています。
void Save_replay(){
	FILE *fp ;

	// ファイルを開く
	fp = fopen( "new.rpy" , "wb" ) ;
	if(fp==NULL){//もし開けなかったら
		DrawString(0,0,"replay write error",GetColor(255,255,255));
		return;
	}

	//まず保存したフレーム数を書き込む
	fwrite(&RecFrame,sizeof(int),1,fp);

	//次に動作保存データ構造体を、保存したフレーム数分書き込む
	fwrite(recdata, sizeof( replay_t ),RecFrame,fp);

	fclose( fp ) ;
}


以下は再生時の処理です。
リプレイ再生開始時は保存したファイルを読み込みます。
int RePlayFrame;//再生したフレーム数

void load_replay(){
	FILE *fp;
	//リプレイデータファイルを開く
	fp = fopen("replay.rpy","rb");

	//もし開けなかったら…
	if(fp==NULL){
		DrawString(0,0,"replay read error",GetColor(255,255,255));
		return;
	}


	//まず保存したフレーム数を読み込む
	fread(&RecFrame,sizeof(int),1,fp);

	//動作保存データを読めるだけのメモリ確保
	recdata = ( LP_replay_t )malloc( sizeof( replay_t ) * RecFrame ) ;

	//次に動作保存データ構造体を、保存したフレーム数分読み込む
	fread(recdata, sizeof( replay_t ),RecFrame,fp);

	//再生したフレーム数を初期化
	RePlayFrame =0;

	fclose( fp ) ;
}

以下再生中の処理です
龍神録プログラミングの館8章の
GetHitPadStateAll()にリプレイ再生時の場合を追加しています。

void GetHitPadStateAll(){
	int i,PadInput,mul=1;

	if(Replay_flag==1){//リプレイの再生のフラグが立っている場合は
		PadInput = recdata[ RePlayFrame ].paddata;

		for(i=0;i<16;i++){
			if(PadInput & mul)  pad.key++;
			else                pad.key=0;
			mul*=2;
		}

		input_pad_or_key(&pad.key[configpad.left]   ,
			recdata[ RePlayFrame ].keydata[KEY_INPUT_LEFT    ]);
		input_pad_or_key(&pad.key[configpad.up]     ,
			recdata[ RePlayFrame ].keydata[KEY_INPUT_UP      ]);
		input_pad_or_key(&pad.key[configpad.right]  ,
			recdata[ RePlayFrame ].keydata[KEY_INPUT_RIGHT   ]);
		input_pad_or_key(&pad.key[configpad.down]   ,
			recdata[ RePlayFrame ].keydata[KEY_INPUT_DOWN    ]);
		input_pad_or_key(&pad.key[configpad.shot]   ,
			recdata[ RePlayFrame ].keydata[KEY_INPUT_Z       ]);
		input_pad_or_key(&pad.key[configpad.bom]    ,
			recdata[ RePlayFrame ].keydata[KEY_INPUT_X       ]);
		input_pad_or_key(&pad.key[configpad.slow]   ,
			recdata[ RePlayFrame ].keydata[KEY_INPUT_LSHIFT  ]);
		input_pad_or_key(&pad.key[configpad.start]  ,
			recdata[ RePlayFrame ].keydata[KEY_INPUT_ESCAPE  ]);
		input_pad_or_key(&pad.key[configpad.change] ,
			recdata[ RePlayFrame ].keydata[KEY_INPUT_LCONTRO[/url]);

		RePlayFrame++;
		return;//リプレイの場合ここまで
	}

	PadInput = GetJoypadInputState( DX_INPUT_PAD1 );//パッドの入力状態を取得

	for(i=0;i<16;i++){
		if(PadInput & mul)  pad.key++;
		else                pad.key=0;
		mul*=2;
	}

	input_pad_or_key(&pad.key[configpad.left]   ,CheckStateKey(KEY_INPUT_LEFT    ));
	input_pad_or_key(&pad.key[configpad.up]     ,CheckStateKey(KEY_INPUT_UP      ));
	input_pad_or_key(&pad.key[configpad.right]  ,CheckStateKey(KEY_INPUT_RIGHT   ));
	input_pad_or_key(&pad.key[configpad.down]   ,CheckStateKey(KEY_INPUT_DOWN	));
	input_pad_or_key(&pad.key[configpad.shot]   ,CheckStateKey(KEY_INPUT_Z	   ));
	input_pad_or_key(&pad.key[configpad.bom]	,CheckStateKey(KEY_INPUT_X	   ));
	input_pad_or_key(&pad.key[configpad.slow]   ,CheckStateKey(KEY_INPUT_LSHIFT  ));
	input_pad_or_key(&pad.key[configpad.start]  ,CheckStateKey(KEY_INPUT_ESCAPE  ));
	input_pad_or_key(&pad.key[configpad.change] ,CheckStateKey(KEY_INPUT_LCONTROL));

}



以上、実際のコードとは変数名などこれとは異なる部分もあるのですが、このような感じです。

実際には9個しかキーは判定しないのに、
char keydata[256]と256個も配列を用意しているのが無駄なような気がするのですが、
どうすれば小さくできるか検討がつきません。
他にも何か気になるところや方法がありましたらお教えいただきたいと思います。
よろしくお願いします。

k

Re:龍神録プログラミングの館にリプレイをつける

#24

投稿記事 by k » 15年前

保存したファイルと読み込むファイルのファイル名が違ってますね。
失礼しました。
よろしくお願いいたします。

array

Re:龍神録プログラミングの館にリプレイをつける

#25

投稿記事 by array » 15年前

私も以前、リプレイに挑戦してみたのですが試行錯誤しながら作ったので詳しくは理解できてないです・・・
プログラムは詳しくは見てないのですが気になった点があったので

> 何かアイデアが無いかと思い、質問させていただくことにしました。
とのことなので、自機のみのリプレイならDXライブラリのリプレイサンプルを応用するのが一番軽いんじゃないでしょうか。
見た感じ多分参考にしているんですかね。

本題
keydata[256]←に関してですが、必要なかったと思います。(なくても動作するはずです)

そんな感じで実現したファイルは200KBも超えてないファイルなのですが、サイズ大きいですかね。

ただ、私のは入力情報を再生してるだけなので敵の弾幕にランダム関数が使われてたら、誤動作するんですけどねw

・・・なので、とりあえず
keydata[256] これを消してみてはどうでしょうか。

Justy

Re:龍神録プログラミングの館にリプレイをつける

#26

投稿記事 by Justy » 15年前


>char keydata[256]と256個も配列を用意しているのが無駄なような気がするのですが

 はい、パッドとキーポードを両方取得記録するのは大きな無駄ですね。
 パッドとキーポード両方見たとしても、結局はどちらかが押されていることさえ
わかればいいのですし、9個しか使用するキー/ボタンがなく、又 on/offの2種類しか
状態ないのでしたら、理論的には9ビットのデータでいいはずです。

 つまり(一般的な Windwosのコンパイラなら)unsigned shortに各キーが
押されているかどうかを、ビット単位で入れていけばいい、ということになります。

 まず、構造体の方は以下のようになるでしょう。
[color=#d0d0ff" face="monospace]    typedef struct{
        unsigned short keydata;
    }*replay_t, *LP_recdata;[/color]
 はい、大幅に減りました。
 あとはパッドかキーボードのどちらかで押されていれば keydataのビットを立てて
いきます。
 
[color=#d0d0ff" face="monospace]    keydata = 0;
    if(leftが押されている) keydat |= (1 << 0);
    if(upが押されている)   keydat |= (1 << 1);
    if(rightが押されている) keydat |= (1 << 2);
    if(downが押されている) keydat |= (1 << 3);
    ....
[/color]
 
 で、これを保存して、読み出すときは反対に
[color=#d0d0ff" face="monospace]    if(keydata & (1 << 0))  leftが押されている
    if(keydata & (1 << 1))  upが押されている
    if(keydata & (1 << 2))  rightが押されている
    if(keydata & (1 << 3))  downが押されている
[/color]
 
 としていきます。

 
 さて、ここで。
 startボタンは保存する必要あるのでしょうか?
 多分 startボタンはメニューとかポーズ表示になると思うのですが、
これが行われたときも忠実にリプレイするならともかく、そうでないとしたら
保存する必要は無くなるので 9ビットではなく 8ビットで済み、unsigned shortではなく、
unsigned charで事足りることになります。
[color=#d0d0ff" face="monospace]typedef struct{
    unsigned char keydata;//キー記録用
}*replay_t, *LP_recdata;
[/color]
 とさらに半分になりますね。


 と、ざっくりとこんなかんじです。が、どうでしょうか?

k

Re:龍神録プログラミングの館にリプレイをつける

#27

投稿記事 by k » 15年前

arrayさん
Justyさん
ありがとうございます。
これでファイルをかなり小さく出来そうです。

入力状態を全て保存しなきゃならない、
という思い込みがあったみたいです。


乱数は今のところ、
SRand(0);
とかにして、どんな場合でも固定しています。

乱数を再現したい時は、乱数の種もファイルに保存して、
再生時に読み込んで再現するようにすればいいのかな、と思っています。


はじめの投稿のコードにちょっと間違いがあったので訂正しておきます。
typedef struct{

	int paddata;//パッド記録用

	char keydata[256];//キー記録用

}replay_t, *LP_recdata;

array

Re:龍神録プログラミングの館にリプレイをつける

#28

投稿記事 by array » 15年前

>Justyさん

あまりにも凄い回答だったので驚いてました。
私も参考にさせてもらいます^^

管理人

Re:龍神録プログラミングの館にリプレイをつける

#29

投稿記事 by 管理人 » 15年前

更に突っ込むと、リプレイを作ってみるとよくわかるのですが、
ほとんど記録されるデータは0なんですね。
ここまで龍神録では実装してないんですが・・
例えば
上キー
下キー
左キー
右キー
ショットキー
・・・
色々ありますが、
常にコレ全部おさえるわけは無く、
ボムボタンなんて一度も押されないかもしれません。
ず~~っと0ばかり連続するのはもったいないので、データを圧縮すると更に小さくなると思います。
http://homepage2.nifty.com/natupaji/DxL ... press.html

そこまで小さくする必要があるのかということになるかもしれませんが、
大きなゲームになってプレイヤー同士でリプレイデータを交換したりしてもらえるようになると
やはりリプレイデータは小さいに越した事は無いと思います。

ただしリプレイデータって本当にデリケートといいますか、
どこか少しでも計算式などを間違えたりすると全く違うデータになってしまいます。
ボムボタンが押されたデータ一つ抜けてもそれ以降のゲームは全く違うものになってしまいます。
また、秒間60フレームで沢山のキーデータをしかもビット単位でほぞんするので、
バイナリデータ見てもわけがわかりません。
なので最初からリプレイデータをいじくるとうまく再生されなかったとき、
一体何処がわるいのかわけがわからなくなる可能性があるかもしれないので、
少しずつ作っていくのがいい・・・ということを身を持って知りました・・ので何か参考になれば^^;

Justy

Re:龍神録プログラミングの館にリプレイをつける

#30

投稿記事 by Justy » 15年前


arrayさん
>あまりにも凄い回答だったので驚いてました。

 いやいやいや、そんな凄いことではないです(;^_^
 凄い人はもっと凄いことをしているはずです。



管理人さん
>ず~~っと0ばかり連続するのはもったいないので、データを圧縮すると更に小さくなると思います。

 ですね。
 ファイル保存時は既存の圧縮技術を使いやいところなので、zlibとかを使えば相当縮められますね。


 0ばかり続く、ということですが、これを利用して記録時にさらにデータを
縮められそうです。
 
 ゲームのボタンの場合、1/60などの細かい単位でみると多くは0、というより
前の値と同じ値が続くことが多いです。

 というか、1フレームごとに異なるボタンを押すことが非常に難しい。
 激しいシューティングでも平均すれば1秒間に10回も押下情報が変化するか
どうかってところではないでしょうか。

 であれば、前のフレームの押下情報と比較して変化があったら、
前回記録したフレームとの差の情報とキーの情報を記録します。
 これで、変化があったときだけ記録する形になりますので大分データが小さくなります。

 ついでに前回の記録したフレームとの差の情報は 256フレーム以上変化がなかったら、
強制的に記録をとるようにすれば、unsigned charでいけるので、
1回の記録容量は2バイトで済みますね。

 ここまでする必要があるかどうかは、ゲーム次第ですけど・・・。



>どこか少しでも計算式などを間違えたりすると全く違うデータになってしまいます。

 たしかに。
 初期の段階から、それを念頭においた設計が必要ですよね。
 一番嫌なのが、非同期ものの処理があったりすることで、個別にちょっと工夫が
必要になったり・・・。

管理人

Re:龍神録プログラミングの館にリプレイをつける

#31

投稿記事 by 管理人 » 15年前

なるほど~、毎回キーの入力状態を保存するんじゃなく、
キーの入力状態の変化を保存するわけですね。
基本的にショットボタンなんて押しっぱなし固定ですし、
上下左右移動もホントに1秒に何度押すかと考えたらそんなに無いですね。
これはかなりデータが少なく出来そうです。
これは是非龍神録2に実装させていただきたい・・w

管理人

Re:龍神録プログラミングの館にリプレイをつける

#32

投稿記事 by 管理人 » 15年前

>非同期ものの処理があったりすることで

例えばストップボタンを途中で押したとして、リプレイにストップボタンを記録していなかった場合、
その間動いていた背景に乱数などが使われていたような場合でしょうか?
このような必要がある時は、個別の自作乱数などを作った方がよさそうですね。
リプレイ系はホントに初期化や乱数系がバグの元になって大変でした・・。

Justy

Re:龍神録プログラミングの館にリプレイをつける

#33

投稿記事 by Justy » 15年前


>基本的にショットボタンなんて押しっぱなし固定ですし、
>上下左右移動もホントに1秒に何度押すかと考えたらそんなに無いですね。
>これはかなりデータが少なく出来そうです。

 この方式なら1時間くらい記録しても 100KBにも満たないですよね、きっと。



>例えばストップボタンを途中で押したとして、リプレイにストップボタンを記録していなかった場合、
>その間動いていた背景に乱数などが使われていたような場合でしょうか?

 それはそれで問題ですが、ここでいう非同期というのは
ファイルロードやネットワーク、スレッドが絡んでくるような場合です。

 リプレイでネットワーク、というのはまずなさそうですが、
ゲームをしている裏でファイルロードなどを行い、読み込みが終わった時点で
表示などの動作を行うような類のもの・・・STGとかですと、ボスの出現前に
小康状態になって裏でロードをしそれが終わり次第ボス出現、となるようなケースです。

 読み込み終わるのは状況によって変わってくるので、読み込みが終わったタイミングを
リプレイ記録の中に残しておかなければならないわけです。

 激しく面倒ですね。

管理人

Re:龍神録プログラミングの館にリプレイをつける

#34

投稿記事 by 管理人 » 15年前

なるほど、ただ手間の見返りも大きいですね。
なんかこちらが勉強になりましたm(_ _)m

lbfuvab

Re:龍神録プログラミングの館にリプレイをつける

#35

投稿記事 by lbfuvab » 15年前

そう言えばリプレイでFPSを保存する必要はないのでしょうか?
プレイ時に処理落ちして40fpsで120フレーム動いた物を60fpsで再生すると1秒ずれますが・・・

array

Re:龍神録プログラミングの館にリプレイをつける

#36

投稿記事 by array » 15年前

> そう言えばリプレイでFPSを保存する必要はないのでしょうか?
フレーム毎に入力データを保存してると思うので、多分 実行時(記憶時・再生時)の処理速度はあまり気にしなくてもいいと思います。

管理人

Re:龍神録プログラミングの館にリプレイをつける

#37

投稿記事 by 管理人 » 15年前

arrayさんの仰るとおり時間による制御をしていないので、fpsを気にする必要がないのです。
そういう意味ではオンラインアクションゲームなんかのりプレイデータは作るのが大変そうですね^^;

閉鎖

“C言語何でも質問掲示板” へ戻る