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/
0537名前は開発中のものです。
2013/10/22(火) 17:23:07.33ID:Hu98QIBo0538名前は開発中のものです。
2013/10/22(火) 18:00:19.46ID:ZgWiXBx7ハーブサッターはAって言ってたな(gotwの7番、理由はコンパイル時間)
俺はよくヘッダ間のinclude関係忘れるからcpp側でも全部includeするけど
STLとかベンダでまちまちらしいし
0539名前は開発中のものです。
2013/10/23(水) 23:23:36.36ID:lFn9LRyCそれだと複数のボタンが同時に押されている場合、効果が相殺されてしまう
例えば上ボタンと下ボタンの両方が押されていると
y--した後に、y++するのでy座標はじっとしたままになる
2行目以降はifではなく、else ifにした方がいいよ
0540名前は開発中のものです。
2013/10/24(木) 00:30:32.21ID:BVtLeqeM上下同時押しの時に相殺された方がいいかどちらかが優先された方がいいかは好みの問題じゃない?
それより斜め移動の速度が2の平方根の二倍になってるほうが問題あるだろ
ネタにマジレスしてしまったのだろうか
0541名前は開発中のものです。
2013/10/24(木) 00:55:05.09ID:1hhrwRIp0542名前は開発中のものです。
2013/10/24(木) 01:05:12.14ID:vQRNGmRF0543名前は開発中のものです。
2013/10/24(木) 05:23:32.15ID:SKhb4znW結局作りたいものによる。
0544名前は開発中のものです。
2013/10/24(木) 07:07:41.21ID:vgxDEvxF0545名前は開発中のものです。
2013/10/24(木) 09:00:36.97ID:PzLm+IDYまぁケースバイケースか
0546名前は開発中のものです。
2013/10/24(木) 10:10:01.88ID:lxEo0VYBこれ、例えば環境具体的にして、winならば GetAsyncKeyState 使う等して、要は「その時のキーの状態を見る」って前提があれば
8方向移動でも2行で終わるし、
そうでない場合でも必要なキーがわかってるなら、前提としてこの関数呼び出す時点で複数のキー状態わかるようにしとけば
こうはならないかなと
0547名前は開発中のものです。
2013/10/24(木) 10:33:48.39ID:uLBv2hzmマス型じゃなければ大なり小なりキー処理とは別の移動衝突判定作るだろうし
移動量を加算しておくだけ。
0548名前は開発中のものです。
2013/10/24(木) 14:33:17.42ID:XeWeKceC斜め移動の時の正規化の手間が一度ですむ
int index = 上ボタン | (下ボタン << 1) | (左ボタン << 2) | (右ボタン << 3);
const VECTOR &v = ARROW_VECTORS[index];
0549名前は開発中のものです。
2013/10/24(木) 16:57:55.12ID:ImWflR8Kvectorと言うかbitでそれ表して同じ流れってのは昔からある方法
0550名前は開発中のものです。
2013/10/24(木) 16:59:12.34ID:ImWflR8K>>548 で合ってる。それ昔からある方法の一つ。キー入力に限らず。
0551名前は開発中のものです。
2013/10/24(木) 17:32:47.33ID:BIU10uO4互換が案外面倒なんだよねえ
1~9という数値に、数学のベクトル的なセマンティクス持たせるのが難しいから
専用のゴリ変換マッピングをしなければならないという
0552名前は開発中のものです。
2013/10/24(木) 17:56:17.80ID:vgxDEvxF0553名前は開発中のものです。
2013/10/24(木) 18:16:10.12ID:FZTpGVKH0554名前は開発中のものです。
2013/10/24(木) 18:16:35.21ID:ImWflR8Kどんなの想像してるかアレだけど、正規化された二軸のベクトルと思えばそんな大変でも無いと思うけど
0555名前は開発中のものです。
2013/10/24(木) 18:18:01.30ID:ImWflR8K例えば4ビットそれぞれに意味を持たせて、それで得られる16通り分の定数を配列から拾ってるだけ
0556名前は開発中のものです。
2013/10/24(木) 18:23:07.69ID:ImWflR8Kk |= 上?8:0;
k |=下?4:0;
k |= 左?2:0;
k |= 右?1:0;
で、kには0から15の16通りの値が決まるから、
配列に方向値の構造体とか予め入れておいて取り出すのような。
0557名前は開発中のものです。
2013/10/24(木) 18:27:35.86ID:Rg5/XFmoいろいろ考えるんだなw
0558名前は開発中のものです。
2013/10/24(木) 18:49:05.84ID:FZTpGVKHif( 上ボタン ) y--;
が
if( 定数==上 ) y--;
みたいな感じになるの?
0559名前は開発中のものです。
2013/10/24(木) 19:25:19.00ID:euKSvHthifすら使わない
関数ポインタの配列でおk
0560名前は開発中のものです。
2013/10/24(木) 19:29:40.79ID:euKSvHth0561名前は開発中のものです。
2013/10/24(木) 19:40:35.94ID:xcrne0fV0562名前は開発中のものです。
2013/10/24(木) 19:42:29.47ID:FZTpGVKH関数_右 x++
関数_上右 y--;x++
みたいなのを作って関数ポインタ配列に入れて
関数ポインタ配列「キー入力値」
みたいな感じでアクセスするのか。なるほど
0563名前は開発中のものです。
2013/10/24(木) 19:42:49.17ID:IxTrXF7eでも使うのって秒間60回前後だろうし分かり易ければ何でもいいようなと思う反面
どうせベンチに現れない誤差でしかないのに
テーブルだとキャッシュ汚染するんじゃないだろうかと心配もしてしまう貧乏性が情けないわ
0564名前は開発中のものです。
2013/10/24(木) 19:56:12.67ID:euKSvHthキーリピートのこと?
0565名前は開発中のものです。
2013/10/24(木) 20:05:28.77ID:lxEo0VYBそう。
俺はif(keycount[num]%20==1)
みたいな感じでやってるけど
最初からカウントするなら利点消してそうだし
>>563のスイッチだと見にくくなりそう
0566名前は開発中のものです。
2013/10/24(木) 21:13:20.89ID:yWybbfK/0567名前は開発中のものです。
2013/10/24(木) 21:18:52.98ID:ImWflR8K0568名前は開発中のものです。
2013/10/24(木) 21:25:16.84ID:yWybbfK/キーリピートのカウンターが60になってたら1秒経過したことにしたりするんでしょ
vsync待ちしないで全速力でぶん回してたらカウンターが60になってても1秒経過したことにならないよね
while(1)
{
checkKey();
calc();
draw();
flip();
waitVsync();
}
0569名前は開発中のものです。
2013/10/24(木) 21:42:18.44ID:ImWflR8Kwinで言うと、QueryPerformanceほげほげ系の関数
0570名前は開発中のものです。
2013/10/24(木) 21:48:58.06ID:euKSvHthリピートはねー、俺の場合はそこで実装してないんだよね
キーボードとジョイスティックを管理するクラスでやってるので
リピート付きの取得関数と無しの関数をもってて
受け取る側はリピートのこと考えなくていい
0571名前は開発中のものです。
2013/10/24(木) 21:49:20.44ID:BIU10uO4それなりに工夫のしようはあると思うけど
たとえば、「9の逆方向」とかがアルゴリズムで処理しにくいよねってこと
あ、いや、まぁ、逆方向なら 10 - 値 でいいんだけど、
左右反転とか斜め反転とか、ゲームだといろいろとそういう数学的な処理が
必要になってくると思うから、ベクトルと相互変換できるのセマンティクス無視の
ゴリマッピングメソッドは用意しておいた方がやりやすいよねってこと
0572名前は開発中のものです。
2013/10/24(木) 21:59:29.58ID:FZTpGVKH各キー毎に押しっぱなし処理があるから全部に関数_上押しっぱとか作ってられないし…
0573名前は開発中のものです。
2013/10/24(木) 22:07:04.97ID:ImWflR8K俺が昔実装した方法で言うと、入力ハンドリングの処理はキーの状態変化とその経過時間をFIFOキューに溜めていくだけにして、
入力に対して何か行動する処理はキューから結果をもらうって方法を取った。
短い時間の押し具合と、長押しや押しっぱなしの判断は、キューから取得したステートで判断てかんじ。
ポイントは経過時間(要件的には時計で言う時間でなくても良い、メインループの経過カウンタでも良い)で判定って所。
0574名前は開発中のものです。
2013/10/24(木) 22:15:34.16ID:euKSvHthいろいろやり方あるけど俺はダブルバッファリング派
前回と今回が違う値だったら押した瞬間
0575名前は開発中のものです。
2013/10/24(木) 22:44:08.63ID:FZTpGVKHキー入力関数ポインタ[16]={関数_上,関数_下,…}
さっき上で話してたやつ。こんなのがあるとして
関数_上()
{
if(押しっぱ)
{
}else
{}
}
みたいなことしてたら全部のキー関数でif文しないといけないじゃない?
そこで「関数_上押しっぱ」みたいなのを作りたいんだけど
そうするとキー入力関数ポインタじゃアクセスできなくなる…
どういう感じに判別して処理を変えればスマートだろうか
0576名前は開発中のものです。
2013/10/24(木) 22:55:12.21ID:ddNDzrdz引数で「その瞬間のみ」というフラグを立てれるようにしてる。
キーリピートや、10フレーム以上押しっぱなしで真にする、とかも同じような感じで取れる
0577名前は開発中のものです。
2013/10/24(木) 22:58:26.75ID:euKSvHthやりたいことによって違うので、それだけの情報じゃ何とも言えんが例えば
if(押しっぱ) おしっぱ関数ポインタ[キー入力値];
else おした瞬間関数ポインタ[キー入力値];
とか?
0578名前は開発中のものです。
2013/10/24(木) 23:09:59.81ID:FZTpGVKHそれだと「上をおしっぱの状態で右が初めて押された時」とかができないんだよね
そんなの使う時あるの?って聞かれたらなんとも言えないけど…
0579名前は開発中のものです。
2013/10/24(木) 23:13:14.62ID:euKSvHthコマンド入力だな
それなら>>573のやり方がいい
0580名前は開発中のものです。
2013/10/24(木) 23:13:24.13ID:yWybbfK/カウンタが1だったら始めて押されてたことにすればいいんじゃ
0581名前は開発中のものです。
2013/10/24(木) 23:18:48.87ID:euKSvHth単純ならそれでいいが、複雑な処理になると死ねる
格闘系のコマンド入力を例にすると
間に変なキーが挟まっても処理できるように、履歴を参照できないとキツイ
0582名前は開発中のものです。
2013/10/24(木) 23:41:07.44ID:ddNDzrdzそれなら自分が前にやったのは、>573とだいたい同じっぽい。
0583名前は開発中のものです。
2013/10/25(金) 01:10:12.99ID:EGV5trEu受理したら発動みたいな
0584名前は開発中のものです。
2013/10/25(金) 02:46:25.90ID:Wzto7AEP0585名前は開発中のものです。
2013/10/25(金) 09:05:50.59ID:FRzjSMWKその監視側が履歴を必要とするはずだから、多分それは遠回りな実装。
具体的にコードパス説明してみ
0586名前は開発中のものです。
2013/10/25(金) 11:25:43.16ID:U8abS4cv0587名前は開発中のものです。
2013/10/25(金) 11:58:14.26ID:t+n4YTsO使い分けるも何もテンプレートとautoは全く別
std::vector< std::map<std::string, int> > map_vec;
こういうのがあったとしてイテレータを取るには
std::vector< std::map<std::string, int> >::iterator i = map_vec.begin();
と長ったらしく書かないといけないが、autoで型推論させると
auto i = map_vec.begin();
でいいわけ
0588名前は開発中のものです。
2013/10/25(金) 12:06:29.04ID:0QlHYD53勘違いしてる可能性があるから一応念のため言っておくけど
auto型っていう型がある訳ではないからね
0589名前は開発中のものです。
2013/10/25(金) 12:51:45.87ID:SyA4+mXA0590名前は開発中のものです。
2013/10/25(金) 12:54:36.09ID:bYWNxFd90591名前は開発中のものです。
2013/10/25(金) 13:00:27.54ID:t+n4YTsO0592名前は開発中のものです。
2013/10/25(金) 21:11:21.10ID:eOV2PGNkvoid hoge(auto a,auto b);
とかでもいいのかなーと
0593名前は開発中のものです。
2013/10/25(金) 22:18:46.67ID:W9GSrEjCvoid hoge(T1 a, T2 b);
0594名前は開発中のものです。
2013/10/25(金) 23:24:22.57ID:NxjXgve5それに近い使い方は戻り値のautoかな
しかし確かに>>593みたいな糖衣構文が来ても悪くないような気もするね
ただ、C++のテンプレートだと特殊化が命みたいなとこもあるからなぁ
0595名前は開発中のものです。
2013/10/29(火) 21:52:21.38ID:o1ek35hj特殊化扱いになるようにしてくれたら良いのに
思わぬとこで「オーバーロードが曖昧です」とか言われても焦る
0596名前は開発中のものです。
2013/10/30(水) 08:34:18.07ID:iB7yIVWaせっかく美しく宣言と定義わけて書いてるのに
0597名前は開発中のものです。
2013/10/30(水) 08:50:47.21ID:r4Gm8hOq0598名前は開発中のものです。
2013/10/30(水) 09:45:57.87ID:XbSRzxLq0599名前は開発中のものです。
2013/10/30(水) 15:47:31.26ID:effWvIu+自分のコンパイル単位ではテンプレートの定義をインクルードしないっていう
キーワードは追加されたけど、ぶっちゃけどういう時に使えばいいのかわからん
0600名前は開発中のものです。
2013/11/05(火) 22:56:36.90ID:CTkkt81/RPGの作り方を解説してみるさ
そしたら、それほど難しくないことが解かることでしょう
0601名前は開発中のものです。
2013/11/05(火) 23:48:42.84ID:Jv0Ou+ZA0602名前は開発中のものです。
2013/11/06(水) 00:29:19.16ID:vBtBCg2n0603名前は開発中のものです。
2013/11/06(水) 01:18:53.76ID:SItXAGUWゲーム製作云々より自画自賛の解説サイトの宣伝に夢中で
あれがやりたいだのこれをやってみせるだのと
手を動かさず口だけ妄想と自分語りしか出来ないで
複数のスレッドに目をつけては書き込みするタイミングを伺っている
0604名前は開発中のものです。
2013/11/06(水) 01:29:00.96ID:lzm7kGb8こことあそこがメインフィールドだと思う
今日(もう昨日か)は文体だけで識別することに成功したから
ようやく俺もゲ製の一員になれたような、そんな気分になれたよ
0605名前は開発中のものです。
2013/11/07(木) 21:31:07.69ID:od91QRId俺のは280kほど。ちなみに画像とか音声とかは別にしてある。
0606名前は開発中のものです。
2013/11/07(木) 22:21:58.37ID:zo+10xy10607名前は開発中のものです。
2013/11/08(金) 08:52:56.12ID:ED1N71tRだからまずはノベルゲームの作り方から入ったら?
0608名前は開発中のものです。
2013/11/08(金) 08:57:49.11ID:MnmZsnwx0609名前は開発中のものです。
2013/11/08(金) 10:13:29.89ID:ED1N71tRつ〜かプログラムの作成難易度はノベルゲーム→アドベンチャーゲーム→RPGなんだがな
0610名前は開発中のものです。
2013/11/08(金) 11:21:11.70ID:ED1N71tR0611名前は開発中のものです。
2013/11/08(金) 11:51:10.76ID:MnmZsnwx他ジャンルと比べてプログラム自体が難しいわけじゃないと思うんだよね。
0612名前は開発中のものです。
2013/11/08(金) 12:23:58.88ID:ED1N71tR0613名前は開発中のものです。
2013/11/08(金) 13:40:12.68ID:+NTW1cVSシーンの管理処理とか、表面的に目立たない屋台骨の部分について最初から自分の中で定番化するような物考えて持ってると、
正直どうとでも応用効くよな。
で初心者の人とか、初心者が開いた入門講座みたいな物コピペしてただ覚えたような人だと
その部分が自分の中で定式化出来ないから「難しい、わからない、思い付かない」になるのかなと。
あくまで一般的な話だけど。
0614名前は開発中のものです。
2013/11/08(金) 14:24:03.36ID:MnmZsnwxシーンの変更というよりは、ミニゲーム2つ3つ作るようなもんじゃん?
もちろん使い回すコードはあるにしてもさ。
0615名前は開発中のものです。
2013/11/08(金) 15:08:13.78ID:oXMxQi+3一桁の足し算を100回やるのは面倒ではあるけど難しくはならないだろう?
0616名前は開発中のものです。
2013/11/08(金) 15:08:15.81ID:MJ/UJDciえんいー
0617名前は開発中のものです。
2013/11/08(金) 20:11:46.11ID:zbPsZNK1ある程度適当な文法でもエラー出力作ってなかったら通っちゃうだろうし
外部に置くってなると他人に触らせること前提ってイメージがある
0618名前は開発中のものです。
2013/11/09(土) 02:42:05.48ID:khiWgQzYけれども基本的には、自作する事で得られる様々な知識や知恵の方が大事かと
まあ簡単なノベルゲームやアドベンチャーゲームの一つ二つ作るつもりで挑むべし
つーか、これらのゲームも基本的にはスクリプトを使ってると思った方が良いかと
0619名前は開発中のものです。
2013/11/09(土) 10:47:13.41ID:khiWgQzYマルチスレッドを使う方法もあれば、タスクシステムを使う
方法もある。フラグや分岐や関数ポインタでえっちらおっちら
やったっていいし。どの方法にも一長一短がある。どうせ内部で
どんな挙動をしているかは作ったプログラマにしか分からない
んだし、自分の好きなやり方でやるべし。
0620名前は開発中のものです。
2013/11/09(土) 11:16:02.17ID:khiWgQzYそういう人たちにはむしろ組み込みスクリプトを教えた方が良いのかもしれんな
組み込みスクリプトを使っている人達には迷惑かもしれんが
0621名前は開発中のものです。
2013/11/09(土) 11:31:05.04ID:NHXYgnem主に共有したいデータのやり取りとか
あと、コンソールゲームと違ってループを意識して状態を保存できないといけない
Boostにコルーチンあるけど、自分のに組み込むほどの理解には至れないなー
描画を別スレッドにするのでも良いけど、マウスゲーのように画面と操作(MV)が密接に
関わっているような作りだと、フレムワーク自分で作るのは骨だろうね
0622名前は開発中のものです。
2013/11/09(土) 11:53:07.42ID:r/b1un+I0623名前は開発中のものです。
2013/11/09(土) 12:59:59.47ID:khiWgQzY俺の場合、メインスレッドを用意して、シーンごとに別のループを作ってるが。
この方法の問題点は同期処理関連をおろそかにするとフリーズする事かな?
Windows7以降だとそうでも無いんだが、昔のOSだとOSごとフリーズするので、
デバッグでは苦労した覚えがある。
0624名前は開発中のものです。
2013/11/09(土) 14:51:11.85ID:xPktsMNgごめん、なんか引っ掛かった。
> シーンの変更はオブジェクト指向で実現しようとすると難しいなぁ
> 主に共有したいデータのやり取りとか
それ、全体としての実装手法の話と、アプリケーション固有の(自分自身の)設計の話が切り別れて無い印象を受けた。
もしかして固定的な何か一つの実装をイメージしてないか?
複数スレッド使う事や全体としてOOの考え方で実装する事と、シーンの変更がしんどいか否かはレイヤの違う話かと。
0625名前は開発中のものです。
2013/11/09(土) 18:30:15.80ID:5bA+RcL70626名前は開発中のものです。
2013/11/09(土) 18:34:25.44ID:khiWgQzY0627名前は開発中のものです。
2013/11/09(土) 19:32:06.23ID:OGQuUKSq0628名前は開発中のものです。
2013/11/09(土) 19:34:22.11ID:khiWgQzY一度に二重三重のシーン変更処理が入った場合にバグを発生させる可能性が高くなるからな。
シーンごとに別ループで管理しておけば、少なくともそういったバグが出る可能性は無い。
0629名前は開発中のものです。
2013/11/09(土) 19:41:29.60ID:8OBkvM6+0630名前は開発中のものです。
2013/11/09(土) 20:03:13.90ID:khiWgQzY0631名前は開発中のものです。
2013/11/09(土) 20:22:26.69ID:e9EdDrE00632名前は開発中のものです。
2013/11/09(土) 20:53:32.08ID:khiWgQzY0633名前は開発中のものです。
2013/11/09(土) 21:08:02.88ID:GiqQutTtバックアップするにもドライブ遅いから時間かかるし
一太郎だって安定してた4.3を使い続けたりだとか
0634名前は開発中のものです。
2013/11/09(土) 21:13:23.84ID:OGQuUKSq自分の場合、ゲームのメインループ自体の仕事はFPSの計測と負荷調整だけで、いつシーンが変更されたかなんて気にしなくていいような設計にしてたもんで……
0635名前は開発中のものです。
2013/11/09(土) 21:27:56.92ID:khiWgQzYっていうか、最近リセットボタン使ってないなぁ・・・・・・
0636名前は開発中のものです。
2013/11/09(土) 22:00:01.21ID:khiWgQzYRPGで?それは凄いな。バグの解析で頭こんがらがらない?
■ このスレッドは過去ログ倉庫に格納されています