C/C++ゲーム製作総合スレッド Part4
レス数が900を超えています。1000を超えると表示できなくなるよ。
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/
0834名前は開発中のものです。
2013/12/08(日) 10:52:48.31ID:3chX2MBA前のstateにしておくと止まってるのに移動モーションになったり
キー押し続けて移動してる状態から元に戻ったときの判定ができてないだけなんだけどどう組んだらいいのか・・・
0835名前は開発中のものです。
2013/12/08(日) 11:33:46.30ID:1DUlwM7E「棒立ち中」にキーが押されれば「移動中」にする、じゃだめなのかよ。
処理の最初に状態を棒立ちに強制リセットしたら、いま移動中なのか棒立ち中なのかジャンプ中なのかわからんじゃないか。
0836名前は開発中のものです。
2013/12/08(日) 23:44:46.06ID:+CLlR05t初期値を棒立ちにする
同じように見えて違う
0837名前は開発中のものです。
2013/12/09(月) 00:01:22.24ID:29rPv9PPごめんググったりしても分からなかった
>>836
その何も押されていないって判定難しいんだよね
というか他の行動中も棒立ちになっちゃダメだし
0838名前は開発中のものです。
2013/12/09(月) 01:40:57.14ID:qdYgEstIこちらこそごめん。君が何を悩んでるのか解らない。
例えば、stateが「棒立ち」「ジャンプ」「移動中」の3種類があったとして
switch ( state ) {
case 棒立ち :
ジャンプボタン押されてたらstateをジャンプへ
移動キー押されてたら stateを移動中へ
case ジャンプ
地面に着地したらstateを棒立ちへ
case 移動中
ジャンプボタン押されてたらstateをジャンプへ
キー入力がなければ棒立ちへ
}
(breakは略)
ってやりゃ済む問題じゃないの?
0839名前は開発中のものです。
2013/12/09(月) 03:05:19.23ID:rlztm+ll一部根本から設計変えるはめになった
new Class[n](a)とかやらせてくれよ
0840名前は開発中のものです。
2013/12/09(月) 08:02:12.07ID:29rPv9PPごめん馬鹿過ぎました
なんでstateでswitch使うのを考えられなかったんだ・・・わざわざありがとう
0841名前は開発中のものです。
2013/12/09(月) 08:49:45.29ID:wjGeHw450842名前は開発中のものです。
2013/12/09(月) 10:54:59.37ID:a6QlYFtU0843名前は開発中のものです。
2013/12/09(月) 11:17:06.67ID:wjGeHw45立ちstateの最初に立ちモーション、ジャンプstateの最初にジャンプモーション
前フレームのoldstateでも作っておけば多分大丈夫
しかしstate関連は抽象的だからググっても出でこないしゲームプログラム本買うしかないか
0844名前は開発中のものです。
2013/12/09(月) 12:14:22.21ID:ujMWB8vsアクションゲーム作るのに重要だと思うのに解説してるサイトってほんと少ない
0845名前は開発中のものです。
2013/12/11(水) 05:58:07.78ID:EB08S8JC0846名前は開発中のものです。
2013/12/13(金) 16:12:45.26ID:1zN0lg6G素直に2013でいいの?
それとも使用されてる期間や人数が少ない最新版は避けて1つ手前の2012?
あるいは入門書とかにくっついてる2008や2010を本を見ながらやるのがいい?
0847名前は開発中のものです。
2013/12/13(金) 16:53:01.16ID:yPXDpUWi基本的に最新版の方が良いが、特定の関数とか定数が削除されたりすることもあるのでその場合考えると入門書とかにくっ付いてるやつが何も考えなくていいと思う
ただ、個人的お勧めは2010だけどな
2012だとDirectX使ってデバッグしててどっかで止まるとOSハングしてると思うんだけどそれがクソ長くてな・・・
まぁ2010でも有るけど本当に少しの間だけだしそんなに問題ないと思う
0848名前は開発中のものです。
2013/12/13(金) 16:55:16.40ID:yPXDpUWi学校の先生の話だがコンパイル時の最適化はたぶん一番良いが、それ以外が駄目過ぎて嫌だし、業界ではあまり使われて無いから学校では教えるのはVisualStudioにしてるって言ってた
0849名前は開発中のものです。
2013/12/13(金) 16:55:35.52ID:ZOsgrDk9参考にしてる本が2010で解説してるなら、2010使った方がバージョン間の差で躓かないだろうからその方がいいだろうな。
別に躓いても何とかするわ、っていうなら2013。
2012と2013は全体的にマイナーバージョンアップって感じだし。(C++以外の部分でも)
2008は古すぎるので、これから初めて勉強するためのチョイスとしては微妙。
C++も言語的にだいぶ変わってるし。
0850名前は開発中のものです。
2013/12/13(金) 16:59:57.71ID:gwcCO4DL全部無料なんですから全て試してみて
一番使いやすいのを選べばいいでしょう
0851名前は開発中のものです。
2013/12/13(金) 17:12:47.40ID:1zN0lg6G非常に参考になるアドバイスありがとうございました
0852名前は開発中のものです。
2013/12/13(金) 17:14:16.94ID:qJKKwsuEIDE含めて一番出来が悪い
autoとか便利なのが使える2012以降が一番おすすめ
0853名前は開発中のものです。
2013/12/13(金) 17:21:03.28ID:ZOsgrDk9>2012だとDirectX使ってデバッグしててどっかで止まるとOSハングしてると思うんだけどそれがクソ長くてな・・・
同じ現象かどうかわからんのだけど、Win8+VS2012+DX11に変えてから、windowsキー無効化するのにLowLevelフックするコード入れたら、
ブレークポイントで停止がやたら重かったり、キーボードやマウスが操作困難になるくらい重くなる現象が起きるようになったな。
少なくともVista+2010+DX9で、そのWindowsキー無効化コード使ってたときは、そういうことは起きてなかったと思うんだが、
色々環境もコードも変え過ぎたせいでVS2012が原因かは不明だけど…。
0854名前は開発中のものです。
2013/12/13(金) 22:26:37.04ID:bZRU5jbh大盛り牛丼的なバランス感
0855名前は開発中のものです。
2013/12/13(金) 23:07:49.54ID:YVFmKnNN0856名前は開発中のものです。
2013/12/14(土) 00:29:30.28ID:BWVGq0Lz0857名前は開発中のものです。
2013/12/14(土) 01:20:46.86ID:18gxxa+X0858名前は開発中のものです。
2013/12/14(土) 15:44:43.20ID:77xNKlZ2> autoとか便利なのが使える2012以降
C++0x 対応開始したんだっけか。
2010出来が悪いって言ってんのは共通プロパティページの事かな。
確かに方式急に変わったので困るは困る。2012でまた戻ったの?
あと2008はインテリセンスが効かなくなるから、その点では2010のの方が良く無いか?
0859名前は開発中のものです。
2013/12/14(土) 16:03:45.26ID:NX4+jWoQ0860名前は開発中のものです。
2013/12/14(土) 17:31:13.06ID:6c6wSBeFC++11正式対応しだしたのは2012からだけど、tr1として2010からそこそこ入ってるがな。
でも2010使ってた当時は2013あたりにはとっくにC++11対応完了してると思ってたのに…。
なんて様だ…。
0861名前は開発中のものです。
2013/12/15(日) 09:15:17.88ID:uT8JLcvH0862名前は開発中のものです。
2013/12/15(日) 11:17:55.55ID:1GmHMFtI0863名前は開発中のものです。
2013/12/16(月) 00:17:39.25ID:BoC0cUAD2013なら治ってるかな
0864名前は開発中のものです。
2013/12/16(月) 01:05:32.19ID:eFKKem1z0865名前は開発中のものです。
2013/12/18(水) 08:06:15.13ID:gVPR/3Zu普通Lvで上がる基本能力に装備やスキルの+とか足してって計算すると思うんだけど
攻撃力とか防御力とか項目多いから毎フレーム計算するわけにはいかないし、
かといって装備時やスキル習得時に加算しようとすると、その装備やスキル内容作ってないとダメだし
なにか良い方法はないかねぇ
0866名前は開発中のものです。
2013/12/18(水) 08:26:55.55ID:ricpehTA0867名前は開発中のものです。
2013/12/18(水) 15:41:36.51ID:EZIDHhNq0868名前は開発中のものです。
2013/12/18(水) 15:58:15.94ID:WSnzChgu再計算する処理を作っておいて、いつでも「そのデータが必要になったとき」に呼び出してる。
処理の量は多くなるけど、これが原因でフレーム落ちしたという経験はまだない。
10や20のパラメータをキャラクター数百体計算させてもたぶん余裕。
ただし2D。3Dは描画で時間がかかってて、ほかの処理にあまりまわせないなんてことはあるのかもしれない。
0869名前は開発中のものです。
2013/12/18(水) 17:27:55.00ID:gVPR/3Zu人数分ループとかさせると行にして500行とかになるもんな・・・
0870名前は開発中のものです。
2013/12/19(木) 02:16:59.08ID:pR63irZPだったら個々のステータスは変数でもいいんじゃね
0871名前は開発中のものです。
2013/12/19(木) 07:51:07.32ID:hJCmMtxJ仮定が極端すぎじゃねw
0872名前は開発中のものです。
2013/12/19(木) 10:04:21.75ID:euV8h7sFグラはテキストベースです!とか、ステータスの種類自体が1000項目あります!とかならアレだがw
まーアクセサ経由にしてお茶を濁しておくね、俺なら。んで後で本当に「ステ処理が原因で重い」って状況になったら、差分処理なりポーリングなり仕込む。
当然関数1個挟む事になるからその分のオーバーヘッドはあるけど、そのコストはもう割り切るわ。
それを悩むべきタイミングを先延ばしにできるというメリットで十分ペイできると俺は思うで。
0873名前は開発中のものです。
2013/12/19(木) 10:28:33.61ID:pJOY1Grx敵の最大数×ステータス数で…うほっ
0874名前は開発中のものです。
2013/12/21(土) 14:30:14.30ID:AGiYWayc0875名前は開発中のものです。
2013/12/21(土) 15:01:24.06ID:wdGDIJgRハードも9以降の物なら大丈夫だし
0876名前は開発中のものです。
2013/12/21(土) 18:28:48.07ID:x0po72ng固定パイプライン使ってないけど。
0877名前は開発中のものです。
2013/12/21(土) 21:06:16.05ID:AGiYWayc0878名前は開発中のものです。
2013/12/22(日) 01:00:07.09ID:1+swQorcAPI的にはDirectX11の方が整理されてて使いやすくはなってる。
デバロスもないし。
自前で2D描画処理書くんなら9の機能で十分だから、XPをサポートしたいっていうんなら9でも良いと思う。
10や11の機能を2Dに応用はもちろん出来るんだけど、2Dゲーにはオーバースペック過ぎて必要ないかな俺的にだけど。
0879名前は開発中のものです。
2013/12/23(月) 16:10:01.81ID:W/7UABWQhttps://directxtk.codeplex.com/
リンク先にあるDirectXTexも併用したほうが楽かも
0880名前は開発中のものです。
2013/12/23(月) 16:15:39.79ID:W/7UABWQ人に勧めといてあれだけど・・いつの間に
更にC++版XNAみたいになってきとる
ついでに簡単なXNAモドキなフレームワークでも提供してくれればいいのに
0881名前は開発中のものです。
2013/12/24(火) 09:16:42.97ID:6rDsVpQe0882名前は開発中のものです。
2013/12/24(火) 16:41:44.51ID:RffL/RYa0883名前は開発中のものです。
2013/12/24(火) 17:42:12.75ID:e/VGuWHA当たり判定後に、ブロックにめり込まない位置(=ブロックに接する位置)に移動させたい
と言う事だとエスパー気味に
0884名前は開発中のものです。
2013/12/24(火) 18:09:20.86ID:uUpHALH30885名前は開発中のものです。
2013/12/24(火) 18:15:55.42ID:L2qvgLfJさらに言うと、その判定の後でどのくらいめりこんだかの差分取ってキャラの位置戻すだけだよな。
0886名前は開発中のものです。
2013/12/24(火) 18:27:20.28ID:fizHiSzP今まで俺は何をやってたんだ!と思っちゃうレベルに楽チン
0887名前は開発中のものです。
2013/12/24(火) 19:32:38.32ID:L2qvgLfJ0888名前は開発中のものです。
2013/12/24(火) 20:47:42.39ID:JHDIB0t6以前に作ったことはあるんだけど、色々と問題(課題)もあって
解決の糸口が見つからないままなんだよ。
0889名前は開発中のものです。
2013/12/24(火) 21:08:19.97ID:GKhtGcW20890名前は開発中のものです。
2013/12/24(火) 21:29:12.06ID:SJQjNZFD1フレームあたり移動距離の途中でぶつかることがあるからね
俺は悩んで結局投げた経験あるわ
シューティング系のコモン探して参考にしてみたらどうかな
0891名前は開発中のものです。
2013/12/24(火) 21:29:29.81ID:JHDIB0t6例えば下図のように、斜めブロックと四角ブロックが並んでいて
A ______
/| |
/_|_B _|
A地点からB地点まで1フレームで移動した場合に、右の四角ブロックだけ判定して移動を戻してたから
両方のブロックの間に挟まってしまってた。
0892名前は開発中のものです。
2013/12/24(火) 22:26:58.00ID:jnOze0P52Dのアクションゲーでのブロック判定とか超絶黒歴史を思い出させるな!
1フレームでの移動距離を一気に移動させるんじゃなくて1フレームの中で少しずつその距離になるようにループで移動させて
表示的には1フレームで移動してるけど内部的には1フレーム内で何回も移動してるとか
そんなクソ処理しか書けなかった黒歴史は忘れさせてよお!
ちなみに今でもどうするのが正解かわからん
0893名前は開発中のものです。
2013/12/24(火) 22:35:04.90ID:bbz6Sep5なお壁に向かって走ると重くなるもよう
0894名前は開発中のものです。
2013/12/25(水) 03:10:45.93ID:0d//DW0c0895名前は開発中のものです。
2013/12/25(水) 04:06:58.17ID:FupEURWJ「ぶつかったら移動速度を-1して再判定」でも問題なく動く。
さすがに数百個でそれやったら重かったので、二分木もどきに改造したけど。
0896名前は開発中のものです。
2013/12/25(水) 08:58:32.32ID:xJny3ejoif( atari() )
{
pos_x -= idouryou;
}
ってやるから駄目なんだろ
for(int i=0; i<idouryou; i++)
{
pos_x++;
if( atari() )
{
pos_x--;
}
}
ってやればいいじゃん
0897名前は開発中のものです。
2013/12/25(水) 08:59:37.02ID:xJny3ejo向いてないから死んだ方がいいよ
0898名前は開発中のものです。
2013/12/25(水) 09:07:38.39ID:nCzBXRKQこれって>>892が発狂してたやつと同じやり方じゃね?
後、せめてbreak書こうぜ(ドヤッ
>>897
この程度も思いつかないとかなんなの
向いてないから死んだ方がいいよとか書いてるくせに
この程度の処理を軽くすることすら思いつかないとかなんなの
向いてないから死んだ方がいいよ
0899名前は開発中のものです。
2013/12/25(水) 09:20:17.32ID:9WcWfovO生 同 .じ . /´ | (ゝ___) い
.し 士 .レ .__/'r-┴<ゝi,,ノ ro、 は、
.な で .ベ ∠ゝ (ゝ.//` ./`| }⌒j
.い し .ル } ⌒ /`ヽ、_∠l,ノ ・ヽ´
.! ! か の / ´..:.} >、、___, .r、 ソ、`\
/ ..:.:.} / |∨ ` ̄
/ ..:.:./ | 丶
/ _、 ..:.:.:.{ .{.:.:. \
{ ..:Y .ゝ、 {.:.:.:.:. ヽ
|、 ..:/ 丿 .:〉 >.- ⌒ . ヽ
/ {. ..:./ ソ ..:./ .( ..:.:.:` ..:}
./..:.:}.:.:./ ヘ、 ..:./ .\ ..:.:r_,ノ、.:.:}
./..:.:/|.:/ {.:./ X.:.:}.} X X
/..:.:/ .}.:| }:/ .Y丶ヽ Y.:Y
. __/.:/ { } 《.〈、 _,,__>.:》丶 Y.:\
/.:.:.:.:.::/ !.:.:ゝ ゝ.:. ̄ヾ ´:.:.:.:.:.:.:.:.:ヾゝ \.: ̄>
0900名前は開発中のものです。
2013/12/25(水) 09:39:38.15ID:Zg4NIAsR男は黙ってcontinue
0901名前は開発中のものです。
2013/12/25(水) 10:08:54.97ID:FupEURWJ0902名前は開発中のものです。
2013/12/25(水) 10:09:07.15ID:MUlFxvaY上にあるし…うわぁ…
0903名前は開発中のものです。
2013/12/25(水) 10:17:42.98ID:gB5lV3uA0904名前は開発中のものです。
2013/12/25(水) 10:25:40.90ID:CUbWJvC8どっちの軸か、じゃなくて方向ベクトルに対して逆向きにするだけじゃないの?
0905名前は開発中のものです。
2013/12/25(水) 11:11:41.57ID:FupEURWJ基本は、めり込んだ距離の短い方に合わせる。
ただ個人的には、よほど差がなければy方向(上下)に優先的にずらす方が好み。
0906名前は開発中のものです。
2013/12/25(水) 11:20:22.37ID:xJny3ejoxとyは別々に処理する
xを処理したときはxを戻せばいいし
yを処理したときはyを戻せばいい
この程度も思いつかないとかなんなの
向いてないから死んだ方がいいよ
0907名前は開発中のものです。
2013/12/25(水) 11:49:07.39ID:j1ogVw80それXとYどっちを先に処理するかって事だから903の言ってるXとYのどっちにするかという問題の解決にまったくなってないわけだが。
0908名前は開発中のものです。
2013/12/25(水) 12:04:44.50ID:nCzBXRKQ無駄な繰り返しをしないように
typedef struct position {
int x;
int y;
} position;
position pos;
for(int i=0; i<movement; i++) {
pos.x++;
if(hit()) {
pos.y--;
break;
}
}
このほうが無駄な繰り返しが発生しなくなるからその分軽くなると思うんだが
continueだと結局無駄に繰り返すから意味無いし
0909名前は開発中のものです。
2013/12/25(水) 12:07:03.91ID:MUlFxvaY処理分岐の中に入るかどうかで決まる
0910名前は開発中のものです。
2013/12/28(土) 14:45:57.99ID:aLH6Im8H0911名前は開発中のものです。
2013/12/28(土) 15:33:11.78ID:XE/X4C7O0912名前は開発中のものです。
2013/12/28(土) 15:41:39.94ID:uwB+NH0s0913名前は開発中のものです。
2013/12/28(土) 15:51:47.55ID:aLH6Im8H0914名前は開発中のものです。
2013/12/28(土) 16:11:33.83ID:XE/X4C7O0915名前は開発中のものです。
2013/12/28(土) 16:21:18.45ID:aLH6Im8Hごめんorz
とりあえずソース書いてもらえると助かる
0916名前は開発中のものです。
2013/12/28(土) 16:59:11.51ID:i2BOVD4X0917名前は開発中のものです。
2013/12/28(土) 17:23:47.64ID:XE/X4C7Oメンバ変数とか関係なく、普通に配列へ代入するつもりでやる。ほんと普通に。
MyClass :: MyClass()
{
for(int i=0; i<MAX; ++i) array[i]=0;
}
0918名前は開発中のものです。
2013/12/28(土) 20:05:03.83ID:pCtwY2nWdefault デファウルト
0919名前は開発中のものです。
2013/12/28(土) 22:12:30.45ID:os0Do0OO引数付きコンストラクタをもったクラスの配列とかもありえるから
>>917のやり方で統一するのは一貫性があって良いと思う
0920名前は開発中のものです。
2013/12/29(日) 13:02:30.27ID:iivLZ8bD> プリミティブ型なら違う楽な書き方もあるけど
よかったらそのやり方教えて
0921名前は開発中のものです。
2013/12/29(日) 13:05:59.62ID:hFtnegM4「なぜ>>917が推奨されてるか理解しないまま、見た目がそれっぽいからという理由だけで楽な書き方を導入してその後どつぼにはまる」
流れ
0922名前は開発中のものです。
2013/12/29(日) 16:46:30.01ID:HeVOdclw>>919のこともあるしそもそもC++なんだから使うなって感じだけど
0923名前は開発中のものです。
2013/12/31(火) 07:47:28.85ID:bQaohfnRモチベーションはどうやって保ってますか
0924名前は開発中のものです。
2013/12/31(火) 07:58:30.67ID:W1ftg64k身体動かすと視床下部が刺激されてやる気出るし
0925名前は開発中のものです。
2013/12/31(火) 10:03:52.57ID:B8nb+CLa勉強とか仕事とか。
現実逃避してこっちをやりたくなる。
0926名前は開発中のものです。
2013/12/31(火) 10:09:41.40ID:MF4G8rMr0927名前は開発中のものです。
2013/12/31(火) 14:52:14.77ID:sUWQv5G4ロード画面でセーブデータのプレイ時間とかちょっとした情報を表示するにはどうすればいいのかな?
というか俺のシリアライズのやり方次第で詰んでる可能性も?
シリアライズ時にゲームオブジェクトから直接ストリームに順番に書き出して、
デシリアライズ時にゲームオブジェクトに順番に直接復元する方式にしちゃったんだけど、
もしかしてここは、ゲームオブジェクトのデータから「セーブデータクラス」をいったん生成して、
そいつをシリアライズ対象にして、復元時はセーブデータクラスの値からゲームオブジェクトを復元しないといけなかった?
でもそうするとポインタの復元が難しいというか、Mementoパターンとか深く考えずに、
Boostシリアライズのパワーに頼ってしまったんだが、セーブデータからは極力ポインタを
排除するようにしたほうが良かったんだろうか
0928名前は開発中のものです。
2013/12/31(火) 14:54:28.55ID:LVQwhj610929名前は開発中のものです。
2013/12/31(火) 15:23:07.56ID:sUWQv5G4迅速な回答ありがとうございます!
なるほど「セーブデータクラス」ではなく「セーブデータヘッダークラス」で十分なんですね、
これにBoostパワーで得たストリームをくっつけてみます、ありがとうございました
0930名前は開発中のものです。
2014/01/01(水) 23:41:19.87ID:ZZixNcFD0931名前は開発中のものです。
2014/01/01(水) 23:47:52.86ID:TDYNLr8Cboostなんて大して便利ではないことに気づくだろう
0932名前は開発中のものです。
2014/01/03(金) 23:44:33.00ID:SeRszv4Pセーブデータ用のクラスの作ってセーブする時にデータぶっこんでバイナリしゅわーんして
ロードする時にクラスのインスタンスの先頭アドレスあたりからバイナリどかーんってやってその後しこしこ値を取り出せたらかっこいいんだけど
vectorとか可変長データ扱えなさそう
0933名前は開発中のものです。
2014/01/04(土) 01:24:45.05ID:T7k3xx9eBoostパワーでしこしこシコりまくってドカーン、アヘーって保存したほうがいい
ポインタに関連する全てが壊れるが
レス数が900を超えています。1000を超えると表示できなくなるよ。