愛用のテキストエディタ
愛用のテキストエディタ
雑談です。
過去ログをざっと調べて無さそうだったので。
皆さんはどんなテキストエディタを使ってプログラムを書いていますか?
私はWindowsでVC++とC++Builderの両方を用途によって使いわけて作業してるんですが、
大体いつもIDEのままのエディタに書き込んでコードを書いてます。
これでもなんとか作業はできていたんですが、
たまにもっと効率よくコード書けないものかと思うことが最近多くなりました。(特にBuilderは…げふん
これを機に自分にとって最適なエディタを探してみようかなと思っています。
現時点で知ってるのは秀丸くらいですが、個人的に秀丸はそんなに使いやすくないかもしれない…。
これから現存するテキストエディタに順番に触れていく予定ですが、
皆さんが日々どのエディタを使用しているのか聞いてみたくなりました。
よろしければ愛用のエディタの名前と、それに対する熱い想いなんかが聞ければ嬉しいです。
シェアウェアでもフリーウェアでもOKです。
過去ログをざっと調べて無さそうだったので。
皆さんはどんなテキストエディタを使ってプログラムを書いていますか?
私はWindowsでVC++とC++Builderの両方を用途によって使いわけて作業してるんですが、
大体いつもIDEのままのエディタに書き込んでコードを書いてます。
これでもなんとか作業はできていたんですが、
たまにもっと効率よくコード書けないものかと思うことが最近多くなりました。(特にBuilderは…げふん
これを機に自分にとって最適なエディタを探してみようかなと思っています。
現時点で知ってるのは秀丸くらいですが、個人的に秀丸はそんなに使いやすくないかもしれない…。
これから現存するテキストエディタに順番に触れていく予定ですが、
皆さんが日々どのエディタを使用しているのか聞いてみたくなりました。
よろしければ愛用のエディタの名前と、それに対する熱い想いなんかが聞ければ嬉しいです。
シェアウェアでもフリーウェアでもOKです。
Re:愛用のテキストエディタ
>皆さんはどんなテキストエディタを使ってプログラムを書いていますか?
昔は Edtexというエディタを使っていましたが、今は EmEditorを使っています。
さすがにそのままでは、まだまだ使い勝手が悪いので自作・多作のプラグイン・マクロを
多数入れてショートカットを割り当ててますが。
EmEditorに限ったことではないですが、足りない機能があれば
マクロ書くなりプラグイン書くなりで対応できるエディタはお薦めです。
VisualStudioのエディタは何年か前まで非 Windows向けの仕事が多くて
VSを使うことがあまりなかったことと、ちょっと癖があって
使いづらい面があるということで C/C++の場合はコンパイルしてエラーや警告が
出たときの修正とかデバッグ中くらいにしか使っていません。
(Refactor! Proとか入れたらまた変わってくるかも)
ところが VSの補完が強力な C#となるとなかなかそうもいかなくて、
VSでざっくりコードを書いて、ソースの整形などを EmEditorで行うという流れに
なっています。
ま、そんな感じで適当に使い分けてます。
Re:愛用のテキストエディタ
「C言語を始めよう」を使ってます。
バージョン1.1.1.4~1.1.1.9を気分によって使い分けますね。
まぁ私はオートインデントだけしてくれれば満足なんですが。
このIDEはソースファイル単位でコンパイルできるので、結構小回りが利きます。
というかバージョン1.1.1.xではプロジェクトを扱えないんですよね。
バージョン1.1.1.4~1.1.1.9を気分によって使い分けますね。
まぁ私はオートインデントだけしてくれれば満足なんですが。
このIDEはソースファイル単位でコンパイルできるので、結構小回りが利きます。
というかバージョン1.1.1.xではプロジェクトを扱えないんですよね。
Re:愛用のテキストエディタ
私は会社でJmEdit2を使用しています。
起動時の軽さには少々負けますが、
オートインデント、フリーカーソル、矩形選択などがあり、(GERP検索も有りますね)
さらにソースブラウザ機能(別途ソフトが必要ですが)があるので、
(VisualStudioでいう「クラスビュー」)
これは結構扱いやすいです。
ただ、選択範囲のバグがあるのが玉に傷です^^;
(シフト押しながらカーソルの前方向でクリックするとうまく選択されないというもの)
開発が終了しているらしいので、それだけが悔やむ。
ソースを公開しているようなので、直せるかなとはおもいますけど。
バグが嫌ならTeraPadがいいと思いますね。
notepad++もいいのですが、会社の環境では相性が悪いので、使ってません。
起動時の軽さには少々負けますが、
オートインデント、フリーカーソル、矩形選択などがあり、(GERP検索も有りますね)
さらにソースブラウザ機能(別途ソフトが必要ですが)があるので、
(VisualStudioでいう「クラスビュー」)
これは結構扱いやすいです。
ただ、選択範囲のバグがあるのが玉に傷です^^;
(シフト押しながらカーソルの前方向でクリックするとうまく選択されないというもの)
開発が終了しているらしいので、それだけが悔やむ。
ソースを公開しているようなので、直せるかなとはおもいますけど。
バグが嫌ならTeraPadがいいと思いますね。
notepad++もいいのですが、会社の環境では相性が悪いので、使ってません。
Re:愛用のテキストエディタ
特にエディタの種類の話じゃないんですが、
VisualStudioの画面を長時間見てると疲れるので、
ツール>オプションの「フォントと色」で自由に色の配色が決めれるので
こんな風に暗くしてみると、目が疲れなくていいっすよ。
明るい画面を見続けると、目だけじゃなく、脳の体内リズムも壊すそうですから、
また、暗い文字を見ると目が悪くなると言うのは都市伝説らしいですから
結構オススメかもしれません。
まぁKEVはこれ以上目が悪くなるとか言う度合いを超えている気もするけど^^;
VisualStudioの画面を長時間見てると疲れるので、
ツール>オプションの「フォントと色」で自由に色の配色が決めれるので
こんな風に暗くしてみると、目が疲れなくていいっすよ。
明るい画面を見続けると、目だけじゃなく、脳の体内リズムも壊すそうですから、
また、暗い文字を見ると目が悪くなると言うのは都市伝説らしいですから
結構オススメかもしれません。
まぁKEVはこれ以上目が悪くなるとか言う度合いを超えている気もするけど^^;
Re:愛用のテキストエディタ
メインはアドインとマクロでカスタマイズしたVSです。
アドインは新しいVSのバージョンが出るたびにいじってるので面倒ですが^^;
補助ではxyzzyです。
管理人さん
背景色を黒にすると確かに落ち着きますね。
でも・・・他のウィンドウとのコントラストの差が激しくありません??
ウィンドウズ自体の背景色を変えたほうが目に優しそうだけど。。
アドインは新しいVSのバージョンが出るたびにいじってるので面倒ですが^^;
補助ではxyzzyです。
管理人さん
背景色を黒にすると確かに落ち着きますね。
でも・・・他のウィンドウとのコントラストの差が激しくありません??
ウィンドウズ自体の背景色を変えたほうが目に優しそうだけど。。
Re:愛用のテキストエディタ
一時期、背景を黒、文字を緑のマトリックス仕様にしていましたが、なんとなく落ち着かないので、結局戻しました(笑)
今は、ディスプレイ自体の明るさを一番暗い状態で使用しています。
あ、テキストエディタはコーディングにはVisualStudioをそのまま使ってますが、文書の作成にはEmEditorを使いますね。
今は、ディスプレイ自体の明るさを一番暗い状態で使用しています。
あ、テキストエディタはコーディングにはVisualStudioをそのまま使ってますが、文書の作成にはEmEditorを使いますね。
Re:愛用のテキストエディタ
ぜんっぜん知りませんでした^^;背景とか色を変えることができるのですか!?
自分も長時間やっているとたまに文字との焦点が合わず
しばらく休憩を取らないといけないなんてよくあります。
あとやはりディスプレイの明るさは下げたほうが目に優しいですかね。
今度からはJustyさんのおっしゃる少し灰色っぽい白にしてやろうと思います。
自分も長時間やっているとたまに文字との焦点が合わず
しばらく休憩を取らないといけないなんてよくあります。
あとやはりディスプレイの明るさは下げたほうが目に優しいですかね。
今度からはJustyさんのおっしゃる少し灰色っぽい白にしてやろうと思います。
Re:愛用のテキストエディタ
私は昔からMIFES使いです。
飛びぬけて何かがすごいってわけじゃないんですけど、エディタに必要な機能は抜けなく
一通りそろっていて、デザインがシンプルで自分好みのカスタマイズができるためずっと
使っています。
会社の経費で買ってるから自分の懐は痛まないですが、(学生さんだと)個人で買うとする
とちょっと高いかも(^^;
飛びぬけて何かがすごいってわけじゃないんですけど、エディタに必要な機能は抜けなく
一通りそろっていて、デザインがシンプルで自分好みのカスタマイズができるためずっと
使っています。
会社の経費で買ってるから自分の懐は痛まないですが、(学生さんだと)個人で買うとする
とちょっと高いかも(^^;
Re:愛用のテキストエディタ
サクラエディタ。
検索の際に該当する文字列がハイライトするのが良いかな。
grepも使いやすく関数の定義や使われている場所等を簡単に探せたりできる。
検索の際に該当する文字列がハイライトするのが良いかな。
grepも使いやすく関数の定義や使われている場所等を簡単に探せたりできる。
Re:愛用のテキストエディタ
背景色とかいじりだすと1時間位設定が終わらないですよね~w
「黒」を基調にしようとすると、背景と文字の明るさを逆にしないといけなくなりますけど、
各ソフトのウィンドウの背景の色はかわれど、文字の色が変わらなかったりして
背景黒にしたのに、あるアプリの文字の色は黒から変えれないみたいなことが起きて大変なんですよね~;
そこで色々試行錯誤しているうちに「薄い深緑(矛盾;)」にたどり着きました。
こんな感じです。
背景が黒でも白でも見える色で、一番抵抗が無い色は自分的にはこの色でした。
昔はwindows blindsとかでコテっこてにいろいろいじりたおしていましたが、
結局こういう配色トラブルがたえなかったので、元に戻して自分で色設定してます。
まぁ結局見易い配色はデフォルトですよねぇ^^;
>ま~くさん
最初はそれで結構戸惑いましたw
>kazuoniさん
XPならデスクトップ右クリック>プロパティで画面のプロパティ開いて「デザイン」タブから色々設定出来ますよ。
後windows blindsとか使うと、世界中の人が作った無数のスキンをただで使えたりします。
もしwindowsの見た目カスタマイズしたことなかったらこういうの使うと面白いですよ。
http://desta.jp/category_list.php?page= ... 5&sort=new
「黒」を基調にしようとすると、背景と文字の明るさを逆にしないといけなくなりますけど、
各ソフトのウィンドウの背景の色はかわれど、文字の色が変わらなかったりして
背景黒にしたのに、あるアプリの文字の色は黒から変えれないみたいなことが起きて大変なんですよね~;
そこで色々試行錯誤しているうちに「薄い深緑(矛盾;)」にたどり着きました。
こんな感じです。
背景が黒でも白でも見える色で、一番抵抗が無い色は自分的にはこの色でした。
昔はwindows blindsとかでコテっこてにいろいろいじりたおしていましたが、
結局こういう配色トラブルがたえなかったので、元に戻して自分で色設定してます。
まぁ結局見易い配色はデフォルトですよねぇ^^;
>ま~くさん
最初はそれで結構戸惑いましたw
>kazuoniさん
XPならデスクトップ右クリック>プロパティで画面のプロパティ開いて「デザイン」タブから色々設定出来ますよ。
後windows blindsとか使うと、世界中の人が作った無数のスキンをただで使えたりします。
もしwindowsの見た目カスタマイズしたことなかったらこういうの使うと面白いですよ。
http://desta.jp/category_list.php?page= ... 5&sort=new
Re:愛用のテキストエディタ
C/C++ : VS or BCC Developer
Java : サクラエディタ or Net Beans
Fortran: サクラエディタ or Developer Studio
Haskell: サクラエディタ
以前授業でnotepad以外で書くなということだったので、それ以来エディタには
こだわりありません。
ただ、色や自動インデントなどの入力補助はなくていいから、全角空白と半角空白、タブは
見た目で区別できることと、行数を数える機能だけは欲しいです。
notepadを使ってそれだけはひしひしと感じました。
Java : サクラエディタ or Net Beans
Fortran: サクラエディタ or Developer Studio
Haskell: サクラエディタ
以前授業でnotepad以外で書くなということだったので、それ以来エディタには
こだわりありません。
ただ、色や自動インデントなどの入力補助はなくていいから、全角空白と半角空白、タブは
見た目で区別できることと、行数を数える機能だけは欲しいです。
notepadを使ってそれだけはひしひしと感じました。
Re:愛用のテキストエディタ
皆さん、こんなに多くの貴重な話をありがとうございます!
人によって多種多様ですねぇ…。
>Justyさん
EmEditorですか~。なるほど。
私も拡張機能はほしいと思っています。
まずはフリー版で試してみようかな。
>ibisさん
おお、「C言語を始めよう!」シンプルでいいですね。
今回おそらくIDEを変えることはないと思うのですが、
サブPCあたりにインストしてもいいかなと思いました。
>たかぎさん
3つ?以上のエディタを使いこなしている時点で
ある意味こだわりを持っていると見受けられます。
>lbfuvabさん
TeraPadを今触ってみましたがシンプルですね。
軽さってのは考えてませんでした。
参考になります。
>御津凪さん
JmEdit2開発終了してるのですか。
けどスクリーンショット見る感じだと見た目は好みかも。
触ってみますー。
>管理人
つまりVisualStudio大好きってことだよねアナタはw
エディタを黒くするのは秀丸で一度やったんだけど、
ブラウザ開くと大抵白い画面が出るし、差がきつかったのでやめてしまった。
カッコいいとは思うんだけどね。
>雷さん
真魚[まな] これかな?
こんなのもあるんですねぇ。初耳です。
是非試し切りしてみます。
>ま~くさん
VSはカスタマイズしたらもっと良くなるんですね。
あまり触ったことなかったからな…。
xyzzyかーなるほどなるほど。
>バグさん
文字を緑にしたら全部コメントに見えそうです…!
コーディングはほぼVSなんですね。
>kazuoniさん
毎日目にするであろうテキストエディタだから、
自分に最適のソフトや設定を探す時間はたっぷりかけてもいいと思っています。
色々と一緒にいじってみましょう!
あ、けど休憩は大事ですよ。
>Mistさん
MIFESかーこんなのもあるんだなぁ…。
大企業が統一して使用する高品質エディタって感じがします。
さすがに高くて手が出せないけど、インストしてるのを見かけたら触ってみます。
>たいちうさん
サクラエディタですかー。
検索機能が充実してるんですね。
紹介を読んでも利点がすぐにつかめなかったりするしこういう意見はかなり有難いです。
---------------
個人的な感想
なんだかんだで皆さんVisualStudioのエディタを使ってるんですねぇ。
IDEのエディタ+補助用のエディタという使い方で検討してみることにします。
ていうかエディタの種類多すぎだよ!
人によって多種多様ですねぇ…。
>Justyさん
EmEditorですか~。なるほど。
私も拡張機能はほしいと思っています。
まずはフリー版で試してみようかな。
>ibisさん
おお、「C言語を始めよう!」シンプルでいいですね。
今回おそらくIDEを変えることはないと思うのですが、
サブPCあたりにインストしてもいいかなと思いました。
>たかぎさん
3つ?以上のエディタを使いこなしている時点で
ある意味こだわりを持っていると見受けられます。
>lbfuvabさん
TeraPadを今触ってみましたがシンプルですね。
軽さってのは考えてませんでした。
参考になります。
>御津凪さん
JmEdit2開発終了してるのですか。
けどスクリーンショット見る感じだと見た目は好みかも。
触ってみますー。
>管理人
つまりVisualStudio大好きってことだよねアナタはw
エディタを黒くするのは秀丸で一度やったんだけど、
ブラウザ開くと大抵白い画面が出るし、差がきつかったのでやめてしまった。
カッコいいとは思うんだけどね。
>雷さん
真魚[まな] これかな?
こんなのもあるんですねぇ。初耳です。
是非試し切りしてみます。
>ま~くさん
VSはカスタマイズしたらもっと良くなるんですね。
あまり触ったことなかったからな…。
xyzzyかーなるほどなるほど。
>バグさん
文字を緑にしたら全部コメントに見えそうです…!
コーディングはほぼVSなんですね。
>kazuoniさん
毎日目にするであろうテキストエディタだから、
自分に最適のソフトや設定を探す時間はたっぷりかけてもいいと思っています。
色々と一緒にいじってみましょう!
あ、けど休憩は大事ですよ。
>Mistさん
MIFESかーこんなのもあるんだなぁ…。
大企業が統一して使用する高品質エディタって感じがします。
さすがに高くて手が出せないけど、インストしてるのを見かけたら触ってみます。
>たいちうさん
サクラエディタですかー。
検索機能が充実してるんですね。
紹介を読んでも利点がすぐにつかめなかったりするしこういう意見はかなり有難いです。
---------------
個人的な感想
なんだかんだで皆さんVisualStudioのエディタを使ってるんですねぇ。
IDEのエディタ+補助用のエディタという使い方で検討してみることにします。
ていうかエディタの種類多すぎだよ!
Re:愛用のテキストエディタ
私は、
通常時:TeraPad
プログラミング時:BCC Dev
HTML類:Cresent Eve
を使わせていただいています。
TearPadは非常に軽いので。
Cresent Eveは軽いし、打ち込みには本当に便利です。
タグ予測が素晴らしい力を発揮します。
おすすめですよ~
通常時:TeraPad
プログラミング時:BCC Dev
HTML類:Cresent Eve
を使わせていただいています。
TearPadは非常に軽いので。
Cresent Eveは軽いし、打ち込みには本当に便利です。
タグ予測が素晴らしい力を発揮します。
おすすめですよ~
Re:愛用のテキストエディタ
あ、質問にそれてました。。
自分はVC++のみで頑張ってます^^;
自分からしたら使い分ける必要性が全く分からないです^^;
レポートはwordですけどww
いろいろ見てみようかなと思ってますが、なんとなく途中であきらめてしまいそうなw
>管理人さん
スキンの変え方はソフトを通さないとできないんでしょうか?
windows Blindsってソフトは有料の物しか見当たらないんですが・・・^^;?
あとvistaなんですが・・・?
自分はVC++のみで頑張ってます^^;
自分からしたら使い分ける必要性が全く分からないです^^;
レポートはwordですけどww
いろいろ見てみようかなと思ってますが、なんとなく途中であきらめてしまいそうなw
>管理人さん
スキンの変え方はソフトを通さないとできないんでしょうか?
windows Blindsってソフトは有料の物しか見当たらないんですが・・・^^;?
あとvistaなんですが・・・?
Re:愛用のテキストエディタ
スキンの変更はソフトを通さないと出来ないです。
一応フリー版ありますが、vistaですか・・。
多分vista対応のwindows blindsは無いのでは;
http://www.google.co.jp/search?hl=ja&q= ... +vista&lr=
この辺でおもしろそうなのを見つけてくるとかしか思いつかないです;
配色の変更はwindows標準の機能でもある程度出来ると思いますよb
一応フリー版ありますが、vistaですか・・。
多分vista対応のwindows blindsは無いのでは;
http://www.google.co.jp/search?hl=ja&q= ... +vista&lr=
この辺でおもしろそうなのを見つけてくるとかしか思いつかないです;
配色の変更はwindows標準の機能でもある程度出来ると思いますよb
龍神録プログラミングの館にリプレイをつける
龍神録プログラミングの館で勉強しています。
現在、龍神録プログラミングの館やDXライブラリ置き場のサンプルコードを見ながら
リプレイについて試行錯誤しています。
リプレイの記録/再生自体はある程度うまく行ったのですが、
リプレイファイルのサイズが予想外に大きくなってしまい、
何かアイデアが無いかと思い、質問させていただくことにしました。
以下のようにリプレイを記録/再生しています。
リプレイ用の構造体と、保存したフレーム数を記録する変数を用意しています。
リプレイ記録時は
malloc関数でrecdataの領域を(かなり多めに)確保しています。
メインループの中で、パッドとキーの状態を記録する関数を呼びます
変数 RecFrame
と
構造体 recdata
とを順に保存しています。
以下は再生時の処理です。
リプレイ再生開始時は保存したファイルを読み込みます。
以下再生中の処理です
龍神録プログラミングの館8章の
GetHitPadStateAll()にリプレイ再生時の場合を追加しています。
以上、実際のコードとは変数名などこれとは異なる部分もあるのですが、このような感じです。
実際には9個しかキーは判定しないのに、
char keydata[256]と256個も配列を用意しているのが無駄なような気がするのですが、
どうすれば小さくできるか検討がつきません。
他にも何か気になるところや方法がありましたらお教えいただきたいと思います。
よろしくお願いします。
現在、龍神録プログラミングの館や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個も配列を用意しているのが無駄なような気がするのですが、
どうすれば小さくできるか検討がつきません。
他にも何か気になるところや方法がありましたらお教えいただきたいと思います。
よろしくお願いします。
Re:龍神録プログラミングの館にリプレイをつける
私も以前、リプレイに挑戦してみたのですが試行錯誤しながら作ったので詳しくは理解できてないです・・・
プログラムは詳しくは見てないのですが気になった点があったので
> 何かアイデアが無いかと思い、質問させていただくことにしました。
とのことなので、自機のみのリプレイならDXライブラリのリプレイサンプルを応用するのが一番軽いんじゃないでしょうか。
見た感じ多分参考にしているんですかね。
本題
keydata[256]←に関してですが、必要なかったと思います。(なくても動作するはずです)
そんな感じで実現したファイルは200KBも超えてないファイルなのですが、サイズ大きいですかね。
ただ、私のは入力情報を再生してるだけなので敵の弾幕にランダム関数が使われてたら、誤動作するんですけどねw
・・・なので、とりあえず
keydata[256] これを消してみてはどうでしょうか。
プログラムは詳しくは見てないのですが気になった点があったので
> 何かアイデアが無いかと思い、質問させていただくことにしました。
とのことなので、自機のみのリプレイならDXライブラリのリプレイサンプルを応用するのが一番軽いんじゃないでしょうか。
見た感じ多分参考にしているんですかね。
本題
keydata[256]←に関してですが、必要なかったと思います。(なくても動作するはずです)
そんな感じで実現したファイルは200KBも超えてないファイルなのですが、サイズ大きいですかね。
ただ、私のは入力情報を再生してるだけなので敵の弾幕にランダム関数が使われてたら、誤動作するんですけどねw
・・・なので、とりあえず
keydata[256] これを消してみてはどうでしょうか。
Re:龍神録プログラミングの館にリプレイをつける
>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]
とさらに半分になりますね。と、ざっくりとこんなかんじです。が、どうでしょうか?
Re:龍神録プログラミングの館にリプレイをつける
arrayさん
Justyさん
ありがとうございます。
これでファイルをかなり小さく出来そうです。
入力状態を全て保存しなきゃならない、
という思い込みがあったみたいです。
乱数は今のところ、
SRand(0);
とかにして、どんな場合でも固定しています。
乱数を再現したい時は、乱数の種もファイルに保存して、
再生時に読み込んで再現するようにすればいいのかな、と思っています。
はじめの投稿のコードにちょっと間違いがあったので訂正しておきます。
Justyさん
ありがとうございます。
これでファイルをかなり小さく出来そうです。
入力状態を全て保存しなきゃならない、
という思い込みがあったみたいです。
乱数は今のところ、
SRand(0);
とかにして、どんな場合でも固定しています。
乱数を再現したい時は、乱数の種もファイルに保存して、
再生時に読み込んで再現するようにすればいいのかな、と思っています。
はじめの投稿のコードにちょっと間違いがあったので訂正しておきます。
typedef struct{
int paddata;//パッド記録用
char keydata[256];//キー記録用
}replay_t, *LP_recdata;
Re:龍神録プログラミングの館にリプレイをつける
更に突っ込むと、リプレイを作ってみるとよくわかるのですが、
ほとんど記録されるデータは0なんですね。
ここまで龍神録では実装してないんですが・・
例えば
上キー
下キー
左キー
右キー
ショットキー
・・・
色々ありますが、
常にコレ全部おさえるわけは無く、
ボムボタンなんて一度も押されないかもしれません。
ず~~っと0ばかり連続するのはもったいないので、データを圧縮すると更に小さくなると思います。
http://homepage2.nifty.com/natupaji/DxL ... press.html
そこまで小さくする必要があるのかということになるかもしれませんが、
大きなゲームになってプレイヤー同士でリプレイデータを交換したりしてもらえるようになると
やはりリプレイデータは小さいに越した事は無いと思います。
ただしリプレイデータって本当にデリケートといいますか、
どこか少しでも計算式などを間違えたりすると全く違うデータになってしまいます。
ボムボタンが押されたデータ一つ抜けてもそれ以降のゲームは全く違うものになってしまいます。
また、秒間60フレームで沢山のキーデータをしかもビット単位でほぞんするので、
バイナリデータ見てもわけがわかりません。
なので最初からリプレイデータをいじくるとうまく再生されなかったとき、
一体何処がわるいのかわけがわからなくなる可能性があるかもしれないので、
少しずつ作っていくのがいい・・・ということを身を持って知りました・・ので何か参考になれば^^;
ほとんど記録されるデータは0なんですね。
ここまで龍神録では実装してないんですが・・
例えば
上キー
下キー
左キー
右キー
ショットキー
・・・
色々ありますが、
常にコレ全部おさえるわけは無く、
ボムボタンなんて一度も押されないかもしれません。
ず~~っと0ばかり連続するのはもったいないので、データを圧縮すると更に小さくなると思います。
http://homepage2.nifty.com/natupaji/DxL ... press.html
そこまで小さくする必要があるのかということになるかもしれませんが、
大きなゲームになってプレイヤー同士でリプレイデータを交換したりしてもらえるようになると
やはりリプレイデータは小さいに越した事は無いと思います。
ただしリプレイデータって本当にデリケートといいますか、
どこか少しでも計算式などを間違えたりすると全く違うデータになってしまいます。
ボムボタンが押されたデータ一つ抜けてもそれ以降のゲームは全く違うものになってしまいます。
また、秒間60フレームで沢山のキーデータをしかもビット単位でほぞんするので、
バイナリデータ見てもわけがわかりません。
なので最初からリプレイデータをいじくるとうまく再生されなかったとき、
一体何処がわるいのかわけがわからなくなる可能性があるかもしれないので、
少しずつ作っていくのがいい・・・ということを身を持って知りました・・ので何か参考になれば^^;
Re:龍神録プログラミングの館にリプレイをつける
arrayさん
>あまりにも凄い回答だったので驚いてました。
いやいやいや、そんな凄いことではないです(;^_^
凄い人はもっと凄いことをしているはずです。
管理人さん
>ず~~っと0ばかり連続するのはもったいないので、データを圧縮すると更に小さくなると思います。
ですね。
ファイル保存時は既存の圧縮技術を使いやいところなので、zlibとかを使えば相当縮められますね。
0ばかり続く、ということですが、これを利用して記録時にさらにデータを
縮められそうです。
ゲームのボタンの場合、1/60などの細かい単位でみると多くは0、というより
前の値と同じ値が続くことが多いです。
というか、1フレームごとに異なるボタンを押すことが非常に難しい。
激しいシューティングでも平均すれば1秒間に10回も押下情報が変化するか
どうかってところではないでしょうか。
であれば、前のフレームの押下情報と比較して変化があったら、
前回記録したフレームとの差の情報とキーの情報を記録します。
これで、変化があったときだけ記録する形になりますので大分データが小さくなります。
ついでに前回の記録したフレームとの差の情報は 256フレーム以上変化がなかったら、
強制的に記録をとるようにすれば、unsigned charでいけるので、
1回の記録容量は2バイトで済みますね。
ここまでする必要があるかどうかは、ゲーム次第ですけど・・・。
>どこか少しでも計算式などを間違えたりすると全く違うデータになってしまいます。
たしかに。
初期の段階から、それを念頭においた設計が必要ですよね。
一番嫌なのが、非同期ものの処理があったりすることで、個別にちょっと工夫が
必要になったり・・・。
Re:龍神録プログラミングの館にリプレイをつける
なるほど~、毎回キーの入力状態を保存するんじゃなく、
キーの入力状態の変化を保存するわけですね。
基本的にショットボタンなんて押しっぱなし固定ですし、
上下左右移動もホントに1秒に何度押すかと考えたらそんなに無いですね。
これはかなりデータが少なく出来そうです。
これは是非龍神録2に実装させていただきたい・・w
キーの入力状態の変化を保存するわけですね。
基本的にショットボタンなんて押しっぱなし固定ですし、
上下左右移動もホントに1秒に何度押すかと考えたらそんなに無いですね。
これはかなりデータが少なく出来そうです。
これは是非龍神録2に実装させていただきたい・・w
Re:龍神録プログラミングの館にリプレイをつける
>非同期ものの処理があったりすることで
例えばストップボタンを途中で押したとして、リプレイにストップボタンを記録していなかった場合、
その間動いていた背景に乱数などが使われていたような場合でしょうか?
このような必要がある時は、個別の自作乱数などを作った方がよさそうですね。
リプレイ系はホントに初期化や乱数系がバグの元になって大変でした・・。
例えばストップボタンを途中で押したとして、リプレイにストップボタンを記録していなかった場合、
その間動いていた背景に乱数などが使われていたような場合でしょうか?
このような必要がある時は、個別の自作乱数などを作った方がよさそうですね。
リプレイ系はホントに初期化や乱数系がバグの元になって大変でした・・。
Re:龍神録プログラミングの館にリプレイをつける
>基本的にショットボタンなんて押しっぱなし固定ですし、
>上下左右移動もホントに1秒に何度押すかと考えたらそんなに無いですね。
>これはかなりデータが少なく出来そうです。
この方式なら1時間くらい記録しても 100KBにも満たないですよね、きっと。
>例えばストップボタンを途中で押したとして、リプレイにストップボタンを記録していなかった場合、
>その間動いていた背景に乱数などが使われていたような場合でしょうか?
それはそれで問題ですが、ここでいう非同期というのは
ファイルロードやネットワーク、スレッドが絡んでくるような場合です。
リプレイでネットワーク、というのはまずなさそうですが、
ゲームをしている裏でファイルロードなどを行い、読み込みが終わった時点で
表示などの動作を行うような類のもの・・・STGとかですと、ボスの出現前に
小康状態になって裏でロードをしそれが終わり次第ボス出現、となるようなケースです。
読み込み終わるのは状況によって変わってくるので、読み込みが終わったタイミングを
リプレイ記録の中に残しておかなければならないわけです。
激しく面倒ですね。
Re:龍神録プログラミングの館にリプレイをつける
そう言えばリプレイでFPSを保存する必要はないのでしょうか?
プレイ時に処理落ちして40fpsで120フレーム動いた物を60fpsで再生すると1秒ずれますが・・・
プレイ時に処理落ちして40fpsで120フレーム動いた物を60fpsで再生すると1秒ずれますが・・・
Re:龍神録プログラミングの館にリプレイをつける
> そう言えばリプレイでFPSを保存する必要はないのでしょうか?
フレーム毎に入力データを保存してると思うので、多分 実行時(記憶時・再生時)の処理速度はあまり気にしなくてもいいと思います。
フレーム毎に入力データを保存してると思うので、多分 実行時(記憶時・再生時)の処理速度はあまり気にしなくてもいいと思います。
Re:龍神録プログラミングの館にリプレイをつける
arrayさんの仰るとおり時間による制御をしていないので、fpsを気にする必要がないのです。
そういう意味ではオンラインアクションゲームなんかのりプレイデータは作るのが大変そうですね^^;
そういう意味ではオンラインアクションゲームなんかのりプレイデータは作るのが大変そうですね^^;