[過去ログ] C# C# C♯ でゲームを作ろう Part2 (496レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
12: 2010/12/14(火)18:57 ID:u2vbGV0C(1/2) AAS
>>9 >>10
参考までに教えてほしいんだけど、例えばどんなときに邪魔になるの?
自分は邪魔になったことないので、興味がある。
13: 2010/12/14(火)21:03 ID:2ATBqPCF(1/2) AAS
Gamefest Japan 2008 Demo
でぐぐる

ちょっと改造して、噴飯物の杞憂に過ぎない事を確認する

以上
14
(1): 2010/12/14(火)21:17 ID:IN5+AAst(2/2) AAS
フレームレベルで処理を行ってるゲームで
わりと負荷のかかるGCが働くとコマ落ちやラグがおきやすい
特にシューティングやアクションなんかのリアルタイム性が重要なゲームだと邪魔になる。

RPGやノベルゲームなら多少コマ落ちしても気にならないだろうし
ちゃんとGCの動作まで考えてプログラミングすれば邪魔にはならないとは思うけど、
自分はそこまでするならC++でいいやってなった。
15: 2010/12/14(火)22:41 ID:u2vbGV0C(2/2) AAS
>>14
なるほど、回答さんくす。

ゲーム製作でC#が使われないのは、個人的には環境依存度が
C++と比較して大きいからだと思う。

.NET必須、かつXNAやSlimDX等でランタイムが必要で、
配布方法や対象者に制限が付くとなると嫌がる人も多いのでは。
16
(2): 2010/12/14(火)22:57 ID:2ATBqPCF(2/2) AAS
思いっきりアホなことして、毎フレームGC発生させたけど
うちじゃ3msぐらいで収まってるな

余所の環境だと違うだろうけど、ちょっとこれで試してみ
外部リンク[zip]:99hagelo.net46.net
ソリューションロードして、F5押して、画面が表示されたらEnterキーを一回
要PS1.1
17: 2010/12/14(火)23:31 ID:0rAUYZNK(1) AAS
>.NET必須
18: 2010/12/15(水)00:14 ID:ipHv9sbI(1) AAS
GCってそんなに働き者だっけ?
メモリが足りなくなったときしか働かないイメージがw
19
(1): 2010/12/15(水)00:27 ID:pQJTLtMM(1/2) AAS
2chてさ、適当な事書いとけば
オタ豚が真っ赤な顔して正しいことを調べ廻ってくれるから
スゲー 便利www
20
(1): 2010/12/15(水)01:47 ID:OOrbYoZ/(1) AAS
実力が身に付くのは調べまわった豚
21
(1): 2010/12/15(水)16:57 ID:znPdNwQj(1) AAS
調べまわった人より効率よく知識が入るという・・・

まぁそれはそれとして、GCの頻度は割とこまめ。
STGで大量に玉をnewで飛ばし続けてタスクマネージャで使用目盛り見たら、予想に反して増える気配がなかったのでかなりこまめにGCしてると思われる。
22
(1): 2010/12/15(水)17:54 ID:pQJTLtMM(2/2) AAS
GCの話ししてるのにモニタリングの仕方すら知らないとか
円周率=3ぐらい痛々しい
23
(1): 2010/12/15(水)17:59 ID:d+SueuXU(1) AAS
C#でできるアプリは大雑把にわけて4種類。

コンソールアプリ
コマンドプロンプトで、文字ベースのアプリケーション

Windows Formsアプリ
一般的なGUI。Windows95からの「Windowsっぽいアプリケーション」

XNAアプリ
ゲーム用のアプリ。グラフィックの表示、ゲーム用コントローラーからの入力、サウンドなどをサポート
省2
24: 2010/12/16(木)00:30 ID:G422t28F(1) AAS
.NET CLRのメモリ管理に関する最低限の基礎知識(Xbox360上のXNAとは異なる)
・.NET CLRのGCは効率的な世代別GCを採用している
・CLRはメモリをG0/G1/G2(G=Generation)/LOH(Large Object Heap)の4つの領域で管理する
・〜.NET3.5:同時実行GC .NET4/Silverlight4:バックグラウンドGC
・同時実行GC:Full GCの実行中にG0/G1のGCが実行できない。
 新たな割り当てができなくなった段階で、Full GCの終了まで中断される。
・バックグラウンドGC:Full GCが実行中でもG0/G1のGCが実行できる。
省9
25
(1): 2010/12/16(木)01:44 ID:1jVCL3Xf(1) AAS
>>16はG0で済ましているから負荷が軽い
26
(1): アジェグ4倍 ◆4xAJeG.COM [chage] 2010/12/16(木)10:13 ID:QtGXpLv7(1) AAS
なんや知らんが、秒間60回のフレームループの中で
newをやっちゃダメだよ。
27
(1): 2010/12/16(木)16:54 ID:4Vhu2VWF(1) AAS
なんか落とし穴とかわかりにくい
foreachとか駄目なんでしょ?
28: 2010/12/16(木)19:07 ID:kONXhBxi(1) AAS
>>27
何がどうダメなのか具体的に
29: 2010/12/17(金)00:44 ID:1SX4G+z6(1) AAS
動かすターゲットによって目標とする最適化の程度は異なる。

.NET CLR:世代別GC(.NET Framework/Silverlight)
.NET CF CLR:マーク&スイープGC(Xbox360/Zune)

.NET CF CLRはGCのコストが桁違いに大きいため、徹底的にGCを排除すると大きくパフォーマンスが上がる。
.NET CLRでは>>16>>25の言うようにG0/G1のGCのコストが小さいので、全部最適化するだけの労力に見合った効果が得られない。

.NET CLRはG2の発生が抑制されていてG0の発生頻度が1フレームより長ければ問題ない。
この状態を保てている範囲なら1フレーム未満の寿命しかないインスタンスを作り捨ててもいい。
省3
30: 2010/12/17(金)00:52 ID:zbyqlefy(1) AAS
SwapArrayやRingBufferを使えばforeachできない

これはIEnumeratorを吐く関数を作ればいい
31: 2010/12/18(土)02:37 ID:jHzAZ+Pm(1) AAS
みんなすげえよく知ってるな。どうしても速度がほしくなったらここら辺のレスを元に掘り下げることができそうだ。サンクス
32: 2010/12/18(土)17:03 ID:OVvsO5Q5(1) AAS
Winではとりあえず毎フレームGen0GC入れとけば劇的に安定するよね
33: 2010/12/18(土)17:35 ID:UzXWUqS6(1) AAS
ちがうよ ぜんぜんちがうよ
34
(1): 2010/12/20(月)00:09 ID:zPc622SO(1/5) AAS
XNAのロボットゲームが非会員でも落とせる
ようになっとる

結構ぬるぬる動く
35: 2010/12/20(月)13:50 ID:wBI9+2iY(1/2) AAS
C#でhtml文をパネルにしてくれるようなクラスってない?
36
(2): 2010/12/20(月)14:32 ID:1s3rp6hX(1/3) AAS
IEコンポーネントでHTMLをホストしたいならWebBrowser使う。
IE以外だと
GeckoにはActiveX版があってC#からも呼んで使える。でも↓の方が便利。
GeckoFX(ActiveXを使わず直接使ってる。あと開発者のアンドリューさんは日本語ちょっと話せるらしいw)
完成したらWebkit.NETも有望そう。

マークアップ ランゲージ(ML)でUI定義したいならWPFのXAMLがまさにそれ
WinForms用ならWFML(外部リンク:windowsclient.netあたりだろうか?これは使ったことない。
省2
37: 2010/12/20(月)14:38 ID:wBI9+2iY(2/2) AAS
>>36
どれが使えるかわからんから、いろいろ調べてみるよ
ありがとう
38
(1): 2010/12/20(月)15:55 ID:zPc622SO(2/5) AAS
>>36
XNAの有料チュートリアルだった
補完のあるボーンアニメーションやパーティクル
木構造のデータ管理、AIなどが一通りそろっている
割と平易
XNAやC#以外でも使えると思われ

なにより軽い
39: 2010/12/20(月)19:06 ID:zPc622SO(3/5) AAS
AA省
40: 2010/12/20(月)19:27 ID:utdIzmpZ(1) AAS
>39
そのPCのスペックは?
41: 2010/12/20(月)19:50 ID:zPc622SO(4/5) AAS
何故自分の環境で動かさないのか?
宗教的理由でC#のソースをコンパイルすると死ぬんですね
わかります

P4 2.80
メモリ 1G
42: 2010/12/20(月)19:54 ID:Vc2LMPvW(1) AAS
ていうか、それをC++で実装した場合との比較はないの?
43: 2010/12/20(月)20:00 ID:zPc622SO(5/5) AAS
C++の方が速い
あたり前だ
なんで実装してまで調べる必要があるんだ?

頭の中のお花畑ぐあいをちょっと聞かせ
てくれないか?
44: 2010/12/20(月)20:40 ID:1s3rp6hX(2/3) AAS
ちょっと落ち着けw

C#自体の速度は最適化してないC++並みって知らない人は置いとくとして
意図しないタイミングでのGCは避けるべきだけど、(PCでは)極端に忌避する必要はないって話に落ち着いてたでしょ

>>38
ロボットゲームってまんまRobot Gameなのかw
試してみるthx
45: 2010/12/20(月)20:50 ID:czZepkU0(1) AAS
GCについてどうC++と比較するつもりなんだ?
46: 2010/12/20(月)21:49 ID:1s3rp6hX(3/3) AAS
newはC++より一桁速い。それは何故か
ってとこからC#のメモリ管理について延々と語れるけど、それをやるには掲示板は狭すぎる。

世代別GCは一般に思われているより高速。
(何倍も時間かけて)C++で作ればC++の方が早い。
どの言語で作っても結局は描画にかかる時間が大半を占める。
47: 2010/12/21(火)01:12 ID:HIfOIzlr(1/2) AAS
DirectXの情報がどうもないと思ったらXNAってもんがあるのかw
C#+DirectXで作っちゃった・・・

でも、苦労はあんまり変わらないような・・・
48: 2010/12/21(火)01:20 ID:HIfOIzlr(2/2) AAS
と思ったら結構臭いな>XNA
C#は混沌としてるな
49: 2010/12/21(火)01:48 ID:7nmvHqyX(1/3) AAS
薄いwrapperが欲しいならSlimDX
50: 2010/12/21(火)01:50 ID:IUyb5141(1/2) AAS
2011年になろうかと言うときに
Managed Xとか…
釣りやなw

C++/CLIでツール作成ならまだ疑う余地
もあったけど
51: 2010/12/21(火)06:58 ID:QhXoH/nz(1) AAS
あげておくか
52: アジェグ4倍 ◆4xAJeG.COM [chage] 2010/12/21(火)09:16 ID:kS4ld1Hr(1) AAS
いや、だから、タイミングや状態もわきまえずnewする時点で、
言語がなんであろうと以下略。
53: 2010/12/21(火)13:04 ID:589aNUur(1) AAS
そうでもない
インタプリタが遅くてnew自体のコストなんか誤差になるような言語処理系は
スクリプト言語ではわりとある
54
(1): 2010/12/21(火)17:39 ID:7nmvHqyX(2/3) AAS
いや、だから、タイミングや状態もわきまえずnewしていいなんてどこに書いてあるよ?
やっちゃダメ>>26と、管理されていればやってもいい は全然違う。
それだけの開発コストを投入するに値する根拠ってあるの?

C#はインタプリタでもスクリプト言語でもない。
newのコストは誤差(C++より速い)の範囲内。動作速度はJITされるため一度動き出せば最適化していないC++並み。
で、GCのコストをどう見積もってどこまで対策するのかって話なんだが…
55
(1): アジェグ4倍 ◆4xAJeG.COM [chage] 2010/12/21(火)20:24 ID:co1xIq2s(1/2) AAS
開発コストを投入するに値する根拠?

知ってると思うが、new ってのは mallocなんだぞ。
メモリの消費状況によっては、そこでスワッピングなどの
ディスクアクセスが発生する恐れもあるんだからさ。

で、ガベージが作動すりゃ、freeなわけだから、
そこでまたディスク沙汰に、なりかねないわけだ。

ソノヘンがわかってりゃ、例えば敵の弾の発生時にnewなんて
省3
56
(1): 2010/12/21(火)21:42 ID:ByL+MADM(1) AAS
C#の絶対性能がC++より低いなら、その低い性能で足りる範囲でゲームデザインすりゃ済む話だろう。
見積もりを検討するなら、プロトタイプ組んで実測すりゃ済む話だろ。
全部アセンブリで書くならまだしも、C#やらC++で書いたゲームのソースコードだけ見て、事前に精密な見積出せるわけない。
そんなもん、言語仕様以前のレベルの話だ。
なのに、事前に脳内で結果が分かって当然って前提を置こうとしている時点で、>>54は全くゲームのコード書いたことが無い、脳内クリエイターかなんかなんだろうよ。
どうせ、C#の方が簡単そうだけど絶対性能で負けるなら何となく格好悪いから使いたくない、とかその程度の発想でウダウダ食い下がってるだけだと思うぞ。
57: 2010/12/21(火)21:55 ID:7nmvHqyX(3/3) AAS
>>55
G0/G1ヒープがスワップアウトってどんな環境だw

敵の玉やFontなんて真っ先に
>最適化の効果が大きく簡単に改善できる個所
として槍玉にあがるとこじゃん。

プロファイルに基づかない最適化は害でしかない。
まぁ、終わりのない自己満足の最適化ゲームやりたいなら止めないけど
省3
58: 2010/12/21(火)21:59 ID:XhDhH52e(1) AAS
昔のJavaスレをみるようだ歴史は繰り返すなw
59
(1): アジェグ4倍 ◆4xAJeG.COM [chage] 2010/12/21(火)23:38 ID:co1xIq2s(2/2) AAS
まあ、要するに、newの使いどころをわきまえてりゃ、
ガベージがドーノコーノなんて話が出てくる必要もないわけで。

変なタイミングでnewするから、変なタイミングでガベージが動くんだぞ。

最初に書いたように、フレームループの中でnewしないように注意なんてのは、
プロファイルとやらがドーコー言う以前の、技術の基礎だからな。
60: 2010/12/21(火)23:50 ID:IUyb5141(2/2) AAS
上のRobotGameでもふつうにnewしてGCしてる

クラス設計 特に継承を使った設計が
頭の中にないと なんでnew禁止が辛いのか
理解できないので
会話にならない
61
(1): 2010/12/22(水)00:17 ID:MbCuhdtT(1/5) AAS
俺がゲーム開発のノウハウ教えてやんよ
と、息巻いてる奴に限って
英語コンテンツは一切目をとうさず
シェーダーも使えない
悲しい現実
62
(1): 2010/12/22(水)01:02 ID:lDvG2hsH(1) AAS
>>61
あんなすごい技術を使ってても可愛い女の子の1人も出てこない向こうのゲームってなんなんだろうな?
って俺はいつも思うんだ
63: 2010/12/22(水)01:47 ID:87uiMMNX(1/3) AAS
>>59
newの使いどころをわきまえる為に、.NET CLRのGCの特性を理解して使いましょうって話をしてるんだよ。
必死に無駄な最適化をしている君は実に馬鹿だなぁ
無駄な努力をするのは別にいいけど、誤った知識を広めて人に迷惑かけんなよ。
64: 2010/12/22(水)03:50 ID:jdovR8NX(1) AAS
>>62
脳が腐ってる気もするけど、同意。なんだろう、ロリコンって少ないのか?他の国じゃ。
65
(1): アジェグ4倍 ◆4xAJeG.COM [chage] 2010/12/22(水)10:24 ID:msb7iRfo(1/5) AAS
new と同様に注意しなきゃならんのは、Listで定義した配列のAddとRemoveだな。
多くの場合、Addの直前にnewしてるんだろうけど。

フレームループの中で有効件数が変わるような配列(敵の弾とか)は、
最大値を設けてあらかじめその数だけ取っとくなりしないと。
66: 2010/12/22(水)10:56 ID:1bNr51j3(1/2) AAS
newのコストとかGCのコストなんてゲーム作ってくうちにネックに成ったら考えれば良い話。
簡単なパズルゲー、ノベルゲーなら多少フレーム落ちてもたいして問題ないし。
67: 2010/12/22(水)11:46 ID:8WY0reJe(1/3) AAS
>>65
List<T>の内部配列のサイズはオーバーするたびに2倍になる。Removeされても縮小は行われない。
なので、そのせいでフレームレートが落ちるようなことは100%ありえない。
68: アジェグ4倍 ◆4xAJeG.COM [chage] 2010/12/22(水)12:18 ID:msb7iRfo(2/5) AAS
縮小は行われなくても、インデックスの更新などがあるからねぇ。
まあ、パズルやノベルなら、確かにさほど気にせんでもいいが。

おれが今作ってるのは音楽ゲー系(Javaだけど)だから、
タイミングにはイロイロとシビアでねぇ。
69: 2010/12/22(水)12:20 ID:8WY0reJe(2/3) AAS
指数関数的に内部配列を拡張していって縮小はしないのはC++のvectorやJavaのArrayListなんかでも見られる
ごく一般的な動的配列の実装なんだけどな
上でもnew ColorがGCに影響するとかnewがmallocとか見当違いのこと言ってるし
70: アジェグ4倍 ◆4xAJeG.COM [chage] 2010/12/22(水)12:45 ID:msb7iRfo(3/5) AAS
CPUの進化ってすごいんだねぇ。

ここの連中のおれへの反論を見ると、
そう思っちまうねぇ。
71: 2010/12/22(水)12:59 ID:a/rzg/Ro(1) AAS
もうその話題は終わったよ
72: 2010/12/22(水)13:11 ID:MbCuhdtT(2/5) AAS
音ゲにNPC AIもステージ設計も無いもんな

むしろ事前初期化ぐらいしかやる事なさそ
73: アジェグ4倍 ◆4xAJeG.COM [chage] 2010/12/22(水)13:21 ID:msb7iRfo(4/5) AAS
おれの場合、MIDIを使って、既存のデータで遊べるようにしてるから、
そのMIDI関連の調査には、チョットばかし苦労したねぇ。
最近はソノヘンの資料が少なくてねぇ。

何とかならんのかねぇ、あの叩いてから音が出るまでの遅延。
マックならそれほどひどくもないんだが・・・
74: 2010/12/22(水)13:21 ID:8WY0reJe(3/3) AAS
JavaのGCって.NETのと比べてストップザワールドを起こしやすいし
値型を定義できないしジェネリックも飾りでボックス化が発生しまくるからゴミも多発しやすい
インデックスの更新ってほんとにそんなものがボトルネックになったことあるのか?
知りもしない調べもしない測りもしない
75: アジェグ4倍 ◆4xAJeG.COM [chage] 2010/12/22(水)13:32 ID:msb7iRfo(5/5) AAS
そんなものがボトルネックになったことあるのかって?

そういうリスクを未然に防ぐ作り方を心がけてるから、
知りもしないでいいし調べもしないでいいし測りもしないでいい。

おれがおれのやりかた。
76: 2010/12/22(水)13:35 ID:MbCuhdtT(3/5) AAS
本人がキチガイ認めて完結
77: 2010/12/22(水)16:16 ID:87uiMMNX(2/3) AAS
なんだ、やっぱりキチガイが妄想を根拠にした俺理論で騒いでたのか。
通りで理詰めで説明しても通じないわけだ。

>必死に無駄な最適化をしている君は実に馬鹿だなぁ
>無駄な努力をするのは別にいいけど、誤った知識を広めて人に迷惑かけんなよ。
78: 2010/12/22(水)18:35 ID:1bNr51j3(2/2) AAS
調べも測りもしない上に使ってる言語はJava
思慮に値しない戯言だったって事だな
79: 2010/12/22(水)18:52 ID:YXiGsK9q(1) AAS
それぞれを比較できる幾つかの数値的な根拠なりなんなりを出していない時点でどっちもどっち。
80: 2010/12/22(水)19:51 ID:87uiMMNX(3/3) AAS
ID違うけどお前さん◆4xAJeG.COMの捨て台詞みたいな事言ってるな。
まぁ、実際に問題なくゲーム(Robot Game)が動くのが何よりの証拠。お前の目は節穴か。
81: 2010/12/22(水)19:54 ID:XMfWOza8(1) AAS
このスレはゲ製板を象徴するようなスレだな。ダウトだらけ。本当にコンスタントにゲーム作ってる人いるんかね。
82: 2010/12/22(水)20:01 ID:4NXPbAbv(1) AAS
ここまでほとんどゲーム関係ないじゃん
純粋に.NETの知識としては特定の人以外はそんなに間違ってはいない
83: 2010/12/22(水)20:03 ID:Wg8SNA4z(1) AAS
ゲーム関係ないw。いらないなこんなスレ
84
(2): 2010/12/22(水)20:08 ID:YY2LjFIA(1) AAS
C#の話題ならム板で事足りる。
最近の流れはヲチとしては面白い。
85: 2010/12/22(水)20:15 ID:MbCuhdtT(4/5) AAS
>>84
何の話しする?
どうして いきなり興奮してるの?

教えて 84
86: 2010/12/22(水)20:44 ID:MbCuhdtT(5/5) AAS
俺より難しいことを知ってる奴はゲームなんか作ってない

はい これ繰り返し言ってみなさい

ね、 落ち着いたでしょ
87
(1): 2010/12/23(木)01:28 ID:OCYjdJoh(1) AAS
C#で作ることのメリットデメリットは実行速度・ライブラリと組みやすさってのはわかってるし、特に言語にまつわるできるできないもそんなにないし。
SlimDXやXNAの話題は専用スレもあるし、
このスレの価値はこれらのライブラリを比較することと、C++に根本的にない文法で実装した方法紹介ぐらいしかないような気がする。
88: 2010/12/23(木)02:25 ID:GtUoPrZH(1/4) AAS
yield return
Reflection.Assembly.LoadFrom
シリアライズ

効果
相手は死ぬ
89
(1): 2010/12/23(木)07:11 ID:7ot6aP0i(1) AAS
何でイテレータがそこに入ってるの?
配列へのforeach(最速)に比べりゃ遅いが
コンパイラが生成するクラスと動作を知ってれば大したコストはないと分かりそうなもんだが

>>84>>87
こういう最適化絡みの取るに足らない罵り合いはム板じゃできんよ。
あっちでやったら"誤差の範囲"と一蹴されて終わってしまう。
90
(1): 2010/12/23(木)10:33 ID:77raTIZw(1/2) AAS
まあ前はXNAのModelMeshCollectionなどの列挙子がクラスとして実装されてて
foreachでガベージが発生してパフォーマンスが落ちるとか騒がれてたくらいだからな
yieldも構造体じゃなくてクラスなのでwindowsではまず問題にならないけど360では問題になるのかも
91
(1): 2010/12/23(木)12:02 ID:vF4GDpDy(1) AAS
vs2010だとC++でも文字列処理の塊みたいなプログラムだと
Debugで実行するとReleaseの1000倍以上遅くなった
Debugで実行すると30分たっても終わらないのに
Releaseで実行すると5秒もしないうちに終わったりする

C#も似たような面がある
Debugで実行すると不安になるぐらいおっそいの
でもReleaseで実行すると問題ないぐらい早く動くの
省1
92: 2010/12/23(木)12:10 ID:77raTIZw(2/2) AAS
文字列処理ならそうだろうけど、DirectX使ってるときはあまり感じないな
描画がボトルネックになってるとほとんど関係ない気が
1-
あと 404 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.021s