C/C++ゲーム製作総合スレッド Part4
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2013/08/12(月) NY:AN:NY.ANID:RPqvnGkC元スレ
DXライブラリ 総合スレッド その12
http://toro.2ch.net/test/read.cgi/gamedev/1330000532/
前スレ
C/C++ゲーム製作総合スレッド Part1
http://toro.2ch.net/test/read.cgi/gamedev/1337516528/
C/C++ゲーム製作総合スレッド Part2
http://toro.2ch.net/test/read.cgi/gamedev/1351015269/
C/C++ゲーム製作総合スレッド Part3
http://toro.2ch.net/test/read.cgi/gamedev/1357899040/
0130名前は開発中のものです。
2013/09/07(土) 12:48:57.70ID:htv4gya2昔からあるSDLでもダメって話か?
てかテクスチャのローダなんてそんな大変だと思えないが
0131名前は開発中のものです。
2013/09/08(日) 11:57:30.99ID:gfgc7Fmm0132名前は開発中のものです。
2013/09/09(月) 17:00:18.03ID:xAOmQIfgSDLは、2Dですら画像を回転させようと思ったら
OpenGLの関数使って初期設定して、SDLのフォーマットで読み込んだ画像を
GLのテクスチャにフォーマットして、そのテクスチャを板ポリにUV座標指定して貼り付ける
ってところまでやらないとダメじゃない?
0133名前は開発中のものです。
2013/09/09(月) 17:02:10.36ID:BMj2DFdVwindows版だったらただのwin32apiのラッパーなんじゃないの
0134名前は開発中のものです。
2013/09/09(月) 17:13:28.09ID:/3fzHQ85使えるところは使うって設計思想と聞いたような。
0135名前は開発中のものです。
2013/09/09(月) 19:54:26.62ID:xAOmQIfgライブラリのソースコードはマルチプラットフォーム対応するように書かれてるぜ
windows版ってやつはソースをwin用コンパイラでコンパイルして.dllのバイナリとして配布してるって意味だと思われ
>>134
ソース見てみると、一番最初に呼び出されるヘッダ部分で環境変数取得して、それからOSなどを判断して
defineマクロ駆使してそれぞれのmain()を書いてるっぽい(windowsならWinMain()が書かれてる)
ちなみにこの時点でDirectXが使えるならOpenGL使わずにそっちを使うようになるらしい、すごいぜ
0136名前は開発中のものです。
2013/09/09(月) 23:41:39.27ID:L4c5eGnj0137名前は開発中のものです。
2013/09/10(火) 10:03:39.55ID:qOJwyK2zあの上にライブラリ構築したら移植しやすいよっていう土台
だから色々なライブラリがあって、回転のやつとか定番のがあった
ハードウェア支援はあるぞ
0138名前は開発中のものです。
2013/09/10(火) 13:25:05.04ID://nCPrx/みんなはどうしてんの?
0139名前は開発中のものです。
2013/09/10(火) 15:38:00.17ID:IuaaT7AR0140名前は開発中のものです。
2013/09/10(火) 15:39:41.68ID:gIhnnlB1フレームワークのソースを見たり
0141名前は開発中のものです。
2013/09/10(火) 15:56:42.08ID:PbAq3+L00142名前は開発中のものです。
2013/09/10(火) 21:27:09.56ID:V2/hDCSO0143名前は開発中のものです。
2013/09/10(火) 21:39:28.38ID:qOJwyK2z0144名前は開発中のものです。
2013/09/10(火) 22:11:28.28ID:FWHcqC1B「ファイル共有ソフト」みたいなノリで
共有って単語を使うの止めて欲しい
0145名前は開発中のものです。
2013/09/10(火) 22:16:59.07ID:9XgseZ4Eどちらかというと誰かの親切なメモなり落書きなりを見に来るものだろう
0146名前は開発中のものです。
2013/09/10(火) 22:33:01.91ID:IuaaT7AR0147名前は開発中のものです。
2013/09/10(火) 23:01:16.73ID:1N7dl6m4数分とか1時間じゃなくて、数日かかるのか。
それであっても質問"厨"にはならないわ
0148名前は開発中のものです。
2013/09/10(火) 23:15:47.37ID:V2/hDCSOA4のドキュメント一枚読み解くのに余裕で1〜2時間かかりますがなにか
辞書見てる時間の方が長くなる
0149名前は開発中のものです。
2013/09/10(火) 23:40:07.87ID:eybXly7mこれからの人生のためにがんばれよ。
0150名前は開発中のものです。
2013/09/11(水) 11:54:51.88ID:BysX3/470151名前は開発中のものです。
2013/09/11(水) 15:26:50.97ID:bZquC3JH0152名前は開発中のものです。
2013/09/11(水) 15:58:28.42ID:aRuN+GoDそれでも苦手だけどさ!
0153名前は開発中のものです。
2013/09/11(水) 17:11:02.08ID:YgxYLD5F0154名前は開発中のものです。
2013/09/11(水) 17:11:28.66ID:FPOWazURするから比較的楽だよね。
0155名前は開発中のものです。
2013/09/12(木) 01:37:54.02ID:OrRDW4M1OpenNIは、1から2になってI/Fがガラッと変わりやがりました。
1のサンプルを俺抽象化した時間は何だったんだー
イスラム圏ちょっとあんたらねえ
他人の俺仕様に無駄に振り回される自分の無能さが悔しい。
それはともかく情報共有の話が出たけど、
他人に振り回される側同士、手をクロスさせてお互い慰め合う・・・
・・・わけねーーーだろーー氏ねやー
0156名前は開発中のものです。
2013/09/12(木) 09:03:46.94ID:YMhX5Xt00157名前は開発中のものです。
2013/09/12(木) 22:00:25.31ID:dx/Lp+eHDXライブラリみたいにやりたかったら、ウインドウ閉じたかどうかのイベント以外はポイポイ捨てて
キー入力は必要なときだけ呼び出せばいいんだよな
0158名前は開発中のものです。
2013/09/13(金) 01:06:50.94ID:V6fOnFO4OpenGLのGlutでもそう、win32の基本的なメッセージポンプ自体がそう。
そんな各種フレームワークやAPIで目にする極普通のイベントドリブン構造
0159名前は開発中のものです。
2013/09/13(金) 10:11:52.47ID:1mn/tOWO描画と処理をわけるのなら描画のループだけ一秒間に60回回せばいいと思うんだけど
処理は何回回せば良いんだ?
100とかが無難なのかな、100カウントで一秒間ってすっきりするから
0160名前は開発中のものです。
2013/09/13(金) 11:15:43.12ID:dnLRNGtpプログラマーの発想じゃねぇw
0161名前は開発中のものです。
2013/09/13(金) 12:47:31.13ID:V6fOnFO4「何秒に一回にしたらいいんだ?」って発想じゃなくて
0162名前は開発中のものです。
2013/09/13(金) 12:49:49.64ID:PBMoJzg4それ一行目から既に「何のためにそれをやるのか」自分でよくわかってないだろ。
何だかよく分からないけど処理を分けるみたいだから真似すればきっとうまくいく
ということなら、まぁ、カーゴカルトかもな
0163名前は開発中のものです。
2013/09/13(金) 15:36:03.37ID:1mn/tOWOスレッド一つだとCPUのコア1つしか使わないから処理系ごとに分けて活用しようと思ったんだけど
他のスレッドで弄ってるリソースを参照しても大丈夫かなー?ぐらいの認識です
0164名前は開発中のものです。
2013/09/13(金) 16:33:02.02ID:V6fOnFO4同期とread/writeの保証についてちゃんと認識あるか?
その後、全体としてどういう処理の切り分けをして、どのタイミングで片方の結果をもう一方が拾うのか、とか
0165名前は開発中のものです。
2013/09/13(金) 16:45:42.76ID:V6fOnFO4基本的にC/C++はそれらをわかった上で自分で実装するので(と言っても意味わかってれば仕掛けだけなら屁でもないが)、
その辺の認識ちゃんと染み込んでるのかなと思った。
C/C++だとboost::thread使うとずいぶん簡素になるが、コードが簡素になっても動きわかってないとおかしな事になる
0166名前は開発中のものです。
2013/09/13(金) 18:20:45.10ID:UxRsVe6Yマルチスレッドの知識がなくても使わざるを得ないという事情もある
なので>>159は別に背伸びしてスレッド分けしようとしているというわけでもないと思うよ
0167名前は開発中のものです。
2013/09/13(金) 21:01:10.73ID:NXjdNH8/0168名前は開発中のものです。
2013/09/14(土) 02:00:08.66ID:n+2NXmsR所謂GLスレッドに相当。で、これの中でゲームのシミュレーション部の
計算もやるのって別に珍しくはないかと
使える計算資源を徹底的に使い倒す必要があるヘビー級のタイトルなら
(計算資源への)処理の充填率を高めるために比較的細かい粒度で処理の
スケジューリングをするような仕組みをわざわざ用意することもあるけど
(結果的にGLスレッドとシミュレーション部は別スレッドってことになるけど)
必要がなければやらない(複雑化を避ける)と言うのは普通にアリというか
むしろ推奨
0169名前は開発中のものです。
2013/09/14(土) 12:28:27.62ID:jcJR5iuZつかGUIってメインループなくね?あったとしても同期取るハメになるはず
0170名前は開発中のものです。
2013/09/14(土) 13:44:25.30ID:8QT9t2lk普通のアプリではメインループ相当の事はOSがやるが
イベントハンドラで時間のかかる処理をすればフリーズする
0171名前は開発中のものです。
2013/09/18(水) 20:14:35.06ID:H6vsU86stemplate <class T>
using Value2 = std::array<T, 2>;
ってやりたいのにIDE(eclipse CDT + gcc4.8)が構文エラー扱いにしてきて困る
そのくせコンパイルは通るし実行もできるからややこしい
usingエイリアスならtypedefにテンプレート引数使えるって聞いたから
必死にgcc環境作ったのに悲しい悔しいtasukete
0172名前は開発中のものです。
2013/09/19(木) 08:43:08.81ID:UurgX65x0173名前は開発中のものです。
2013/09/24(火) 00:07:52.02ID:NDARxT+J条件があって、正面を+z方向とした時にx軸回転した後にz軸回転だけで表現したいです。
0174名前は開発中のものです。
2013/09/24(火) 20:17:12.39ID:kERDBedE0175名前は開発中のものです。
2013/09/24(火) 20:42:59.75ID:kERDBedE方向{x,y,z}
x軸atan(y,z)
z軸atan(y,x)
で回転させれば向くのかな
頭が地面に向いたりしそうな気がするけど
0176名前は開発中のものです。
2013/09/25(水) 22:20:53.44ID:SvES6jLU一応ゲーム中に複数のクライアントをサーバーとのやり取りさせることはできたんだけど
ルームの入退室は良いとして、ゲーム開始させる場合にサーバーとクライアントでどうやってゲーム開始を同期させればいいのかわかんないんだけど
アドバイスしてくれ
0177名前は開発中のものです。
2013/09/25(水) 22:51:08.11ID:IcW1ptMQクライアント側全員から開始の合図が来た段階でサーバがタイムスタンプ発行し、
各クライアントはそのタイムスタンプから5秒経過したら開始とかすれば、
ポーリングがまちまちなクライアント同士で同期出来ると思う。
0178名前は開発中のものです。
2013/09/25(水) 23:04:58.92ID:IcW1ptMQそれで各々クライアントは、まちまちな自分の時計とサーバタイムのオフセットを得て保持しておいて、
参加者全員がスタート伝達したタイミングで、ポーリング結果には開始時刻が返送(例えば5秒後)され、
あとは各クライアントが自分のタイムとオフセットから計算して、そのサーバタイムになったら実行、ってするだけって話。
簡単な仕掛けだが、一応それっぽい動作にはなると思う。
0179名前は開発中のものです。
2013/09/27(金) 08:33:08.87ID:SP2W5RH20180名前は開発中のものです。
2013/09/27(金) 12:19:15.07ID:XzbTruZP久しぶりに見た
0181名前は開発中のものです。
2013/09/27(金) 12:49:19.82ID:h9p/NQii重さ12でやってるけどよく爪が割れるわ
0182名前は開発中のものです。
2013/09/27(金) 16:19:12.68ID:G+vvY9w/基礎的な単語の意味がわかっていいんだよ
0183名前は開発中のものです。
2013/09/27(金) 16:25:15.78ID:dN57jsSQwhile(1)
{
if(...)
{
break;
}
}
0184名前は開発中のものです。
2013/09/27(金) 16:50:51.96ID:Ftl1F3xi0185名前は開発中のものです。
2013/09/27(金) 17:43:19.40ID:W5Ecfj6h0186名前は開発中のものです。
2013/09/27(金) 18:07:48.07ID:MDl2Sh2q0187名前は開発中のものです。
2013/09/27(金) 18:16:14.47ID:dN57jsSQhttp://pics.dmm.co.jp/digital/video/11parm00001/11parm00001jp-8.jpg
http://pics.dmm.co.jp/digital/video/11parm00001/11parm00001jp-10.jpg
http://pics.dmm.co.jp/digital/video/11parm00001/11parm00001jp-11.jpg
http://pics.dmm.co.jp/digital/video/11parm00002/11parm00002jp-15.jpg
http://pics.dmm.co.jp/digital/video/11parm00002/11parm00002jp-16.jpg
http://pics.dmm.co.jp/digital/video/11parm00003/11parm00003jp-20.jpg
http://pics.dmm.co.jp/digital/video/11parm00006/11parm00006jp-7.jpg
http://pics.dmm.co.jp/digital/video/11parm00006/11parm00006jp-8.jpg
http://www.p-jinriki.com/pc/img/talentpic/l/pic_tohdohyouta_mypage.jpg
0188名前は開発中のものです。
2013/09/27(金) 18:35:55.36ID:eEyIdjJu無駄にハードの知識が必要だったりプログラムの知識は
関数ポインタやオブジェクト指向すら不要だったり
0189名前は開発中のものです。
2013/09/27(金) 19:40:15.31ID:mYXhuyuG0190名前は開発中のものです。
2013/09/27(金) 19:48:23.09ID:JDEMfhWoもしくはusb3.0とか扱えるような知識を
0191名前は開発中のものです。
2013/09/27(金) 19:55:23.31ID:XzbTruZP入社後のポイント稼ぎ用、という印象はある
職人様方には無用なものだろうね
0192名前は開発中のものです。
2013/09/27(金) 19:58:37.04ID:XzbTruZP0193名前は開発中のものです。
2013/09/27(金) 20:28:52.37ID:NDPmfmjE0194名前は開発中のものです。
2013/09/27(金) 20:42:18.24ID:OrreSYwI0195名前は開発中のものです。
2013/09/27(金) 21:26:58.83ID:t+y3xWop最近、ゲハ住人っぽいのがいるね。評論家気取りうぜぇ。
0196名前は開発中のものです。
2013/09/27(金) 22:53:02.77ID:PF1r05oxうおお、面白い。そういうやり方があるんだね
横からだけど、最近同期の方法とかに悩んでたから参考になります
2人対戦のゲームをUDPで完全に同期させる方法はネットにいろいろ参考になる資料があるんだけど
クライアントサーバで一定時間毎に同期させるような方法はあまり資料がない・・・
ゲームのジャンルやルールによってやり方が違いすぎるからかな
0197名前は開発中のものです。
2013/09/28(土) 06:23:44.02ID:5v1wAOlF>>178
できました
ありがとうございました
0198名前は開発中のものです。
2013/09/28(土) 10:29:41.31ID:Y+bKGXfAでるよ
>>188
総合的な知識が幅広く得られるのがメリット
プログラマは狭く深くになりがちだからそれを補える意味は大きい
関数ポインタもオブジェクト指向もでるよ
C言語の知識を補うならC言語検定もある
>>190
ベンダーべったりの知識はベンダー試験
マイクロソフトは充実してるよ
0199名前は開発中のものです。
2013/09/28(土) 12:29:50.40ID:/fMP8d9m知識を得るならその手の本を読めばいいだけ
0200名前は開発中のものです。
2013/09/28(土) 13:32:24.05ID:ihDNaDhE0201名前は開発中のものです。
2013/09/28(土) 15:50:16.20ID:nDU4ITkuキャラクターの位置とかはけっこうズレるし、敵にダメージ入るタイミングはズレたりはするけど、
死んでるはずの敵からの攻撃からダメージ受けることってなかったよね?(PSO2は除く)
特に派手なアクション要素がなければ、各クライアント側で起きたイベントをサーバで集めて
タイムスタンプとかとあわせて整合性を取って、発生し得るイベントを全クライアントに送るって感じ?
0202名前は開発中のものです。
2013/09/28(土) 18:14:48.97ID:RXTSyO+4ファンタシースターオンライン2は「MORPG」で非同期型/クライアント分散処理型ね
0203名前は開発中のものです。
2013/09/28(土) 18:34:11.99ID:ZZQuEZ6jクライアントは移動とか攻撃とかリクエスト投げるだけじゃないと
俺のカスタムクライアントが9999ダメージを連発させるぜ
0204名前は開発中のものです。
2013/09/28(土) 20:01:55.84ID:mp5f+xUzへー、C言語検定なんてものがあったのか
それは知らなかった
腕試しに受けてみようかな
0205名前は開発中のものです。
2013/09/28(土) 21:24:48.68ID:BqaH8pr+0206名前は開発中のものです。
2013/09/28(土) 22:25:03.13ID:Y1ge1Ybt専門学校1年の秋位に受けさせるレベルで超簡単だぞ
0207名前は開発中のものです。
2013/09/29(日) 07:44:25.71ID:hanumcZp全てのイベントの定義には移動や方向転換も含んでて情報が若干重複するから
座標と角度は一秒に一回とかでもいいかも
攻撃判定とかはサーバーで処理するのかな?
それともクライアントで判定して結果だけおくるのか
チートされると弱いけど。
0208名前は開発中のものです。
2013/09/29(日) 17:06:00.34ID:vFW2ihcI戦闘に関する処理は全てBattleっていう関数が処理してるという前提。
モンスターのLv・HP・攻撃力とかの初期値は、全てデータベースとして別のbinファイルに存在する。
今考えてるのは、
戦闘開始→乱数で「敵の数」「出現する敵のID」取得
Monsterっていうクラスを用意する。
コンストラクタで「出現する敵のID」を入力引数にする。
IDでデータベースから敵情報をリードしてくる。
リードしてきた敵のパラメータをprivateの変数に格納する。
みたいな感じになるのだろうか
0209名前は開発中のものです。
2013/09/29(日) 17:46:39.51ID:Vo2lxUIsそれでいいんじゃね?
0210名前は開発中のものです。
2013/09/29(日) 18:18:34.45ID:Ov6Kwx0jフィールド内でキャラクターが何歩あるいたら敵に遭遇するかがランダムなことなんじゃないの?
0211名前は開発中のものです。
2013/09/29(日) 18:23:06.00ID:xezVSvWv0212名前は開発中のものです。
2013/09/29(日) 18:56:18.52ID:vFW2ihcIうーん
戦闘が始まったら関数Battleを呼ぶ
Battle内でMonsterクラスの実体monster_nowを用意する
monster_nowは配列で数個(モンスターの数分)用意
monster_nowはモンスター種別IDを基にモンスターデータベースから敵データをリードする
HPを0にすると戦闘終了処理をした後にBattle関数がリターンする
・・・という作りを考えてるんだけど、それが>>209が言ってることに当たるのかな?
>>210-211
完全にそうですねwすいません
0213名前は開発中のものです。
2013/09/29(日) 19:00:09.19ID:vFW2ihcIclass Monster
{
private:
int HP;
int MP;
public:
Monster(int ID); // 種別IDを基にデータをリードするコンストラクタ
void Action(未定); // 敵と味方とのデータのやりとりの予定
~Monster(); // 経験値などの戦闘終了後の処理
};
こんな感じ
Battle関数が呼ばれるために
int Battle()
{
乱数で敵ID・数取得
Monster mob[敵の数];
〜〜
}
みたいな感じ
0214名前は開発中のものです。
2013/09/29(日) 19:01:24.28ID:DKLo6UIS出現する敵の種類と確率を定めたテーブル作ってそっちから取得した方がいいとオモ
あとこれ出てくる敵は必ず1種類のみなのか?
0215名前は開発中のものです。
2013/09/29(日) 19:08:23.21ID:DKLo6UIS0216名前は開発中のものです。
2013/09/29(日) 19:08:35.81ID:UYO2pFri0217名前は開発中のものです。
2013/09/29(日) 19:10:52.74ID:UYO2pFridxライブラリとかのフレームワークで3dゲームは一度だけ作った
0218名前は開発中のものです。
2013/09/29(日) 19:39:10.59ID:g9GnKKpA0219名前は開発中のものです。
2013/09/29(日) 20:08:25.90ID:/sjQW5wJ0220209
2013/09/29(日) 20:36:17.46ID:Vo2lxUIsclass CMonsterData
{
int hpmax; //最大体力
}
class CMonster
{
CMonsterData *monsterdata;
int hp; //残り体力
}
こんな感じで作成する。
各個体で別々にインスタンスを作らないといけないのは分かると思う。
アクションするモンスターはデータと別に作る。
データクラスはアプリケーション実行中には絶対にデータを弄らない。
弄るとややこしくなるから。
戦闘が終わればCMonsterを綺麗さっぱりdeleteすれば分かりやすい。
自分はこんな感じで作ってる。
因みに戦闘クラスは
class CBattle
{
CMonster *monsters[敵の数];
};
という感じでポインタを持たせる。
0221名前は開発中のものです。
2013/09/29(日) 21:07:58.43ID:vFW2ihcI数に関してはそんな感じです
なるほど、テーブル使ったほうが確かにイイですね
そしてそのテーブルを扱うためだけの関数を作ろうと思います。
>>220
ふむ・・・少し難しいですね
その方法だとどこでモンスターを指定できるのかが良く分かりません
CBattleにコンストラクタでモンスター種別(ID)を引数にして、
IDによって持たせるポインタを変える…というのは出来ないですよね?
0222名前は開発中のものです。
2013/09/29(日) 21:31:00.15ID:hanumcZpモンスタークラスのコンストラクタにモンスターデータクラスのインスタンス渡して、
モンスターデータクラスのコンストラクタにはプライマリキー渡して外部ファイルの読み込みとか
0223209
2013/09/29(日) 22:34:23.36ID:Vo2lxUIsモンスターの指定はCMonsterのコンストラクタか初期化関数で
CMonsterDataのポインタを渡せばよい。
イメージとしてはCMonsterDataの統轄クラスがCMonsterを吐き出す工場メソッドを作る感じ。
敵の種類のランダム指定もそのメソッドでやらせればよい。
CBattleについては設計思想にもよると思うが、個人的にはstateパターンを薦めたい。
例えばこんな感じ。
class CState
{
protected:
CMonsterData統轄クラス *monsterdatamanager; //参照するのみ
public:
virtual int OnClick(int x,int y){return 0;} //マウス操作はあまりしないと思うが
};
class CBattle : public CState
{
CMonster *monsters[敵の数];
};
class CFieldMap : public CState
{
};
0224名前は開発中のものです。
2013/09/29(日) 23:46:36.57ID:2IWoMpj3実家で技術評論社の「はじめてのC」読んでたらオカンと姉ちゃんがすげー剣幕で本をぶんどって行ったことがあったなー。
中身を確認した後顔真っ赤にして戻っていったが。
セックスの教本を居間で読むような度胸が俺にあるわけないでしょう?
0225名前は開発中のものです。
2013/09/29(日) 23:55:55.73ID:CMDsZPaO0226名前は開発中のものです。
2013/09/30(月) 20:56:01.83ID:dFNgJ59lゲームによる。アーケードなんかはチート不能だから瞬着の当たり判定とか普通にあるよ
参考になるかどうか分からないけど、ボーダーブレイクの主武器は発砲時にレティクルが
敵に重なってれば「当たり」。クライアント側(プレイヤーの筐体側)で判定してる
わかりやすい例かと
0227名前は開発中のものです。
2013/10/01(火) 18:12:36.03ID:IljiT9fF逆に非同期で実現できる面白い仕掛けのゲームも考えてみたいもんだね
0228名前は開発中のものです。
2013/10/01(火) 21:39:39.78ID:dkNVaEwCID:l+J8o0sa
http://engawa.2ch.net/test/read.cgi/gameama/1374691097/141
http://engawa.2ch.net/test/read.cgi/gameama/1374691097/144
http://engawa.2ch.net/test/read.cgi/gameama/1374691097/146
0229名前は開発中のものです。
2013/10/02(水) 10:08:22.51ID:MEhezrLj素直に巣に帰ったようで。ありがたい
■ このスレッドは過去ログ倉庫に格納されています