14/02/22 05:41:07.36 zZnD13Ju.net
>>205
2分探索木を自分で作らなくても、ライブラリにあるでしょ?
B-Tree(self-balancing search tree)平衡2分探索木
B+Tree、赤黒木など
キューやスタックも、ライブラリにあるでしょ?
優先度つきキュー(priority queue)はよく使うよ
詳細はWikipediaなどで、調べて
219:名前は開発中のものです。
14/02/22 10:17:30.51 YdhdLZfz.net
>>213
なんちゃって水面は基本的にはそういう作り方だよ。バネダンパの二次元格子。
お船は、近傍の格子の頂点や面に反発させてどんぶらこさせればいいやという。
トライアル&エラーでパラメータ適当にいじって見た目の調整。おしまい
あ、リアル志向のゲームは何やってるのか知らないよ。学生時代に数値流体
やってたけど、あっちに凝り出すと際限がないからみんなどっかで折り合い
付けて端折ってそれっぽく見せてるだけだと思うよ
220:名前は開発中のものです。
14/02/22 10:56:40.26 4BDQmNHU.net
DirectComputeのサンプルをみると、パーリンノイズから低周波成分を取り除いて地面全体に繰り返し、ハイマップとして地面に適用してるみたい
221:名前は開発中のものです。
14/02/22 11:39:42.84 YdhdLZfz.net
>>216
DX7以前の頃だとテクスチャを2枚用意してマルチテクスチャにして
UV値の操作で各々のテクスチャを交差するように移動させると水面ぽく
見せられるよー的なやり方が多かったけど、あれをハイトマップにも
使う感じかな?
222:名前は開発中のものです。
2014/02/27(
223:木) 22:01:09.66 ID:XfV+syCM.net
224:名前は開発中のものです。
14/02/28 02:45:29.15 WKCAf0/q.net
>>218
鏡を見てため息をつけばいいと思う
225:名前は開発中のものです。
14/03/01 15:31:28.07 xOOTC3SX.net
c++で別のクラスの数値が欲しいときはメソッドに相手クラスのポインタ変数を持ってコンストラクタでポインタを渡せばいいのですか?
226:名前は開発中のものです。
14/03/01 15:36:42.26 ckzLhO0U.net
コンストラクタ?
227:名前は開発中のものです。
14/03/01 17:29:52.27 P6ZwcTGw.net
コンス卜ラクタはコンス卜ラクタなんじゃ…?
228:名前は開発中のものです。
14/03/01 17:49:25.00 ckzLhO0U.net
ああ理解した、メソッド→メンバか
メンバ関数にポインタ変数を渡して…何でここでコンストラクタ??って思った
229:名前は開発中のものです。
14/03/01 23:00:27.16 B/y6lyvX.net
>>220
メンバにポインタ持たせてもいいし、相手クラスを継承してしまうとか、
その数値が必要になる関数の引数に、ポインタや参照で渡したり、
数値そのものを引数で渡すだけでも、好きなのでいいと思うよ
230:名前は開発中のものです。
14/03/02 01:12:07.39 One/ooAB.net
で、どこにゲーム関係あるの?
231:名前は開発中のものです。
14/03/02 18:14:52.71 eSGAMgB8.net
暗号化した外部ファイルとかセーブファイルの拡張子ってどうしてる?
foobarとかhogeみたいに意味のない文字なのがベストなんだけど
既存で使われているdatとかsavだと既になんらかの関連付けが
されてしまってる場合がありえるよね
232:名前は開発中のものです。
14/03/02 18:30:57.68 RKme8rWA.net
ユーザが開くことを前提としないなら気にしない。
233:名前は開発中のものです。
14/03/02 18:34:29.49 eSGAMgB8.net
そうか、むしろ無しでもいいか
234:名前は開発中のものです。
14/03/02 19:12:19.16 odwxDc0w.net
というか、ユーザーでもすぐ「あ、これがセーブファイルだな」と判るようにしておいたほうがいいだろ。
データのバックアップを取りたいことあるだろうし。
235:名前は開発中のものです。
14/03/02 19:15:46.36 Oh6AuFJG.net
何でも.dbにしてる
236:名前は開発中のものです。
14/03/02 19:21:49.81 XPJItCw9.net
bin
237:名前は開発中のものです。
14/03/02 20:11:55.85 uIAHAPdg.net
URLリンク(gyazo.com)
マルチスレッドってオブジェクトリストの更新中に
オブジェクトリストを参照できないんだから意味なくないですか?
どうしてマルチスレッドで動作が軽くなるんですか?
セマフォをオブジェクト単位でかけてたらセマフォの処理で余計重くなるのでは
238:名前は開発中のものです。
14/03/02 20:20:19.85 9+Akgo4p.net
ダブルバッファで検索するんだ
239:名前は開発中のものです。
14/03/02 20:21:15.86 Oac8ta12.net
誰か使ってないですかねぇ
URLリンク(oxygine.org)
240:名前は開発中のものです。
14/03/02 20:51:20.45 uIAHAPdg.net
>>233
画面のチラツキを抑えるほうが出てきて、出てきても申し訳程度の説明しかない・・・
URLリンク(www.cs.tsukuba.ac.jp)
>◆ダブルバッファリング
> 整数を1つバッファに書き込むだけでロック/アンロックを行なっていると、 実際の並列処理では重たい。
> ロックの回数を減らすために、ダブルバッファリ ングと呼ばれる技術がよく使われる。読み手と書き手で別々にバッファをもうけ、1つのバッファの処理をしている間は、ロックを行なわない。
リストで1つのオブジェクトを更新してる間は「描画スレッドが使っちゃだめですよフラグ」でもたてるのか?
それを参照する時点でスレッドセーフじゃなさそうだけど
それともリスト内の全部のインスタンスのコピーを毎フレーム作るのか?
241:名前は開発中のものです。
14/03/02 20:59:31.72 uIAHAPdg.net
あいや、これは循環バッファ?というやつでダブルバッファとは違うのか
242:名前は開発中のものです。
14/03/02 22:59:32.88 bJnQrcsZ.net
計算したデータを参照渡しせずに、値渡しすればいいだけの話
243:名前は開発中のものです。
14/03/02 23:13:50.02 0kUNTeet.net
マルチスレッドを効果的に使う場面は、
BGM,効果音など
背景の処理、草や木が風でゆらゆらする
シェダー関係もそう
244:名前は開発中のものです。
14/03/02 23:15:24.40 YZ+wwGoZ.net
インスタンスのセットを2つ(AとBとする)作っておいて
・描画スレッドがAの状態を使用して描画している間、更新スレッドは
Aの状態をもとに更新後の状態をBに作成する。
・両方が完了したらAとBをスワップする
って方法かなぁ
>>232の図で言えば、Subスレッドが描画している間に
Mainスレッドがもう次のフレームの接触判定を処理し始めてる感じ
245:名前は開発中のものです。
14/03/02 23:23:34.37 bJnQrcsZ.net
計算したデータを描画用のバッファに積んで、描画処理に引き渡せばいいだけ。
なんで単純に出来ることを複雑にやろうとするんだ?
246:名前は開発中のものです。
14/03/02 23:31:43.29 Oh6AuFJG.net
>>231
.binはlinuxの.exeって感じでデータっぽくない
247:名前は開発中のものです。
14/03/02 23:37:13.73 Oh6AuFJG.net
>>234
面白そうだけど利用者ほとんどいないようだし、すぐに消えそうだな
cocos2dのほうが良いよ
248:名前は開発中のものです。
14/03/02 23:44:39.24 Oh6AuFJG.net
>>239
それって概念的には全てのインスタンスx2だけど、
描画スレッドは描画に関するデータ(それも画面内に入るもの)だけあれば良いから
実際には必要なメモリ量を削った実装で実現できるな
249:239
14/03/03 00:29:47.75 +ppeC4rH.net
>>243
確かにそうだ
そして多分それが>>240が言っている
「計算したデータを描画用のバッファに積んで、描画処理に引き渡」す
ってのに近いのかも
この辺で思ったんだが、もしDirectX11を生で叩いてるなら
DeferredContextとか使うといいのかな
250:名前は開発中のものです。
14/03/03 00:38:44.19 /CdxWaD8.net ?BRZ(10000)
sssp://img.2ch.net/ico/u_01.gif
>>239
スカラだけならともかく毎フレーム描画に必要な情報全てをnewするのか?
>>239
描画用のバッファを積む時にスレッドぶつかるかもしれないって話では?
class aiueo{
private:
Position* position;
Position* drawPosition;
public:
void func(){
position->setX(position->getX+1);
Position* tmp=position;
position = drawPosition;
drawPosition = tmp;
}
void draw(){
image.draw(drawPosition);
}
};
251:名前は開発中のものです。
14/03/03 07:13:32.62 mjyyGJWK.net
一フレームぶんのバッファに積み終わってから引き渡せばいいだけの話。
引き渡したら描画を描画スレッドにやらせて、計算スレッドは次の計算に入ればいい。
なんで単純で簡単なことを複雑に考えるのか、さっぱり理解できない。
そもそも描画順序などを考えると、座標がすべて確定した後で無ければ、
描画処理なんて出来ないのに、なんで計算直後にチマチマ描画しようという発想になってるんだ?
毎フレームnewとかも、嫌なら最初からある程度の領域を作っておけばいいだけの話で、
そんな簡単に解決できるどうでもいいことをイチイチ聞く意味が分からない。
なにこの思考能力の欠如?
252:名前は開発中のものです。
14/03/03 07:44:19.21 +ppeC4rH.net
別の書き方は出来ないのかあんたは
253:名前は開発中のものです。
14/03/03 08:19:00.54 /CdxWaD8.net ?BRZ(10000)
sssp://img.2ch.net/ico/u_01.gif
URLリンク(gyazo.com)
図で確認するとこんな感じ?
ロックの仕方がよくわからんけど、
メインスレッド側のバッファは描画スレッドに必要な情報(頂点とか)いらないからトントンになるのかな
そうすると、毎フレームnew�
254:キるより保持してたほうが楽そう 描画スレッドはモデルの頂点の展開とかやらずに文字通りZバッファに登録するだけだったりする?
255:名前は開発中のものです。
14/03/03 14:38:46.71 7XSFdIT2.net
>文字通りZバッファに登録するだけだったりする?
意味不明
256:名前は開発中のものです。
14/03/03 20:28:03.25 +ppeC4rH.net
>>248
使ってるライブラリ教えて
257:名前は開発中のものです。
14/03/04 00:42:30.15 tv4RC6nv.net
なんか描画スレッド分けるのがマルチスレッドみたいな流れになってるけど
処理の分割しないと複数コアの性能いかせないよね
>>238以外にも分割出来るところはあるんじゃないの
AIなんかのフレームと分けられる箇所が効果的だとは思うんだが
258:名前は開発中のものです。
14/03/04 00:54:00.93 Tkd6LlXd.net
>>248
君はレベルが低すぎる。基礎的なことすら理解していないようだから
身の丈に合った技術で制作するべきだ
259:名前は開発中のものです。
14/03/04 01:01:46.35 Tkd6LlXd.net
ゲームロジック以外については定番のパターンがあるわけで、
ゲームロジックについてはゲームの性質次第だから汎用的な議論はできん
260:名前は開発中のものです。
14/03/04 01:12:12.33 eUCtnBam.net ?BRZ(10000)
sssp://img.2ch.net/ico/u_01.gif
>>250
DXライブラリです
261:名前は開発中のものです。
14/03/04 01:22:03.26 eUCtnBam.net
>>252
そんなこと言わないで><
262:名前は開発中のものです。
14/03/04 01:45:49.24 MGr4iOMf.net
身の丈に合った技術で満足してたら俺みたいに全然成長しないままになるしいいんじゃね?
263:名前は開発中のものです。
14/03/04 03:19:20.41 NSoGUl2d.net
自称デキル人の大半はエセ
バグ生産しまくるのは得意みたいだがw
無視するに限るよ(ry
264:名前は開発中のものです。
14/03/04 03:24:44.21 6r8+3FgW.net
>>256
満足するならなw
265:名前は開発中のものです。
14/03/04 09:14:16.41 Tkd6LlXd.net
いまどきDXライブラリの初心者でマルチスレッドの基礎も理解してないのに
無理に背伸びした結果が「文字通りZバッファに登録するだけだったりする?」
格好ばかりつけて内容がなさすぎだろ
上で新技術OpenMPとかドヤってたやつといい、もう少し自惚れを抑えて
真摯な姿勢で学ばんと時間の無駄だよ
266:名前は開発中のものです。
14/03/04 09:15:50.51 A1Dcjr5j.net
そもそもグラボの基礎から学びなおせ。
明らかにZバッファが何か分かってないだろ。
267:名前は開発中のものです。
14/03/04 12:24:51.64 VEfOUnzL.net
>>254
Zソートの機能があるライブラリって訳じゃ無いのね
268:名前は開発中のものです。
14/03/04 21:19:35.34 eUCtnBam.net ?BRZ(10000)
sssp://img.2ch.net/ico/u_01.gif
>>261
アルファ値がある面だけZソートして、不透明な面の後から描画しています。
マルチスレッドの基礎はわかりませんが、
勉強目的で実装してみようかなと考えて、疑問点があったので質問しました。
質問の内容に戻りたいのですが、
メインスレッドではオブジェクトの座標だけ計算して、
描画スレッドでオブジェクトの座標からモデルの頂点等を展開すると
メインスレッドと描画スレッドが共有する値が少なくなっていいかなと考えたんですが、
実際に使われているスタンダードな方法とかあれば教えていただけると助かります。
269:名前は開発中のものです。
14/03/05 00:56:58.44 vvepHaRA.net
struct Node {
....Image* image; // D3DMesh mesh でもFontSprite fontでもいい
....Rect bounds;
....Rect src;
....double angle;
};
struct Layer {
....int usingLength = 0;
....Chain<Node> chain; // std::list<Node>
/*
Chain<Node2DImage> chain1;
Chain<Node2DFont> chain2;
Chain<Node3DModel> chain3;
*/
....bool isUpdate = false;
};
270:名前は開発中のものです。
14/03/05 00:58:26.26 vvepHaRA.net
Lock g_sync; // winならクリティカルセクシ
271:ョン、linuxならセマフォ Layer g_layers[3]; // instance; Layer *g_pFront = &g_layers[0]; Layer *g_pSwap = &g_layers[1]; Layer *g_pBack = &g_layers[2]; void threadFront(){ // GUI Thread = main thread ....while(true){ ........g_sync.lock(); ........if(g_pSwap->isUpdate == true){ // ロジック側がスワップした ............Layer *swap = g_pFront; ............g_pFront = g_pSwap; ............g_pSwap = swap; ............g_pSwap = false; ........} ........g_sync.unlock(); ........render(g_pFront); ....} }
272:名前は開発中のものです。
14/03/05 01:01:42.52 vvepHaRA.net
void threadBack(){ // Logic
....while(true){
........g_sync.lock();
........if(g_pSwap->isUpdate == false){ // 描画側がスワップした
............Layer *swap = g_pBack;
............g_pBack = g_pSwap;
............g_pSwap = swap;
............g_pSwap = true;
........}
........g_sync.unlock();
........update(g_pBack);
....}
}
class Scene {
public:
....virtual void update = null;
....virtual void render() = null;
}
273:名前は開発中のものです。
14/03/05 01:07:10.79 vvepHaRA.net
class Game : public Scene {
....Sprite sprite;
public:
....void update(){
........sprite.x++;
....}
....void render(){
........sprite.render(); // g_pBackにデータを渡す
....}
}
Scene* g_pScene = new Game();
// Logic Thread update()
void update(Layer* layer){
....g_pScene->update();
....g_pScene->render();
}
問題は、GUIスレッドしかテクスチャーとかの生成と破棄ができないのだが、
ロジック側の要請をキューにしてメッセージパッシングするのは
少し複雑な実装になるこった。
274:名前は開発中のものです。
14/03/05 16:23:12.96 x8H/gaMj.net
ideoneとかcodepadとか使えばよかったのに
275:名前は開発中のものです。
14/03/05 20:45:55.74 6x2/6ZGn.net
sleepってなくてもいいもんなの?
276:名前は開発中のものです。
14/03/05 21:47:30.12 6x2/6ZGn.net
マルチスレッドプログラミングの基本について書いてる記事があった
URLリンク(www.kumikomi.net)
組み込みのサイトだけど基礎だからゲーム製作にも役立つかな
まあこれ見ても具体的な実装なんてさっぱりわからんけど
277:名前は開発中のものです。
14/03/05 22:22:10.31 vvepHaRA.net
マルチスレッドプログラミングしなくてもいいじゃん
278:名前は開発中のものです。
14/03/05 22:28:07.13 xpm2EzP6.net
起動時のスプラッシュ画面を出すときに欲しくなるんじゃない?(適当)
279:名前は開発中のものです。
14/03/06 22:54:49.68 wXpbFvTO.net
マルチスレッドと言えばQtのQMutexLockerはとても便利だった
ミューテックスのロックとアンロックが一行でできる
280:名前は開発中のものです。
14/03/06 23:58:17.76 g6URqktg.net
>>266
書いてくれて嬉しいですが、処理の流れが見えないですね・・・
swapは裏画面と表画面を入れ替えてるというのはわかるんですが
ロジック側も入れ替えるんですか?
layerとかchainとか何を指してるのかイマイチわからないです・・・
g_sync.lockというのはロック出来るまで待機すんるでしょうか?
そうするといい感じに交互に処理できそう?
281:名前は開発中のものです。
14/03/07 16:53:26.89 fjndePR8.net
だから基礎知識のないやつに教えてもこうなるだけだと言ったろう?
時間の無駄だから諦めたほうがいい
282:名前は開発中のものです。
14/03/07 18:45:58.30 p/ke0iDn.net ?BRZ(10000)
sssp://img.2ch.net/ico/u_01.gif
マルチスレッドで描画しているゲームで、FPSが60以上出るゲームがあるけど
あれって一秒間に60回以上オブジェクトの更新しているってこと?
それとも更新側も全力でループ回して、前フレームからの経過時間を測って処理落ちにも対応する感じ?
283:名前は開発中のものです。
14/03/07 19:37:40.45 fjndePR8.net
シングルスレッドでも余裕で1000FPSでますよ?
すっげー爆速だー()
284:名前は開発中のものです。
14/03/07 19:48:26.65 DRlt5
285:uyo.net
286:名前は開発中のものです。
14/03/07 20:16:57.82 fjndePR8.net
XNAは50FPS推奨だったような気がする
俺もなんとなく50FPSで同期とってる
287:名前は開発中のものです。
14/03/07 21:10:47.46 p/ke0iDn.net
1000FPSでたってモニタがせいぜい120FPSまでしか対応してないじゃん(´・ω・`)
288:名前は開発中のものです。
14/03/07 21:28:42.22 EnJ3GPFi.net
>>279
見た目はそうだけど、例えば 当たり判定があるなら、見えない部分でも計算処理がなされる。
289:名前は開発中のものです。
14/03/07 21:44:38.99 Gh0ocgNA.net
だから、それに何か意味があるのか?
フレーム飛ぶだろ。
290:名前は開発中のものです。
14/03/07 21:54:40.27 5nTupHrf.net
裸の王様的当たり判定
291:名前は開発中のものです。
14/03/07 22:08:10.09 7HkmM3vq.net
>>281
あくまで精度を高めるための処理であって、フレーム飛ぶとかは関係なくね?
よくあるネタとして、毎フレーム32ドットで飛んでいく弾丸は、
大きさ30ドットの敵キャラをすり抜けちゃうとか、そういうやつ。
292:名前は開発中のものです。
14/03/07 22:42:09.70 fjndePR8.net
そういうやつで、あんなやつで、いいかんじに、そんなかんじみたいな?
293:名前は開発中のものです。
14/03/07 22:50:16.12 fjndePR8.net
画面は秒間60回、ロジックは秒間100回更新するより時間差分を使うほうが
一般的じゃないかな。アニメーションなんかでは。
ちなみにマウスを使ったお絵描きソフトをつくると60FPSでは
線が途切れてしまうわけだけど、こちらでは更新回数を増やすのではなく
前回の座標と今回の座標の差分から埋め合わせを計算するのが普通。
294:名前は開発中のものです。
14/03/07 22:53:06.64 EnJ3GPFi.net
マルチスレッドが有効利用できる部分と、利用できない部分がある。
効率的にマルチスレッド化出来る事が限られている。
そして、CPUが4コアであっても 決して4倍には成らない。
295:名前は開発中のものです。
14/03/07 22:55:14.98 RMnLXnbR.net
「目に見えなくて意味がない部分を省略する」メリットよりも
「あらゆる状況に対応できる」メリットを優先するってだけの話じゃ。
296:名前は開発中のものです。
14/03/07 22:56:53.08 Gh0ocgNA.net
さっぱり言ってることが分からんわ
単にCPUに余裕があるって話なら分かるけど。
それと1000FPSになんの関係があるんだ?
処理を1000回やるのと1000FPSは意味が違うだろ。
297:名前は開発中のものです。
14/03/07 23:09:10.35 fjndePR8.net
アホの子はマルチスレッドを使うことが目的化しているなw
「マルチスレッドでCPU性能を限界まで引き出す(ドヤ」
これからはマルチスレッド・ボーイと名乗りなさい
298:名前は開発中のものです。
14/03/07 23:21:09.90 ZsI9fYzN.net
マルチスレッドを勉強したいんだろうしそれが目的でいいんじゃねえの
299:名前は開発中のものです。
14/03/07 23:31:09.17 7HkmM3vq.net
>>288
フレームという単位は、確かに元は映像や画像処理の世界の言葉だが、
ゲーム系では映像の出力の他にも、処理の単位(要はループ数)として使われることがある。
どっちの意味で言ってるかは文脈による。
300:名前は開発中のものです。
14/03/07 23:40:19.37 Gh0ocgNA.net
本当にこいつの言う話は意味不明。
マルチスレッド?jは?何言ってるの?
301:名前は開発中のものです。
14/03/08 00:03:16.81 C0+dE/Sc.net
はっはっはっはっは
教えて君の相手をしていても進歩がなさそうだ
302:名前は開発中のものです。
14/03/08 00:06:45.46 GqQre2H1.net
単発で何やってるんだよ。
恥ずかしいやつだな。
こんな過疎スレで自演しても意味ないぞ
303:名前は開発中のものです。
14/03/08 00:11:20.12 C0+dE/Sc.net
一体何が単発で何が自演しているというのだろう?
まず、>>275が振った話題にレスが続いてること理解してる?
304:名前は開発中のものです。
14/03/08 00:14:00.22 GqQre2H1.net
図星だしたか?ID:fjndePR8君
305:名前は開発中のものです。
14/03/08 00:15:32.48 C0+dE/Sc.net
日付が変わればIDは変わる。それはお前も同じことだが知らんのか?
わかったら、敗者は立ち去られよ
306:名前は開発中のものです。
14/03/08 00:16:46.34 GqQre2H1.net
???本当に馬鹿だなお前w
307:名前は開発中のものです。
14/03/08 00:20:10.92 9lZ7NGbh.net
本当に恥ずかしい流れになってきたw
308:名前は開発中のものです。
14/03/08 00:21:58.27 C0+dE/Sc.net
レス番号と根拠を述べない限り、お前は意味不明なことをいってる糖質にしか見えないが?
追い詰められて苦し紛れに「バーカ」とか「アーホ」と一行レスで煽ってるだけじゃんw
309:名前は開発中のものです。
14/03/08 00:24:33.75 GqQre2H1.net
つ鏡
310:名前は開発中のものです。
14/03/08 00:28:32.27 C0+dE/Sc.net
ほら、何も反論できないだろ?突然「単発で自作自演をして、うんぬん」と人を批判するが
「どのレスがそうなんですか?」と聞き返されて「お前馬鹿だろw」「つ鏡」などと
意味不明な返答を繰り返す。
わかったら、敗者は立ち去られよ
311:名前は開発中のものです。
14/03/08 00:31:28.03 X9SC3wUQ.net
皆何と戦っているのん・・・
312:名前は開発中のものです。
14/03/08 01:44:30.85 Vx2VozQo.net
……単発で自演って日付またいだからID変わっただけだろうに……。
313:名前は開発中のものです。
14/03/08 08:06:01.61 PSYFRGtR.net
結局275はどういうことなの
314:名前は開発中のものです。
14/03/08 09:53:27.60 tPkg4yd1.net
★フレームレート(fps)の方法には幾つか種類がある
①固定fpsで、リミッターにより fpsの上限で固定してしまうもの。
②V-SYNCによって固定する、ゲーム機などであり確実に固定する。
③可変fpsにし、fps値が変化しても同じ速度で挙動するもの。
ゲームエンジンが 一般的にゲームループを形成しており、
ループの回転数(fps)を計測する。
PCの処理速度が不安定であり、状況により常に変動している。
ゲーム内では処理の負荷変動に関係なく処理速度を一定にしたい。
①固定fps方法、設定のfpsを越えないように上限値を決める方法、
単純な解決方法です。設定fpsを下回る場合は処理落ちになる。
②V-SYNC方法、これはリミッターと同じですが、
画面の同期にハード的に合わせてリミッター処理します、
ですから、設定fpsが常に安定している。しかし、
画面同期が変更されると困る。ゲーム機などに多い。
③可変fps方法、これはゲームループの回転速度に反比例して
ゲーム内の速度を制御します。よって、fpsが変化しても
ゲームの速度に影響がありません。こうすると
非力PCでもささやかに動き、高級PCでも豪華に動く。
また、以上の組合せの方法もあり、条件によって選択が違ってくる。
315:名前は開発中のものです。
14/03/08 09:55:48.75 xv4QLBh4.net
ティアリングと絡めて
316:名前は開発中のものです。
14/03/08 15:47:21.74 C0+dE/Sc.net
ガッシ、ボッカ、マルチスレッド・ボーイは逃走した(スイーツ)
317:名前は開発中のものです。
14/03/08 16:31:15.28 cTFUFLMT.net
>>307
「ゲームプログラマーになる前に覚えておきたい技術」のページ127から140を読んでもらいたい
図書館にあると思う
318:名前は開発中のものです。
14/03/08 19:20:22.65 vzxofO6Y.net
>275は、>279から推測すると
おそらく画面描画の単位としてのフレームと、処理の単位としてのフレームを混同してる
319:名前は開発中のものです。
14/03/08 20:06:53.16 C0+dE/Sc.net
フハハハハハハハハ
320:名前は開発中のものです。
14/03/08 20:50:35.38 YGGwUpNn.net
>>309
死ね
321:名前は開発中のものです。
14/03/08 23:21:33.13 Sq36ONOT.net
格闘ゲームは60fpsじゃないと古参のファンに叩かれるそうな
322:名前は開発中のものです。
14/03/09 00:09:52.59 IyeEnt/7.net
このスレは熱いな
323:名前は開発中のものです。
14/03/09 00:18:56.78 zp5zMRCB.net
ゲ製にしては良い流れだ
324:名前は開発中のものです。
14/03/09 00:35:14.60 UV7RBW8A.net
なんにせよゲーム内時間の指標となる数値は必要だよね?描画は別としてね
昔に作ったやつは特に深く考えることなく60FPS基準にしてて、
「このエフェクトは1秒間かけたいから設定値は60(フレーム)にしよう」
とかやってたけど、ゲーム内の時間と描画を切り離して考えてなかったから
倍速にしたいときにFPS120にして1フレごとフレームスキップするとか
トンチンカンなことやってたんだよね
(FPS設定値が描画回数と一緒にゲーム内の速度に影響してしまってた)
設定値は素直に、ゲーム時間としては「再生速度 * 秒数(ミリ)」で設定して
描画としてFPS(描画/秒)を使うべきだねぇ
325:名前は開発中のものです。
14/03/09 10:22:07.75 zp5zMRCB.net
それ、具体的には、デルタタイム(前回更新からの時間差分)を使うのが
一般的だと思うぞ。
もっと原始的にやるなら、画面が50FPSだとキリがよくて、ロジック側もループ回数で
単純計算しやすいかなとは思うんだけど、その延長線上の考え方として
マルチスレッドで秒間100回更新するというのは止めたほうがよいね。
326:名前は開発中のものです。
14/03/09 12:52:15.87 n5K2fLn8.net
普通のHDMIとかパネルの駆動が60Hz辺りなんだから
EU圏のゲーム機でもなきゃわざわざ50を選ぶ理由ないけど
ロジックを高速にするならゲームパッドのサンプリング周期も考慮した方がいいかもね
マウスも非常に速いのあるけど画面とは綺麗な整数倍にならないし
327:名前は開発中のものです。
14/03/09 13:48:11.02 hgm9uEQE.net
シングルスレッドのかずき君は去ったようだ
328:名前は開発中のものです。
14/03/09 15:16:30.96 a5thyH8B.net
います!
329:名前は開発中のものです。
14/03/09 15:55:13.60 UV7RBW8A.net
>>317
ネトゲとかアクションじゃない限り、ゲーム内時間は現実のデルタタイムに
影響されないようにした方が混乱しないんじゃね?
Unityのチュートリアルなんかだと、「移動距離 = Δ * speed」みたいなやり方を見るんだが、
俺達みたいに自分でゲームループを制御する場合は、ゲーム内時間とリアル時間を結びつけるために
ループ内でSleep入れて、ゲーム内の「最小単位時間」は常に同一になるように調整した方がわかりやすいと思う
330:名前は開発中のものです。
14/03/09 16:30:12.84 zp5zMRCB.net
ではその場合、画面が60FPSで更新されるとして、
常に17msの倍数でウェイトやアニメーションを行うことになるな。
別にそれはそれで単純でよいが、海外のゲームエンジンとかライブラリだと
デルタタイムでタイムライン処理するのがデファクトな印象ではある。
331:名前は開発中のものです。
14/03/09 17:36:09.54 UDo1KJJD.net
ここ日本
332:名前は開発中のものです。
14/03/09 18:05:51.13 zp5zMRCB.net
UnityとかFlashもタイムラインだし、デファクトに則るのが良いと思うが、
フレームワーク・ライブラリ整備されている前提でないと
むしろ手間かかるというのはあるな
SDLやDXライブラリでそのままでゴリゴリ書いちゃってるような状況なら
原始的な手法がいんじゃまいか
333:名前は開発中のものです。
14/03/09 22:16:48.95 ai4yRe81.net
時間固定で動くゲームって今ほとんどないんじゃない?
3Dのゲームは大概処理落ちするとコマ送りになる気がするけど
334:名前は開発中のものです。
14/03/09 22:24:11.30 7BkgnOpl.net
通信対戦なら時間基準しかない
335:名前は開発中のものです。
14/03/09 22:29:21.55 YCVyyaL7.net
同人ならまだまだ普通にー、って感じじゃない?
336:名前は開発中のものです。
14/03/09 22:49:06.01 LHzx02pP.net
自称プロの方ですか。
プロのくせに2chってキモイんで巣にお帰りください
337:名前は開発中のものです。
14/03/09 23:27:17.89 YCVyyaL7.net
>>328
どこにプロ要素があったのか
338:名前は開発中のものです。
14/03/10 01:04:03.22 eMnEQH7w.net
コミュ障の有段者かな?
339:名前は開発中のものです。
14/03/10 18:57:16.49 u260dUyO.net
円や矩形の当たり判定を使わずに3Dのメッシュとメッシュの当たり判定をする方法ってある?
340:名前は開発中のものです。
14/03/10 19:30:37.53 a4AxYrFN.net
>>331
もう少しくわしく
なぜその方法ではダメなの?
どのような目的の為にその他の方法が必要なの?
341:名前は開発中のものです。
14/03/10 21:01:01.03 Y7tUpY4E.net
着地判定じゃね
342:名前は開発中のものです。
14/03/10 21:12:38.72 gaJAPo5e.net
あるも何も三角形を総当たりで判定するだけでしょ。
いったい何が聞きたいのかさっぱり分からない。
343:名前は開発中のものです。
14/03/10 23:29:14.20 Y7tUpY4E.net
単に効率的な手法が聞きたいんでしょ
何が聞きたいのかわからないってアスペかよ
344:名前は開発中のものです。
14/03/11 03:02:43.10 IY9eaK2H.net
効率的な手法=点・円・矩形の当たり判定じゃまいか
バーカバーカ
345:名前は開発中のものです。
14/03/11 03:58:39.95 UoOeSCjv.net
>>336
いや、色んな当たり判定の取り方有るよ。
それに円、球、円柱などの単純図形による近似判定って処理が軽いだけで、
厳密な当たり判定を取りたい時の手法としては効率的ではないし。
凸包を使う方法とか、xyzそれぞれのベクトルの射影を取る方法とか、調べてみると面白い。
346:名前は開発中のものです。
14/03/11 12:42:21.97 IY9eaK2H.net
効率的な手法=処理が軽い
精度の高い手法=厳密な当たり判定
347:名前は開発中のものです。
14/03/11 15:13:17.06 7WRcbbN4.net
効率的な手法で精度の高い手法 = 俺らの目標
348:名前は開発中のものです。
14/03/11 15:17:28.37 0J+S+2q7.net
妄想の間違いでは
349:名前は開発中のものです。
14/03/11 15:18:30.63 1Bb7Oz5Q.net
では、球と球の当たり判定の計算式を述べよ
350:名前は開発中のものです。
14/03/11 15:37:28.53 7aEkrhcX.net
b1{x, y, z, r}
b2{x, y, z, r}
diff.x = abs( b1.x - b2.x )
diff.y = abs( b1.y - b2.y )
diff.z = abs( b1.z - b2.z )
distance = sqrt( sqrt( diff.x^2 + diff.y^2 ) + diff.z^2 )
distance > b1.r + b2.r → no collision
distance = b1.r + b2.r → contact
distance < b1.r + b2.r → collision
351:名前は開発中のものです。
14/03/11 15:55:58.02 AQe4Fl77.net
数学的に >>324 が正解です、
しかしながら、プログラミングとしての最適化されていない。
最適化された解を述べよ、 ( 処理速度向上させよ )
352:名前は開発中のものです。
14/03/11 15:59:16.47 AQe4Fl77.net
訂正、 >>324 じゃなくて、>>342 です
353:名前は開発中のものです。
14/03/11 17:31:22.65 7aEkrhcX.net
あー、どうせ2乗するなら abs() が不要か
平方根の最適化はコンパイラに任せるとして、
distance = sqrt( sqrt( diff.x * diff.x + diff.y * diff.y ) + diff.z * diff.z )
とかじゃダメ?
354:名前は開発中のものです。
14/03/11 18:11:28.23 vsKfw8ZM.net
わからんけど、俺ならとりあえず diff.x > b1.r + b2.r の時点で弾くかな。
diff.y と diff.z も同様。
355:名前は開発中のものです。
14/03/11 21:03:50.46 Xqo2QxT0.net
distanceはsqrt(diff.x^2+diff.y^2+diff.z^2)
sqrtは重いからsqrt使わずにdistance^2と(b1.r+b2.r
)^2を比較する
356:名前は開発中のものです。
14/03/11 21:15:28.25 OqfIz8Zt.net
標準Cライブラリのmath.hってそんな重いの?
平方根くらいええやん
357:名前は開発中のものです。
14/03/11 21:49:57.82 Xqo2QxT0.net
今はcpuに命令あるはずだからそれなりに高速だとは思うけど、四則演算と比べれば当然遅い
ちなみ平方根の計算自体は近似値求める計算だから結構でかいよ
358:名前は開発中のものです。
14/03/11 22:49:56.48 Fzxm+mum.net
どの道その距離は後で衝突箇所(衝突時間)を求める時に必要になるから
計算して返すようにしておいた方がいいよ
359:名前は開発中のものです。
14/03/11 23:13:25.82 P/1Z0pOf.net
平方根なんてほんとにCPU命令にあるのかと思って調べたら本当にあるんだな
URLリンク(www.intel.com)
URLリンク(topsecret.hpc.co)
360:.jp/wiki/index.php/%E5%89%B2%E3%82%8A%E7%AE%97%E3%81%AF%E9%81%85%E3%81%84 しかも割り算一回分レベルの速さ 割り算も遅いので遅いと言えば遅いんだろうけど、これならそれほど頑張って避けなくてもいい気もするね
361:名前は開発中のものです。
14/03/12 10:35:51.84 DWahuZKR.net
int i;
double dSqrt, x, y, z;
long T, E;
x = y = z = 1.0;
T = clock();
for (i = 0; i<100000000; i++){
dSqrt = sqrt(pow(x, 2.0) + pow(y, 2.0) + pow(z, 2.0));
}
E = clock() - T;
printf("√( x^2 + y^2 + z^2 ) = %1.5f [%1.5f] sec\n", (float)dSqrt, (float)E / CLOCKS_PER_SEC);
T = clock();
for (i = 0; i<100000000; i++){
dSqrt = sqrt(sqrt(pow(x, 2.0) + pow(y, 2.0)) + pow(z, 2.0));
}
E = clock() - T;
printf("(√(√(x^2 + y^2) + z^2) = %1.5f [%1.5f] sec\n", (float)dSqrt, (float)E / CLOCKS_PER_SEC);
getchar();
return 0;
実行結果
√( x^2 + y^2 + z^2 ) = 1.73205 [0.60800] sec
(√(√(x^2 + y^2) + z^2) = 1.55377 [1.18600] sec
計算結果はゲームで使うなら誤差の範囲かな?
単純に sqrt 2回使えばほぼ 2倍の時間掛かるんで衝突判定するオブジェクトの数に拠りけり
秒間1億に近いから他の処理の重さと併せて考慮する感じだと思う
362:名前は開発中のものです。
14/03/12 13:43:31.76 KEnJWCWv.net
誤差も何も√( x^2 + y^2 + z^2 )と√(√(x^2 + y^2) + z^2)じゃ違う答えになって当然だし・・・
363:名前は開発中のものです。
14/03/12 13:49:15.02 DWahuZKR.net
うん、一応>>347に書かれてた事を試してみただけ
364:名前は開発中のものです。
14/03/12 21:54:58.99 5WuRlcAH.net
>>347はdistanceの二乗使うからsqrtは使わんよ
365:名前は開発中のものです。
14/03/12 21:59:51.24 5WuRlcAH.net
あと、ルート二つついてる方は単に式が間違ってるだけだと思う
366:名前は開発中のものです。
14/03/12 22:11:11.81 MjuHudry.net
pow(x,2.0)て最適化でx*xになるっけ?一昔前のVCだと駄目だったけど
それにdoubleよりfloat使わない?
367:名前は開発中のものです。
14/03/13 10:00:03.12 pSqzCZ7J.net
なるほど、342から間違ってたのね、失礼しました
368:名前は開発中のものです。
14/03/13 11:21:45.95 pSqzCZ7J.net
>>357
一応検証の為に pow(x, 2.0) と x*x の比較したら最適化されないみたいです(VC++2013)
√( x^2 + y^2 + z^2 ) [4.25600] sec
√(x * x + y * y + z * z) [0.61000] sec
これまでのを総合すると、
float dist2 = x * x + y * y + z * z;
float rr = (r1 + r2) * (r1 + r2);
if (dist2 > rr) {
// no collision
}
else {
// touch or collision
float dist = sqrt(dist2); // 衝突位置の計算用
}
みたいな感じかな?
参考になりました、ありがとうございます
369:名前は開発中のものです。
14/03/13 20:12:09.07 U+Ob+Zph.net
doubleよりfloatが何故か遅いっていう噂があるね
370:名前は開発中のものです。
14/03/13 20:37:28.97 gJhIi0KX.net
どうせ/fp:preciseのままだからだろ
371:名前は開発中のものです。
14/03/15 02:04:37.56 lh5cPZ7H.net
とあるゲームのソースを見たところ
playMIDI
TextOut
ReleaseMIDI
など出てきたんですけどこれはygs2kで間違いないですかね?
ygs2kってゲ製では有名なんですか?
372:名前は開発中のものです。
14/03/15 02:30:50.42 3y1QMR7E.net
そうです
373:名前は開発中のものです。
14/03/15 09:20:59.03 9NF5k3Jb.net
わたしが
374:名前は開発中のものです。
14/03/15 14:07:07.29 lh5cPZ7H.net
ヴェルタース
375:名前は開発中のものです。
14/03/15 14:14:31.86 h6Za+Db1.net
>>362
言ってることが支離滅裂。
なぜ、その名前だけでそのライブラリに行きつくのか。
ついでに言えば全然有名じゃないし。なんでゲ製でなの?
376:名前は開発中のものです。
14/03/15 14:58:29.14 FYDjzZLC.net
やねうらお氏は10年前に亡くなりました
377:名前は開発中のものです。
14/03/15 16:20:04.97 PgHQYT7S.net
知ってる人は多そうだけど、使ってるひとってどれくらいいるんだろう?的な
378:名前は開発中のものです。
14/03/15 17:08:57.60 h6Za+Db1.net
>>367
ああ、彼のライブラリなのか。
結局、3Dは出来なかったな。能力的にも年齢的にも無理があったのだろうが。
379:名前は開発中のものです。
14/03/15 17:24:30.81 rzf5NJ5V.net
新聞でやねうら王の名前みて吹いた
380:名前は開発中のものです。
14/03/15 19:43:09.80 DtHIrGu2.net
3Dはのんびり開発してるとバージョン変わって台無しだから不毛
381:名前は開発中のものです。
14/03/15 20:00:10.92 fItnBM/L.net
3DというかMSがな
382:名前は開発中のものです。
14/03/15 20:13:58.33 dxeJpeDA.net
今でも、DirectX7 使えるよ
383:名前は開発中のものです。
14/03/15 20:44:18.33 7h3u1dFN.net
DirectX11は長生きするんじゃない?つっかえねーテッセレータと共に
384:名前は開発中のものです。
14/03/16 02:00:01.53 /lXYe85Y.net
超長生きしたのって7と9だっけ?
385:名前は開発中のものです。
14/03/16 12:04:58.86 45D5Boh6.net
プログラムというより物理の話で申し訳ないんだけど、レースゲームで壁とぶつかった時の速度の計算ってどうしてる?
386:名前は開発中のものです。
14/03/16 12:46:48.57 9fplCkXk.net
速度x0.5
方向は壁の法線方向に対して対称(反射)
※リアルさを求めるなら壁から加わる力から加速度をもとめるべき
387:名前は開発中のものです。
14/03/16 13:08:18.40 DbQzKXx2.net
壁にぶつかったら爆発→リトライ
388:名前は開発中のものです。
14/03/16 14:37:04.76 e720CN4J.net
レースゲームなら>>377でいい気がするね
ただ、簡易スマートボール作ろうとしたときに>>377のやり方やってたら
曲面の壁に沿って滑らかに滑ってくれなくてエターなった思い出があるわ
389:名前は開発中のものです。
14/03/16 15:00:37.43 a7Z/sEsx.net
物理エンジン任せ
390:名前は開発中のものです。
14/03/16 18:55:21.70 uPQCf7iI.net
どうしてるの前にどうしたいを述べるべき
ガツガツと壁を削りながらアグレッシブに攻めるゲームにしたいのか
スピンしてほぼ停止状態からやり直させるのか
ある程度の傾斜なら斜めに傾いたまま突っ走るロデオか
391:名前は開発中のものです。
14/03/17 00:57:39.15 VY0wetv0.net
内積使えよ
392: ◆UxQ8uxJMok
14/03/17 01:35:41.18 kdQ7tXJG.net
>>182 :名前は開発中のものです。:2014/02/04(火) 00:23:08.29 ID:J1FJfMJW
> スレッドの主旨を考えてくれ。どっかのスレみたいに株の話をされても困る
おぃ、>>182ID:J1FJfMJW
手前ェは、一族根絶やし肉だるま処刑スレリンク(entrance2板:119番)リスト入りだ。
393:名前は開発中のものです。
14/03/17 07:06:23.16 Do9zcgcc.net
>>381
壁とぶつかりながら進む方
一応ライブラリ使えば球体とコースの当たり判定と交点を求めることは出来るんだけど、アクセルを踏み続けると当たってる時でも加速するし、減速する処理を書くと当たり続けて減速しすぎちゃうし・・・
394:名前は開発中のものです。
14/03/17 09:41:07.08 rpSVpHyC.net
URLリンク(www.euclideanspace.com)
ここまでは理解していると思うので、
挙動をどうするか決めておいて
そのようになるようにコードを書いてゆくのでしょう
395:名前は開発中のものです。
14/03/17 19:26:01.22 U3cX2N0O.net
>>384 その辺は真面目なシム系のゲームを作�
396:驍フでなければ、 >>377 にあるようなゲームならではの調整が必要になるケースだと思うよ 壁に接触してから〇秒間は加速性能を〇〇%落とすとか、 壁から離れるような方向に謎の力が加わるとか やってみて理想のゲーム性に近づくようにいろいろ試してみるしかないかと
397:名前は開発中のものです。
14/03/18 20:52:56.02 CMOj/Jcf.net
URLリンク(homepage2.nifty.com)
このスムーズに動くマップスクロールですが、最初にマップを動かしてからキャラを描画する形で
ソースが書かれています。
これを、画面端で、キャラだけ動いてカメラ画面(マップ)が動かないようにしたい場合、
画面を滑らかに動かすのではなく、キャラを滑らかに動かすような処理に
ソースを変更するしかないでしょうか?
398:名前は開発中のものです。
14/03/18 20:53:36.58 CMOj/Jcf.net
URLリンク(homepage2.nifty.com)
アドレスはこちらでした。
399:名前は開発中のものです。
14/03/18 22:13:14.48 anUGUjWa.net
うむ、それしかないと思うよ
400:名前は開発中のものです。
14/03/19 01:58:11.08 tk/WX1Vm.net
>>387
リンク先をチラ見した程度じゃ、何をやってるか正しく把握してないし、
>>387の言わんとしてることもイマイチ分かりかねてるが、
方法としては、
昔ながらRPGみたく、
キャラの位置が画面端に近づいたら画面全体じゃなくて、キャラのみを移動にする方法や
完全にどこの位置でもキャラを移動させる方法、画面端(移動制限をしっかり)して描画に十分な余白
の3通りぐらいはあると思うよ。
他にも3D系のだと、画面端に近づくと縮尺が変わってとかもあるけど。
401:名前は開発中のものです。
14/03/19 04:13:25.51 GLn+gVin.net
色々な表現方法があるのだが、比較的応用のききやすい方法を。
こんな事言って、例のkなんとかさんが激おこしないことを祈る。
>>387
現実世界で言うところの、スポーツ中継におけるTVカメラのようなものを想像して欲しい。
例えばマラソン中継。ランナーは常に走っているけど、カメラも同じ方向に動いている。
あるいは野球中継。ホームランボールをTVカメラが追いかけて、常に画面の中央にあるように撮影する。
被写体の動きに合わせてカメラを動かすことで、視聴者には被写体は停止し、背景が流れていくように見える。
カメラを動かすのをやめれば、逆に背景は停止し、被写体は移動する。やがて画面の外に消えてゆくだろう。
これをまとめると
(1)キャラクターは、画面表示に関わらず常に動かせ。
(2)マップは、画面表示に関わらず座標を動かしてはならない。
(3)カメラの位置は、状況に合わせて移動させろ。
ということになる。
402:名前は開発中のものです。
14/03/19 16:07:40.13 UvHVMI/M.net
387の質問はサンプルソースをどうするかって話だから
その答えだと根本から作りなおせって事になるんじゃない?
403:名前は開発中のものです。
14/03/19 16:41:44.59 pluZ/2gm.net
まあ答えとしては>389に言われちゃってるしな
404:名前は開発中のものです。
14/03/19 17:00:07.58 o8V0VZ6P.net
そのサンプルだと滑らかに動くスクロール処理をキャラじゃなくてカメラビューの方に入れてるね。
ぶっちゃけサンプルとしてはどうかと思うぞ。
キャラとカメラ両方に入れるか、キャラに入れるか。この二択でしょ。Dxlibの作者もなんでこんな
初心者いじめのようなサンプルを書いたんだろw
405:名前は開発中のものです。
14/03/19 22:07:24.67 rw0JuaTm.net
俺こそが世界の中心!
406:名前は開発中のものです。
14/03/20 17:23:48.20 XEsROipC.net
C++とかで「グローバル宣言なるべく使うな」って言うけど、どうやって変数のデータを保持するの?
407:名前は開発中のものです。
14/03/20 17:51:07.52
408:yGIdDx3B.net
409:名前は開発中のものです。
14/03/20 17:55:02.77 XkJNKHnH.net
クラス化
引数、戻り値
410:名前は開発中のものです。
14/03/20 18:06:26.35 XEsROipC.net
>>397,398
C++があやふやなのであれなんですが、Cで言えば構造体の中でxという宣言をすれば、
void main(){
}
411:名前は開発中のものです。
14/03/20 18:08:28.64 XEsROipC.net
途中で更新ボタン押してしまった(´・ω・`)
勉強したてであやふやなのであれなんですが、Cで言えば構造体の中でxという宣言をすれば、
Test test;
void main(){
test.x=1;
}
こんな感じにしてしまえば、xはグローバル宣言ではないということでしょうか?
412:名前は開発中のものです。
14/03/20 18:12:12.69 QQSkDL4k.net
>>400
このxはすでにグローバル変数ではなくて、ローカル変数だね
関数の中でしか有効ではない変数で、その関数を抜けるとその変数は破棄されるやつ
グローバル変数ってのはTest testってなってるやつのこと
413:名前は開発中のものです。
14/03/20 18:17:11.33 7FNS6Iq5.net
なんか言ってることが良く分からんが
Test test;
を関数外に書いてるからtestはグローバル変数
だからその中に保持されているxの値も関数抜けても維持されるよーじゃなくてさっさと入門サイト見てこいカス
414:名前は開発中のものです。
14/03/20 20:27:56.02 4y6T8wZl.net
グローバル変数を使うことが悪いのではない
グローバル変数を使うことでバグを引き起こしたりメモリを圧迫する事が悪なのだ
要求機能満たして動くならグローバル使っても気にするこたぁない
415:名前は開発中のものです。
14/03/20 20:32:50.84 mbiTOjB0.net
そういうのはわかるようになってから考えればいいし
初心者のうちはグローバル=悪って覚えていた方が安全
416:名前は開発中のものです。
14/03/20 20:41:55.88 F5faASXs.net
問題になるのは生成、破棄の順序位でしょ
メモリ圧迫なんてヒープからnewしたのと同じだしスタックに積まれるよりまし
アクセス範囲や名前の衝突なんてのも関数でも起こるし
アクセッサーとか間違った使い方のシングルトンで
どこからでも参照できるようにしたら同じこと
417:名前は開発中のものです。
14/03/20 20:58:57.29 QQSkDL4k.net
シングルトンを使うのがそもそもおかしいって力説するやつに会ったことならある
418:名前は開発中のものです。
14/03/20 21:49:50.24 F5faASXs.net
インスタンスが単一を保証するためのパターンでどこからでもアクセスできる為では無いからな
ローカルなクラス内のシングルトンもあるので間違えられると混乱の元
ゲームのデータクラスとして使うのは設計次第
419:名前は開発中のものです。
14/03/20 22:00:31.87 mbiTOjB0.net
リソースよりもメンテナンスの問題でないの
一人開発だとそんな気にならんけど規模でかくなると影響範囲の広い変数なんて地雷みたいなもんだからな
下手に修正すると全く関係ないところでエラーでたりしてトレース大変だったり
420:名前は開発中のものです。
14/03/21 18:13:16.93 VAKzG1ya.net
シングルトン便利なのに
呼び出し側は生成関数使うだけで初期化されてるか気にしなくていいとか楽チン仕様にできる
グローバル変数だけだとそうはいかんよね
421:名前は開発中のものです。
14/03/21 20:31:26.05 sV0Efmq2.net
初期化に失敗する可能性入れたら
実際に使う前に確認しておきたいけどな
422:名前は開発中のものです。
14/03/21 22:38:50.59 4DgLw9n9.net
初期化に失敗する可能性のあるものは
初期化するタイミングを図らないといけないもので
それはシングルトンより適したデザインがあるのてはないか
423:名前は開発中のものです。
14/03/23 14:45:46.78 UqjjQ2/2.net
>>408
そういう目的ならnamespaceを分ければよくねって話なら見た覚えがある
ググったら過去スレがひっかかった
424:http://toro.2ch.net/test/read.cgi/gamedev/1357899040/ シングルトンで検索すると面白い
425:名前は開発中のものです。
14/03/24 21:27:07.06 rE2XsGEW.net
最新のdirectx SDKってどこで入手したらいいですか?
ググっても場所がまちまちで
426:名前は開発中のものです。
14/03/24 21:41:34.76 AEJao4UL.net
>>413
Windows8に標準でついてくるそうだ
427:名前は開発中のものです。
14/03/24 21:50:42.35 WjXmoSNL.net
2012以降のVisual Studioに標準で付いてくる、な
428:名前は開発中のものです。
14/03/24 22:39:54.92 PqJgwAnT.net
マジレスすると>>415のやつ
それかWindowsSDKに一緒に入ってる
この程度は自分で調べようぜ
429:413
14/03/24 22:44:31.69 rE2XsGEW.net
インストール出来ました
ありがとです
430:名前は開発中のものです。
14/03/25 09:41:15.88 KT+bOjyU.net
スレリンク(gamedev板:719番)
↑ ↑ ↑ ↑ ↑ ↑
431:名前は開発中のものです。
14/03/26 11:37:26.78 +vTfvSPy.net
シューティングゲームを作る時、移動キー押下時に自キャラと他オブジェクトとの衝突判定を行うと思うのですが、
1フレーム移動毎に、敵や敵の弾や壁との衝突判定をしていると
画面上に敵の弾が100個とかあったりするとかなり膨大な数ループ処理が必要な気がします。
一般的なゲームの場合、画面上で動いているオブジェクトは全て1フレーム毎に衝突判定をしているのでしょうか?
432:名前は開発中のものです。
14/03/26 13:20:48.84 47820mJU.net
2Dだけど
URLリンク(marupeke296.com)
433:名前は開発中のものです。
14/03/26 13:22:14.35 +vTfvSPy.net
>>420
レスした後でそこ見つけたんだけど私の頭では理解が・・・(´・ω・`)
皆この概念でシューティングゲーム作ってるんですかね?
434:名前は開発中のものです。
14/03/26 13:23:52.42 ghUA5KPp.net
>>420
今まで普通にやってたけど名前が付いてるの始めて知ったわ
ありがとう
435:名前は開発中のものです。
14/03/26 13:56:03.88 xWjmtvj1.net
俺もその理屈何度も読んだけど理解できないんだよなぁ。
素人に解るレベルに噛み砕いてくれてるとこあればいいのに。
結局座標で判定して分割してたりする。俺。
436:名前は開発中のものです。
14/03/26 14:03:19.61 +vTfvSPy.net
>>423
URLリンク(flash.polig.daa.jp)
今さっき見つけたけどここと同じやり方ですかね?
これならなんとなくわかる気がする。
437:名前は開発中のものです。
14/03/26 17:00:06.09 VxCnnAtl.net
>>419
100個くらいなら問題にならないっていう指摘と
なぜ移動キーを押してる間しか当たり判定がないのかというツッコミと
438:名前は開発中のものです。
14/03/26 17:08:48.02 47820mJU.net
質問はそこじゃないから
439:名前は開発中のものです。
14/03/26 18:28:38.14 VxCnnAtl.net
質問に答えたつもりは無いのだが…
440:名前は開発中のものです。
14/03/26 20:24:20.53 Hvj0In47.net
ID:VxCnnAtl
その嫌われ者キャラは素なの?
治した方がいいよ。この先も友達出来ないよ。
441:名前は開発中のものです。
14/03/26 20:29:33.08 fl0FfJGt.net
一般的なゲームをどのクラスで指すのか分からないけど、
時代やハードを問わない"基本"は力技というか、1フレームごとの全判定だと思うっす。
ベテランプログラマがざっくりと組んじゃうところじゃなければ、
とりあえずプロトタイプを作ってみて、そっから必要な機能を満たしつつ、
どんだけ不要な判定対象を省いて回数減らせるか、ってやり方が多い気はする。
負荷やループ数を気にしているのなら、最近の据え置き機や携帯ゲーム機の場合だけど、
C++使ってるなら、数万回のループ判定程度がボトルネックやオーバーヘッドになることは少なくて(余程複雑な判定をしてれば別)、
問題になるのは2D3D問わずグラフィックスコマンドの場合が圧倒的に多いと思う。
なので、研究目的とかじゃなくて今時のハードで遊べるものを作りたいというだけなら、
判定そのものはそこそこ効率化してれば十分だと思うお。
よくあるシューティング形式なら、>>423の考え方でも十分効率上がりまっせ。
442:名前は開発中のものです。
14/03/27 05:30:55.80 y42irIZJ.net
そういう変な聞きかじりは止めた方がいい。
>>423ならスクロールなし画面に入るサイズだから判定もせいぜい3000未満でしょ。
それなら普通にforループ回して十分だし、そこだけマルチスレッドにしても良い。
443:名前は開発中のものです。
14/03/27 05:42:21.29 66/qzmyK.net
厨が頑張るスレw
444:名前は開発中のものです。
14/03/27 10:43:42.33 LEeCMwpD.net
「効率の良い判定方法を教えて下さい」
「今どきのPCは高性能だからそんな事考えなくてもOK!」
じゃ会話にならないでしょ。
ていうか自分の環境を基準に考えるのは止めたがいいよ。
445:名前は開発中のものです。
14/03/27 11:05:32.54 tJdovPbY.net
「そこに拘るよりは、他の場所がネックになってる可能性が高い」なら回答としてギリギリありかな
446:名前は開発中のものです。
14/03/27 12:17:49.28 68m9m0Mu.net
そうかなぁ。
私も>>425と同じ感想を持ったんだけど。
>>419が実際にそういう総当りをしてみて重かったから他のやり方を聞いてるなら>>432のいうとおりだけど、実際やってみたのかね?
そういう感じには読めなかったけど。
447:名前は開発中のものです。
14/03/27 12:21:35.48 3O8ksg+h.net
判定するまでもなく接触していないことが自明なものはそもそも判定しない、とか
あとは、シューティングゲームなら
「敵x敵、敵弾x敵弾、敵x敵弾の判定は不要だからしない」とかで
判定回数を減らせることがある
(もちろんその判定がシステム上必要ならやるしかないけど)
あと経験不足な人だと
A→Bの判定とB→Aの判定を別個にやっちゃってて
そのせいで速度が出ないってのもあるかも?
これを修正するだけで判定回数を半分にできる
448:名前は開発中のものです。
14/03/27 12:35:21.54 NuLp7Gqa.net
>>434
馬鹿じゃないの?ほんと文章を文字通りにしか受け取れないんだね。
誰が100個限定の質問してんだか。どう見ても数多くのオブジェクトがあった場合の衝突判定の質問だろ。
お前以外は皆わかってそういう答え返してるのに、お前だけが100個という質問の中のどうでもいい部分に固執してるわけだがw
ここを10000個とでも書かないと分からんの?アホだろw
449:名前は開発中のものです。
14/03/27 12:56:33.60 68m9m0Mu.net
>>436
まじか。
想定されるオブジェクトの個数というのは重要な情報だと思ってるんだが、他の人はそうじゃないのか。
1個でも42億個でも対応できるようなやり方を毎回してるの?
100個って書いてあったらだいたい100個くらいを想定してるんだと思うのが普通だと思うが、そうでもないんだなぁ。
450:名前は開発中のものです。
14/03/27 12:59:39.14 LaHWZeJX.net
そもそもプログラム組める奴が434みたいな的はずれなこと言い出す訳がないわけで…
つまり、相手するなカス荒れるから
451:名前は開発中のものです。
14/03/27 13:17:49.49 462b1dLf.net
膨大な数のループを使う判定は書けるんだからさらに増えたらどうすんのって質問でしょ
452:名前は開発中のものです。
14/03/27 14:43:18.93 0LKTz7/0.net
>ここを10000個とでも書かないと分からんの?アホだろw
2Dの当たり判定の処理は軽いから、マンコでも同じ事。 やってみ
453:名前は開発中のものです。
14/03/27 15:10:53.94 2L1CAOZz.net
話変わって悪いけど、レースゲームで車が高速移動しすぎて当たり判定が出来ない場合ってどうすればいいの?
454:名前は開発中のものです。
14/03/27 15:51:52.80 tJdovPbY.net
>>441
1ループあたりの移動速度を半分にして、ループ数を2倍回す。
455:名前は開発中のものです。
14/03/27 19:51:32.13 D4N08/V9.net
>>441
現在フレームをnとした場合、n-1フレームの情報を保持しておいて、nフレームとの線分を引く。
あるいは現在の位置と速度から予測されるn+1の未来予測位置とnフレームとの線分を引く。
この線分が障害物と接触していたら接触した際の処理へ移行するように書いておく。
456:名前は開発中のものです。
14/03/27 20:07:57.55 LEeCMwpD.net
>>440
PCスペックを限定してないのにその回答は無意味だってば。
457:名前は開発中のものです。
14/03/27 21:19:31.28 tdrncXK1.net
たとえ、 2MHz Z80であっても、ディスプレイは40x25のキャラクタ画面だから大丈夫だよ
458:名前は開発中のものです。
14/03/27 22:05:12.78 LEeCMwpD.net
40*25のテキストエリアで10000個のキャラクター動かすのかw
459:名前は開発中のものです。
14/03/28 00:17:11.93 49hdQnYh.net
>>442
大丈夫かよ…
460:名前は開発中のものです。
14/03/28 00:45:18.83 1M6UES2K.net
>>447
俺は>>442じゃないけど大丈夫だと思う、むしろよくある手法じゃない?
アクションの通信対戦で処理落ちする時の同期なんかで使われるのも似たようなやり方あるし
461:名前は開発中のものです。
14/03/28 00:52:56.05 bd0QOyAi.net
一時期の同人げーって処理落ちしまくりで
「こいつら良いマシンで開発してるんだな…」って嫉妬してたw
最近はPCの性能頭打ちでそういうのなくなったからいいよねww
462:名前は開発中のものです。
14/03/28 00:56:09.52 cOG2DjHy.net
>>447
スレチかもしれんがUnityの物理演算部分の判定は秒間1000ループが推奨されてるんだからわりと平気なんじゃね?
463:名前は開発中のものです。
14/03/28 12:11:43.53 /j8PQ+jU.net
>>441
Point before, after; // 前回の座標、今回の座標
int count = 8;
int ix = (after.x - before.x) / count;
int iy = (after.y - before.y) / count;
Point pos;
pos.x = before.x;
pos.y = before.y;
for(int i=0; i<=count; i++){
bool is = collision(pos.x, pos.y); // 当たり判定
if(is) break;
pos.x += ix;
pos.y += iy;
}
count, ix, iyの値をもう少しきちんと平方根使って計ったほうがいいけど
464:名前は開発中のものです。
14/03/28 12:15:19.93 /j8PQ+jU.net
>>451はお絵描きソフトなんかでよく使うんじゃないかな
60fpsでマウス判定じゃ全然足りなくて線が破線になるし
465:名前は開発中のものです。
14/03/28 13:16:45.63 UXW64F/+.net
お絵かきならスプライン補間とかだろ2次元だとカクカクの直線になるぞ
あとそれバグ持ちだな
466:名前は開発中のものです。
14/03/28 22:13:02.97 LlNhW3Yy.net
Windows APIにDirectXが搭載されたならいい加減にウィンドウ生成とかDirectXの初期化とかどんなジャンルでも必要なゲームエンジンの要素とか短縮しねえかな
コピペとはいえ毎回見るのが嫌になってくるよな
ライブラリとかラッパー使えば済むんだろうけど理解するのは面倒だし
467:名前は開発中のものです。
14/03/28 22:28:44.11 cOG2DjHy.net
>>454
会社では無理だけど自分で作るようなら短縮用のヘッダーと関数とか自作しない
理解すればいろいろと便利だし
468:名前は開発中のものです。
14/03/29 09:51:35.35 Pyp/eAfy.net
ウィンドウ周りは自分で適当にラッパー作ったな
都度調べてコピペするより精神衛生的に良い
469:名前は開発中のものです。
14/03/29 13:22:18.51 CYqmosk/.net
さもありなん。
老害にはコードスニペットの概念がないからなぁ。
470:名前は開発中のものです。
14/03/29 21:21:25.19 2TsE/LLz.net
毎回書くような所だけ書いたプロジェクト作ってテンプレートとして登録しとけばいいんじゃないの
471:名前は開発中のものです。
14/03/29 21:48:25.68 fyBJTsa/.net
そしてそのテンプレートが、ゲームを作るたびに更新されていく
472:名前は開発中のものです。
14/03/30 00:08:10.54 mb7Whzhe.net
win32APIで別のプログラムを呼び出したいです
system関数は使ってみたんですがdos窓も一緒に出てきてしまいます
473:名前は開発中のものです。
14/03/30 00:14:44.76 3L4NtrMF.net
>>460
CreateProcessだとDOS窓出なかった気がする
474:460
14/03/30 01:27:38.78 mb7Whzhe.net
ドンピシャでした
ありがとうございます
475:名前は開発中のものです。
14/04/01 17:00:08.51 1bXVipah.net
>459
これありすぎて吹く
476:名前は開発中のものです。
14/04/01 17:13:22.13 mqOcie7s.net
俺もテンプレートってほどいいものじゃないけど
「今回作ったシステム流用すればいくらでもゲーム作れるぜ!:
と毎回思うんだけど、毎回まるまる作り直してるという……。
477:名前は開発中のものです。
14/04/02 10:41:39.05 QH7QljdQ.net
自分で作った3Dゲームにめちゃくちゃ酔うんだけど、比較的酔いにくくする方法ってある?
478:名前は開発中のものです。
14/04/02 11:13:17.38 gG8rIG0W.net
>>465 ちょっと、見せてみ
479:名前は開発中のものです。
14/04/02 12:36:37.68 Y76EY8s4.net
>>465
別にそういう専門知識もってないから経験則になるけど。
酔いやすい人と酔いにくい人がいるけど、酔いやすい人は三次元把握能力の高い人だと思う。これはどうしようもない。
俺は酔いにくい側の人間なんだけど、それでもあるゲームではめちゃくちゃ酔った事がある。
そのゲームはTPSなんだけど「キャラの背後に壁などの障害物があると、それが邪魔にならないよう自動でアングルが変わる」というものだった。
「背後の障害物が透明になる」なら酔わないのに「勝手にアングルが変わる」だと凄まじく酔う事がわかった。
車の運転でも、「運転してる人は酔わない」と言われてる。つ
まり「プレイヤー本人の意思とは関係なくアングルが変わる」と酔う事になる。
他にも、急激にアングルが変わる(目の処理が追いつかない)でも酔うと思われるので、ゆっくり視点を動かす工夫をすればいいのではないだろうか。
あと視点の方向を変えると遠景ほど早く動いて見えるから、遠景はあまり注視できないようにぼかすとか彩度を落とすとかするといいかもしれない。
480:名前は開発中のものです。
14/04/02 16:48:09.93 RKxy3xMo.net
ソニックアドベンチャーDXは何故かすごい酔った
481:名前は開発中のものです。
14/04/02 17:07:31.12 05HXNQtD.net
モニタを「風景の映ってる窓」として捉えると酔いにくい、なんて話も聞いたことがあるね。
482:名前は開発中のものです。
14/04/02 20:57:32.09 SSqz5QAv.net
FOVの設定が悪いとか
483:名前は開発中のものです。
14/04/02 21:38:55.24 Y76EY8s4.net
>>469
上でも言ったが俺は酔いにくい人間で、モニタに映る映像を「一枚の絵」としか認識してないんだよな。
頭のなかで3次元空間を構築しながら見ていない。
ガンブレードNYの動画を見てた時、ぐりんぐりん視界が動くのにまったく酔わなかったんだが、
ふと「一枚の絵としてしか認識してない自分」に気づいて、
頭のなかで方位を意識しながら(3次元空間を意識しながら)見なおしてみると、あっという間に気分が悪くなったw
でもこれは個人の話であってゲームをどうやれば酔いにくくできるかって技術とは別の話だよね。
484:名前は開発中のものです。
14/04/02 22:03:56.84 yy3b+VRk.net
3次元で意識してるけど酔ったことないな
酔うのが不思議でならない
485:名前は開発中のものです。
14/04/02 22:29:30.77 sgFJO2N4.net
3D酔い
カメラの位置と回転中心位置の関係が悪い
カメラ視野角の調整が悪い
カメラ回転の応答速度が遅い
486:名前は開発中のものです。
14/04/02 22:32:07.27 6rTn9j+m.net
>>465
FoVが狭すぎてゲロゲロ
カメラの動きでゲロゲロ
この辺りは既に言われてるようなので、あとはレベルデザインかな。
ぐぐったら自レスが引
487:っかかったのでリンクを貼っとく http://unkar.org/r/gamedev/1223550808/423-452 > 452 : 名前は開発中のものです。[sage] : 2008/12/27(土) 00:34:33 ID:quq8i6DN > >>423 > 遅レスで更に>>425、>>426と微妙にかぶる内容だが > > (1)FOVの問題 > 酔いの原因は様々だが、FOVの調整で改善される場合は多い > プレイヤーの視野角を考えずに3D画面の投影変換行列を設定すると酔いやすい > > ・プレーヤー視点とディスプレイ間の距離 > ・ディスプレイの寸法 > > 以上のパラメータから違和感の少ないFOVを探ることができる > まぁ、既存FPSのFOV値を参考にするほうが手っ取り早いかもな > > (2)レベルデザインの問題 > 閉鎖空間を多用するマップは酔いやすい。これは(1)の問題との組み合わせでより悪化する > FOVをどんなに調整しても吐く奴は吐く。対策としては開放空間(屋外)を多用する方法がある > ただし、閉鎖空間の戦いをウリにするゲームではこの対策はとれない > > BFシリーズはオーケーだけどDOOM3とかHLシリーズは駄目、みたいな人に対処するのは困難 > 狭くて暗い閉鎖空間のスポーツFPSを作るつもりなら酔いやすいユーザーは切り捨てたほうが楽
488:名前は開発中のものです。
14/04/02 23:05:42.17 6rTn9j+m.net
>>473
>カメラ回転の応答速度が遅い
これ、見落とされがちだけどあるよね
ARMAでマウススムージングがデフォルトでONだったので視線の動きに
遅延が生じて気分悪かった。スムージングを切ったら何ともなかった
489:名前は開発中のものです。
14/04/03 00:12:27.55 d8bZaMxb.net
動き回る飛行船の上でアクションシーンを展開したゲームを作って見たいんだけど
着地判定というか、移動する床みたいなのってどうやってるんだ?
飛行船が上に進んでる時に急制動で下向いたら飛行船に乗ってたキャラクターが跳ねるチンフワ現象を取り入れたいんだけど
素直に物理エンジンに託した方がいい?
490:名前は開発中のものです。
14/04/03 00:41:04.11 paQ+FHve.net
物理エンジンが一番楽
正確じゃなくてもいいなら
飛行船が上に進んでいるときにキャラクターの下と飛行船の着地できる部分が接触してるか判定して
接触してるなら飛行船の上の移動量とキャラクターの上の移動量を比べて飛行船の移動量の方が大きいなら
キャラクターの上の移動量を飛行船の上の移動量に書き換える
こうすれば飛行船がいきなり止まったりしたときにふわって感じで浮くことは可能
ただ、違和感はある落ち方になると思うから物理エンジンをお勧めしとく
491:名前は開発中のものです。
14/04/03 01:07:35.19 d8bZaMxb.net
>>477
わかったありがとう
492:名前は開発中のものです。
14/04/04 02:07:12.66 iGGKX1Rj.net
詳しいね
さすがチンフワ総合スレッド
493:名前は開発中のものです。
14/04/05 17:41:08.13 Wu1wSHql.net
クラス分けって具体的にどんな感じでやっていけばいいの?
関数分けまでは普通に出来るんだけど、メンバ変数がある以上クラス分けしたくても出来ないし・・・
494:名前は開発中のものです。
14/04/05 18:16:26.54 cqmzi82f.net
「// ○○を△△する」ってなコメントが書けそうな関数が複数あったら
○○をメンバ変数に置いて、○○を操作する関数をメンバ関数にしたクラスにする
ツッコミどころ多そうだけど大雑把にこんな原則で大体どうにかなるんじゃないかな
495:名前は開発中のものです。
14/04/05 20:43:25.01 nUDfpyEY.net
例えばC言語みたいな手続き型の言語で攻撃の判定処理を作ったとする
1.判定対象を選択
2.判定対象の座標と大きさ、形を取得する
3.大きさや形に合わせて判定する
4.当たってたらhpをダメージ分引いたりノックバックさせたり双方の属性に合わせていくつかの処理に分岐する
5.繰り返し
クラスを使ってオブジェクト指向的に処理する
1.対象を選択
2.対象に「お前この判定対象と当たってなる?」と確認する
3.繰り返し
ここまで書いて何を言いたかったか忘れたのでこのまま投稿する
496:名前は開発中のものです。
14/04/05 20:58:16.49 TIaN2lJ/.net
関数を実行するのに必要な変数をまとめたのが最小単位かな
変数として持つデータに依存する部分はメンバ関数にしたいけど
std::stringみたいになんでも入れちゃうのと
マイナーな機能は引数を取る静的関数や別クラスに分けるかはまた悩む
497:名前は開発中のものです。
14/04/05 21:40:17.97 nUDfpyEY.net
オブジェクト指向を完全に突き詰めると動詞の関数しかなくなるような気がしないでもない
ゲームなら特に
498:名前は開発中のものです。
14/04/05 22:14:07.33 k4ryh3Xy.net
>>482
ええー、そんな感じなの。想像してたのと違うなぁ。
あ、俺は480じゃないけど似たような問題に詰まってる者です。
499:名前は開発中のものです。
14/04/06 01:53:43.72 E+ECXvrW.net
まあオブジェクト指向の作法については
それだけで厚めの本が出るぐらいだし・・・
500:名前は開発中のものです。
14/04/06 12:16:47.72 kDoD0j2F.net
自分のことは自分でやれってことだよ
501:名前は開発中のものです。
14/04/06 16:07:09.03 4sjYlVDb.net
だねぇ
>>480,>>485
完成させてからのリファクタリングの段階ということなら具体的に説明
できるだろうしコード片をうpってもいいだろうし、お話になるのでは
話の振り方次第ですお
502:名前は開発中のものです。
14/04/06 16:50:44.66 MlcK3xAD.net
例えばだけど、こういう場合はどうした方がいい?
class Player
{
public:
Player();
void update()
{
aClass_.update();
bClass_.update();
}
private:
A aClass_;
B bClass_;
};
503:名前は開発中のものです。
14/04/06 16:51:17.53 MlcK3xAD.net
class A
{
public:
A();
void update()
{
//メンバ変数とBクラスのx_が必要
}
private:
int a_;
int b_;
int c_;
};
class B
{
public:
B();
void update()
{
//メンバ変数とAクラスのa_が必要
}
private:
int x_;
int y_;
int z_;
};
504:名前は開発中のものです。
14/04/06 17:03:11.51 sV4Btc1C.net
>>490
class Aの前にclass B;を書けば良いんじゃね?
505:名前は開発中のものです。
14/04/06 17:10:52.22 7eM4W795.net
横からだけど
とりあえず動作すれば良いってだけならクソ回答としてupdateの引数にそれぞれ渡してあげる
渡し方はゲッターとかクソだけど
506:名前は開発中のものです。
14/04/06 17:34:28.11 tqEQPRwf.net
素人意見だがPlayerにabcxyz持たせて引数付きupdate作るとか
PlayerのupdateかprivateにupdateA,updateB作ってべた書きとか
AとBくっつけるとか
俺はどうしても他で必要にならない限り分けない、
enemyで必要とかになればそもそも一つ前にcharacterとか作って両方に持たせるとか
507:名前は開発中のものです。
14/04/06 19:31:11.73 3nuwa43P.net
>>489
クラスAとBが相互依存してるから設計しなおす
508:名前は開発中のものです。
14/04/06 20:11:48.21 4sjYlVDb.net
言いたい事は全部言われてた
①AとBは合体だ!フュージョン!
②AとBで壁パスだ!ダブルディスパッチ!
③Playerが面倒見ろ!メディエーター!
AとBが具体的に何なのか分からないとアレだよな
プレイヤーの所有物で、相互作用(値のやり取り)がある二つのもの。
しかし、プレイヤーとの間に作用はない。
ダウジングのアレとか?
509:名前は開発中のものです。
14/04/06 20:19:27.91 kDoD0j2F.net
合体魔法をプレイヤー複数人で打つとする
トリガーとなるプレイヤー一人が発動したら周囲のプレイヤーの合体魔法用のメソ
510:ッドを呼ぶ メソッドの中ではそのプレイヤーのmpを減らしたりクールタイムを追加したり硬直したりする トリガープレイヤーはそのメソッド呼ぶだけだから、もしかしたらプレイヤーによって処理は違うかもしれないが、とにかくそのプレイヤーは合体魔法に参加した メソッドの返り値で成否を確認してもいい その複数のプレイヤーの中心の座標に合体魔法を発動するなら、その計算処理はトリガープレイヤーがやる
511:名前は開発中のものです。
14/04/06 20:22:50.98 kDoD0j2F.net
>>490
AとBの使用用途を書け
シチュエーションによって考え方が変わり、考え方に依存するからオブジェクト指向が最も効率いいとされて普及してる
512:489
14/04/07 10:11:55.44 /pjQGnIZ.net
>>497
Aクラスはキー入力の処理
Bクラスはキー入力後の移動処理と当たり判定
513:名前は開発中のものです。
14/04/07 12:25:22.90 /OCJvUrM.net
最近は全部hppで書くのか?
ちゃんと.hと.cpp分けろよ
514:名前は開発中のものです。
14/04/07 20:27:14.10 bPq5EneU.net
>>498
A…キー入力の処理
↑B.x_ ↓A.a_
B …キー入力後の移動処理と当たり判定
A→Bのデータの流れは分かるが、B→Aのデータの流れは何だ?
フォースフィードバック?
俺はこういう小出しの後出しジャンケンは別に気にしないけど
完成後のリファクタリングの段階なら「具体的に」書けるっしょ?
そろそろ誰かがキレると思うよ
515:489
14/04/08 07:12:29.49 mcCDKO91.net
>>500
なんかごめん・・・
とりあえずこの質問はスルーってことでorz
516:名前は開発中のものです。
14/04/09 00:58:15.38 wd1GU5kL.net
テンプレートのせいか全部ヘッダ(h, hpp)に全部書く奴いるけど
面倒くさくてもC++としてはちゃんとヘッダとソースは分けるべきだよ
517:名前は開発中のものです。
14/04/09 01:28:10.85 f0hevqdx.net
>>502
あるべき論なんて一考にも値しない。
アホは、何故そう考えるのか理由を述べない。
518:名前は開発中のものです。
14/04/09 08:02:26.21 zim/sso+.net
煽るだけで何も説明しない人による華麗なる自虐芸
519:名前は開発中のものです。
14/04/09 10:52:16.89 uf/6C2tB.net
レースゲームのAIってどうやってるの?
経路探索だけで市販のゲーム風に出来るの?
520:名前は開発中のものです。
14/04/09 12:11:54.87 0loekIA0.net
幾つか方法はあるが、コース上に複数の「点」を作っておいて
順番にそれを通過するように組む……というのが単純かな?
521:名前は開発中のものです。
14/04/09 12:53:17.52 HhpB/vqN.net
多数の車が走ってて接触しないようにコース補正とか大変そうだな。
522:名前は開発中のものです。
14/04/09 13:04:35.78 6ESwZ9mm.net
リアル思考でない限り見えないところは適当だろ
多少ぶつかってもペナルティがほとんどないとか
ありえない速度でカーブ曲がってたりとか
523:名前は開発中のものです。
14/04/09 13:16:31.51 ZCvd+vVA.net
カービィのウエライドのデバッグモードを録画した動画がニコニコにあるからそれを見るといい少しはマシになるだろう!
524:名前は開発中のものです。
14/04/11 00:20:28.36 GEtB1yKl.net
決められたパスを ヘ(^o^)ヘ
|∧
/
/
ただなぞるよりも (^o^)/
/( )
/ / >
(^o^) 三 選んだ自由に
(\\ 三
< \ 三
..\
(/∀・) 傷付くほうがイイ!
( /
/く
525:名前は開発中のものです。
14/04/12 02:15:31.36 fxOCMkQi3
こっちだと規制されてナインかいな
526:名前は開発中のものです。
14/04/12 22:13:32.52 Zyf8FLOE.net
ちょっとわかんないからサッカーで説明して
527:名前は開発中のものです。
14/04/12 23:44:55.21 0ybV74Ha.net
初
528:めて作ったゲームは目標に向かって一直線に飛ぶ意味わからんハエみたいなシューティングゲームだった
529:名前は開発中のものです。
14/04/13 10:10:40.70 /fZAahnL.net
プログラム全く関係なくて物理の話で悪いんだけど、戦車が止まってる時と高速で動いてる時に大砲を撃った場合の大砲の速度って違うよね?
ググってもそれらしき情報が出てこないんだけど、具体的に方程式的なのってあるの?
530:名前は開発中のものです。
14/04/13 10:15:03.46 WZFk6ORN.net
戦車の速度+大砲の初速
これじゃないの?
531:名前は開発中のものです。
14/04/13 10:22:56.57 P+5kfwmh.net
ベクトル合わせるだけじゃん
532:名前は開発中のものです。
14/04/13 14:11:27.24 8it2YQcZ.net
もちろん空気抵抗やらゲームバランスやら考慮するなら変わってくるけどな
533:名前は開発中のものです。
14/04/20 10:51:05.10 b2XGGGld.net
矩形判定を3次元に拡張したのがAABB判定だと思う
534:名前は開発中のものです。
14/04/20 14:59:59.27 It9vI7xg.net
各辺が軸に平行、という前提でいいの?
535:名前は開発中のものです。
14/04/20 16:02:57.62 Lsg8M/g2.net
>>519
それで大丈夫
まあさすがに回転してるのは無理だし・・・
536:名前は開発中のものです。
14/04/20 16:18:17.37 2PHJETXp.net
それは簡単なんでないの
上辺が相手の下辺をより上&&下辺が相手の上辺より下
を3軸分やればいいだけなのでは?
回転する直方体の衝突判定ってまるぺけになかったっけ?
537:名前は開発中のものです。
14/04/20 17:29:26.22 It9vI7xg.net
最初から「平面上での矩形同士の当たり判定」と考えるから、そこから応用しにくいんじゃないか?
直線上で線分同士が重なってるかどうか?という判定があって
単位、それを2回やったのが矩形同士の当たり判定だと考えれば良い。
そうすると、3次元や4次元(?)も、そのまま使えそうだろ?
538:名前は開発中のものです。
14/04/22 06:39:03.06 2qdEj7/z.net
スーパーマリオ64風のゲームを作ってるんだけど、ステージとプレイヤーの当たり判定ってどうすればいいの?
一応球体の当たり判定と線分の当たり判定でやってるんだけど、坂を下ろうとするとジャンプするように落ちていくっていう・・・
539:名前は開発中のものです。
14/04/22 07:04:26.37 Xs5gC1x8.net
ゲームエンジン、物理エンジンの吟味から。
いいやつ教えてくれ。
540:名前は開発中のものです。
14/04/22 07:13:32.39 Ld5gvQeA.net
>>523
斜めに移動させる
541:名前は開発中のものです。
14/04/23 20:54:31.77 wDU0qJca.net
DXライブラリを使っているのですがタイトル画面やゲーム画面でループを変えるべきでしょうか
一つのループでswitchを使ってシーンを変えているのをいろんなサイトで見ますがこういう処理が当たり前なのでしょうか
542:名前は開発中のものです。
14/04/23 20:58:04.86 FTq0ixvH.net
stateパターンオヌヌメ
543:名前は開発中のものです。
14/04/23 21:00:21.88 zNP7HvPv.net
俺も最初は画面ごとにループ変えてたけど、ループはひとつにまとめるようになったな。
理由は、ループは違っても共通のやること(キー入力とか画面出力処理)があって
そういうのを画面のループごとに別々に処理させてると管理が面倒だから。
(もちろん共通処理として関数化してはいたが、それでも面倒だった)
544:名前は開発中のものです。
14/04/23 21:36:36.02 wDU0qJca.net
>>527
なんですかそれ
>.528
なるほど
545:名前は開発中のものです。
14/04/23 21:48:10.54 a2O6zNfs.net
>>526
ループ自体は1つにして、そこから何らかの方法で振り分けるのが定番。
複数ループは即「やめとけ」って言われるレベル。
そこだけ守れば、あとはifで関数に投げるなり、switchで分けるなり、好きなようにすればいいと思うよ。
stateパターンについては、処理を振り分けるアルゴリズムの1つだけど
まあ、別にいいんじゃないかな。
546:名前は開発中のものです。
14/04/23 23:54:04.86 FTq0ixvH.net
>>529
ググれ
547:名前は開発中のものです。
14/04/24 08:45:54.28 wxyjU1
548:yy.net
549:名前は開発中のものです。
14/04/24 09:15:53.69 1SkTvrzJ.net
データベースといい会社組織図といいマトリクス型はなぜ好まれないのか
550:名前は開発中のものです。
14/04/24 09:46:36.37 XVAalfN1.net
>>532
参考資料などがなかった場合、半分くらいは、
真っ先に思いつくのがループを個々に用意する方法のような気もする
551:名前は開発中のものです。
14/04/24 10:21:00.95 7sQk5lBb.net
オブジェクト指向的に考えるとオブジェクトごとに独立したループが存在してるのもあり得るしな
OSのフレームワーク含めてスレッドセーフな実装があまりない事にがっかりしたり
552:名前は開発中のものです。
14/04/24 11:59:52.01 1ftwUtau.net
そのループ(というか一連の処理)の意味合いを無視して設計空論しても意味ねー
たかがシーン遷移でぶん回すループを、複数個所にコピペベースでおく意味がねー
553:名前は開発中のものです。
14/04/24 12:13:26.57 47DD1/Qn.net
ループ型を嫌う人はシーン数が数十個を越えてもswitchで分岐して作るのか、大変だなwww
554:名前は開発中のものです。
14/04/24 12:53:05.17 1ftwUtau.net
イミフだろ。どの案でもループ必須なのに、ループ型ってなんだよw
555:名前は開発中のものです。
14/04/24 13:22:18.45 fX1ni8oz.net
ポリモーフィズムか関数ポインタ使えよ
556:名前は開発中のものです。
14/04/24 14:53:44.57 47DD1/Qn.net
で、数十の関数名やクラス名をわざわざ考えるのか、面倒だな
557:名前は開発中のものです。
14/04/24 16:29:40.03 LCot+zJd.net
ループが別々にあったら前のループにどうやって戻るんだ?
goto?
558:名前は開発中のものです。
14/04/24 16:45:42.04 lgj86FWp.net
ループ内にループが入ってる
559:名前は開発中のものです。
14/04/24 17:08:30.80 LCot+zJd.net
その発想はなかった
560:名前は開発中のものです。
14/04/24 17:46:16.58 VQozCS4c.net
ループザループ
561:名前は開発中のものです。
14/04/24 18:52:19.44 GSyZUE1j.net
>>540
シーンの数が数十ってどんだけ大規模なゲーム作ってんのw
562:名前は開発中のものです。
14/04/24 19:03:46.70 AvrqiUr+.net
C++でゲームを作ろうとすると
ゲームというよりゲームエディタになってしまう
563:名前は開発中のものです。
14/04/24 19:18:31.92 wxyjU1yy.net
>>546
ゲームを作ってたつもりがエフェクトエディタが完成していた私のことをなぜ知っている
564:名前は開発中のものです。
14/04/24 19:23:13.77 47DD1/Qn.net
>>545
ドラクエ3程度
565:名前は開発中のものです。
14/04/24 19:36:08.29 7gC8mbT8.net
>>548
その数十のループを1ソースにまとめるってとんでもないスパゲティだなw
完成すんのそれw
566:名前は開発中のものです。
14/04/24 19:54:33.85 1SkTvrzJ.net
つーかシーン(画面)をクラスで1:1で管理して、
次回どのシーンを描画するのかポインタ返すってやり方の方がスマートじゃね?
567:名前は開発中のものです。
14/04/24 20:37:26.16 47DD1/Qn.net
画面の上から下に順番に動作しないと理解出来ないから今のやり方でやってるんだけどね。
関数ポインタやクラスで分けるとあちこちに跳びまくるよね?ソレも嫌だから今のやり方でやってきた。
けどまあ、流れが判らなければ図を描けば済む話か。それでも、今の段階でやり直すのは……ん?
マップや戦闘のメインのシーンは今のままで良いな。サブのシーンの扱いは、直してみるかな?
ちょっと寝かしていたソースだが、色々と検討してみるか。
568:名前は開発中のものです。
14/04/24 20:41:28.50 XVAalfN1.net
>>540
世の中にはディレクトリとか名前空間って概念があるから、便利なものよな
569:名前は開発中のものです。
14/04/24 20:55:45.26 7sQk5lBb.net
ポリモーフィズムで関数の名前考えなきゃならないてどういう状況だよ
クラス名なんて実装したいシーンの名前をそのままだから考える必要ないし
570:名前は開発中のものです。
14/04/24 22:24:05.32 /wenCDDH.net
中身は空でいいからすべての遷移とデータの
571:受け渡しくらい先に設計して実装しましょう。
572:名前は開発中のものです。
14/04/24 22:35:04.46 1SkTvrzJ.net
プログラミング自体に慣れてないんだろうけど
一人でコード組むなら図なんて書いたりしないからな
頭の中の仕様書通りにコード打つだけなんだから
573:名前は開発中のものです。
14/04/24 22:39:32.56 1SkTvrzJ.net
ポリモーフィズム使うならむしろ名前は考えなくていいだろ
574:名前は開発中のものです。
14/04/24 22:41:52.64 1SkTvrzJ.net
普通はポリモーフィズムで大まかに分岐した後関数ポインタで細かく分岐するよな
背景に3Dフィールドを表示したまま半透明なステータス画面を描画したいとか
575:名前は開発中のものです。
14/04/24 23:29:46.37 /YmGGjJz.net
クラスや関数を分けると処理が飛んで困るってstaticおじさんか
576:名前は開発中のものです。
14/04/24 23:39:57.11 XVAalfN1.net
ポリモーフィズムの実現手段の1つとして関数ポインタが使われることもあるんだから
その表現はちょっとおかしい気がする
いや言いたいことは分かるけどね?
577:名前は開発中のものです。
14/04/25 01:06:43.73 8lxSsrEc.net
なんでこういう話になったら、いちいち相手を馬鹿にする人間が出てくるのかね。
578:名前は開発中のものです。
14/04/25 06:16:12.48 GoYRAt3T.net
数十のクラスが複雑に入り組むプログラムなんて作れない(能力が無い)からでは?と予想
579:名前は開発中のものです。
14/04/25 07:46:12.69 XsfFQEHl.net
>>561
いいウィットだな
580:名前は開発中のものです。
14/04/25 09:30:36.62 jXAfeA6F.net
>>557
こういうのどうやって実装すんの?説明してるようなサイトがあったら教えてちょーだい
581:名前は開発中のものです。
14/04/25 09:42:20.41 XsfFQEHl.net
Stateパターンによる階層付きシーン遷移の方法は、確かセガ本あたりに載ってたような記憶がある
582:名前は開発中のものです。
14/04/25 09:54:22.08 IVfFtFPz.net
ゲームプログラマになる前に覚えておきたい技術
ひらしょー本、セガ本
URLリンク(www.shuwasystem.co.jp)
URLリンク(www.shuwasystem.co.jp)
583:名前は開発中のものです。
14/04/25 10:04:41.29 jXAfeA6F.net
昨日ちょうどそのセガ本の話が有名な同人プログラマのネット配信で出てたわ
「その本はプログラマになる前じゃなくてなった後に読む本だ」って言ってた
584:名前は開発中のものです。
14/04/25 10:18:56.59 cWxmDdU5.net
その本って学生レベルでも中の下くらいだろ
585:名前は開発中のものです。
14/04/25 12:50:45.98 bu2wQqL4.net
>>561
というか、そもそもデバッガでソース追えないという話に帰結しそうなのだが。
関数の中とかに「飛ぶ」訳ですし。
今後の事もあるから、「飛ぶ」事に慣れるのが肝要だと思いますけどね。
586:名前は開発中のものです。
14/04/25 15:11:16.15 uQbX0MMa.net
セガ本で難しかったらgemsとか見たらもう発狂だな
587:名前は開発中のものです。
14/04/25 15:22:16.96 5DdHErYn.net
14歳からはじめるC言語わくわくゲームプログラミング教室
著者:大槻有一郎
URLリンク(www.rutles.net)
かなりの素人向け、図書館にあるかもしれない。
内容はこれ、URLリンク(www.rutles.net)
588:名前は開発中のものです。
14/04/25 16:40:46.26 jXAfeA6F.net
ゲームプログラマの新人でも面接時の作品提出では皆C+DirectX直打ちの人ばかりだようんたらかんたらという
流れの中で言ってたから、難しいというか本に頼らずともネットで情報集めてとにかく作れって感じだった。
その人自体もオブジェクト指向とか意味わからんでゲーム作ってるとか言ってるけど、
同人だけじゃなくコンシューマ機
589:のゲームプログラムを1人で担ってるような人だし、 要は本見て文法覚えるより、汚くていいからとりあえず作品完成させろってことかと。
590:名前は開発中のものです。
14/04/25 17:46:46.24 WhIg+aCP.net
>>571
とりあえず完成させろってのはその通りだな
ここでウンチク垂れ流してても自分の作品は完成させたことないってやつは多そう
そう、私の事ですorz
591:名前は開発中のものです。
14/04/25 18:37:51.58 kjeLMb9X.net
directx直打ちじゃないけど大手新卒通ったわ
592:名前は開発中のものです。
14/04/26 01:38:49.39 jf1SN+DQ.net
ゲームコーディングコンプリートって本にはGameLogicってクラスでゲームの状態を切り換えている
ソースコードはネット上にあがってるぞ
593:名前は開発中のものです。
14/04/26 13:10:08.96 2tKTewnx.net
ぱっと見た感じ、キューかなんかで格納してる?
594:名前は開発中のものです。
14/04/26 19:33:37.45 x5oOyDOe.net
スパロボみたいなゲームだと
・フィールドシーン
・戦闘シーン
・アドベンチャーシーン
・シナリオ準備シーン
みたいな感じに大別されるよね
シーンはキー入力の挙動も変わるから
それも内包しないといけないよね
595:名前は開発中のものです。
14/04/26 19:37:39.56 IEmpvB3E.net
メニューとかの後の分岐はどうやってるの?
596:名前は開発中のものです。
14/04/26 19:58:38.34 3cite/BR.net
URLリンク(i.imgur.com)
これがPC98ロードランナーのチャートで、
イニシャライズ以下がゲームループになってる。
597:名前は開発中のものです。
14/04/26 20:05:42.07 2tKTewnx.net
デモ読み込みはゲームループ外で、実際のデモ画面はループ内なんだな、面白い。
俺が思ってるデモ画面と別のものかもしれんけど。
>>576
当たり前っちゃ当たり前だけど、
フレームワークなりハードウェアなりから、キー情報を取り出したり使いやすいよう加工するのは共通部分で、
右キーで1マス動かすとか、そういう部分は各シーンのロジックで処理するのが良いんじゃない?
>>577
メニューって、「じゅもん」→「メラ」→「スライムA」 みたいな
シーン中に行われる多層型のメニューのこと?
598:名前は開発中のものです。
14/04/26 21:29:25.57 5LBrFF8V.net
ポップアップメニュー出しながらもカメラや移動とか一部の操作はできるようにするとかだと
優先度とかそのキーで処理済みかの情報が欲しいから
シーンや入力が欲しいオブジェクトが欲しいキーを入力マネージャに登録しておいて
優先度の高い特殊なキーの組み合わせだけ先に処理して
あとは上位に位置するオブジェクトからキーを拾って処理して未処理は下に投げるとか
WindowsのWM_CHARを参考にしたキー処理終わってから各Updateみたいな事になってるけど
重複する事もあるキー入力の切り分けをシンプルに実装する方法ないかな
599:名前は開発中のものです。
14/04/26 22:11:57.41 x5oOyDOe.net
キー処理用スレッドを作ってGetAsyncKeyStateを回すとか
600:名前は開発中のものです。
14/04/27 03:54:19.08 WYXfeo+B.net
よく分からん質問だけどUIコンポーネントの階層でやれば?
class Parent : UI {
UI* child;
void update(Event* e){
// 特殊キー
bool isCopy = Key::isHold(Key::LCtrl) && Key::isHold(Key::C);
// 子コンポーネント先
child->update(e);
// 子コンポーネントでキー入力が確定した
if(e->isKeyEvent == false) return;
// このコンポーネントのキー入力
bool isThis = Key::is ... ;
}
};
class Child : UI {};
601:名前は開発中のものです。
14/04/27 10:28:25.38 C+qpjQzl.net
>>580
ポップアップメニューはモーダルなインタフェースだから
ある1つのオブジェクト(または選択されたオブジェクト群)を集中して操作しているのに
関係がないオブジェクトを操作ができるのはおかしくない?
602:名前は開発中のものです。
14/04/27 10:46:42.01 w1gNzEbH.net
恐らくだけど、ここでのポップアップメニューは一般的なGUI部品のソレではなくて、
fpsでよく利用されてるポップアップする選択形式のウィンドウの事でね。
wasdで移動しながらメニュー表示キーを押す事でソレが表示され、マウスカーソルでメニュー選択できる、みたいな。
とりあえず>>582で問題ないと思うけどね。
603:名前は開発中のものです。
14/04/27 18:14:34.21 Pq1XXwa+.net
>582のままだと何個か同時押ししてる時に子供がキー処理しちゃったら
親は欲しくて子供では未使用のキー情報取りたくとも来なくない?
604:名前は開発中のものです。
14/04/27 18:30:43.78 ZxV1P0nx.net
どういう状況?
605:名前は開発中のものです。
14/04/27 18:38:37.60 Pq1XXwa+.net
メニューが子供でWASDで移動してるとして押しっぱなしで
メニューの選択を動かす矢印やショートカット等の何らかのキー押したら
移動のキー処理が省かれ、結果移動が止まる
606:名前は開発中のものです。
14/04/27 19:14:17.90 ZxV1P0nx.net
ああ、なるほど。
あんまりPCでゲームやらないので分からんのだけど、市販ゲームだとキーアサインはどうなってるのかな。
メニューを開いてない状態で使えるキー(デフォルトだとWASDとか?)は、メニュー画面で何の処理にも使われないような感じ?
607:名前は開発中のものです。
14/04/27 19:44:36.31 DG4EJccZ.net
使うキー全てを押されているか1つ1つチェックしていけばいい
608:名前は開発中のものです。
14/04/27 19:59:45.12 8WD0svuP.net
市販ゲームを買って調べろよ
知らないとこにゲームを作るなんてアホなの
LINEをやったこと無いのにLINEスタンプを作って儲けようとするアホと一緒
609:名前は開発中のものです。
14/04/27 20:22:36.88 ZxV1P0nx.net
>>590
全く意味は分からんが、何か気に触ったようなのでスマン
610:名前は開発中のものです。
14/04/27 21:47:11.67 zcnpepzc.net
RPGなどの、キーを1回押したら次のマスまで移動するようなゲームの衝突判定は
自キャラの位置と壁の位置を二次元配列で管理できるので作れるのですが、
アクションゲームのように、キーを1回押したら数ピクセルしか進まないような
ゲームの場合、マップチップエディタでマップを作った場合、衝突判定はどうするのでしょうか?
611:名前は開発中のものです。
14/04/27 22:33:28.11 vcLDHUdb.net
衝突判定は、全部が計算で出る。 二次元配列で管理と同じ。
612:名前は開発中のものです。
14/04/27 23:24:50.87 ZxV1P0nx.net
>>593
ソース見てみないと分からんけど、今まで1対1で対応するような当たり判定しかやってなかったので
そのままでは応用が効かないって話じゃない?
>>592
こういう場合に昼用となるのは、ある範囲とある範囲同士が、
座標上で重なっているかどうかをチェックする、という処理が必要となる。
少し前にも似たような話題があったが、
まず1次元上で、線分Aと線分Bが重なっているかどうかを判定する処理を考えてみよう。
+---- A ----+
0----------------------------------------X
+-------- B --------+
答えを言ってしまうが、Aの右端がBの左端より右側」にあり、Bの左端がAの右端より左側にあるとき
線分AとBは重なってると言えるのが分かる。
これで少なくともX軸から見た時に重なって見えるかどうかを判定することが出来る。
じゃあこれをもう一度、Y軸に対してやれば、結果として重なってるかどうか分かると思わないかい?
一応、この判定には欠点があったりするけど、そのへんは詳しい諸兄に任せる
613:名前は開発中のものです。
14/04/27 23:39:37.39 +r7oKZO8.net
592の質問ってそういうレベルの話なのか。
もっと複雑な話かと思った。
マップチップでブロック単位(要するに矩形判定のみ)しかしないんだったら
593の言うとおり2次元配列管理でいいんじゃないかな。
�
614:タ標をマップチップのサイズ(ピクセル)で割れば配列の座標は出る。(小数点以下切り捨て) たとえばマップチップのサイズが 16*16 でマップデータが二次元配列に格納されてるとしたら (100,150) の部分は二次元配列でいう (6,9) の部分という事になる。 あとはRPGなどと同じように衝突判定すればいい。
615:名前は開発中のものです。
14/04/27 23:47:48.15 zcnpepzc.net
>>593-595
ありがとうございます!
>座標をマップチップのサイズ(ピクセル)で割れば配列の座標は出る
この考えが欠けてました。言われれば当たり前のことなのに1人で悩んでると全然思い浮かばない(´・ω・`)
616:594
14/04/28 01:02:00.85 BBr+Jrn/.net
>>595
あー、そっちか
お恥ずかしい
617:名前は開発中のものです。
14/04/28 09:50:59.01 GzOhtwBz.net
それだけだと自キャラがどのチップ上にいるかしかわからんから
壁と自キャラが重ならないようにするにはちょっと工夫いるんじゃない?
例えば自キャラの上下左右全部で衝突判定するとか
618:名前は開発中のものです。
14/04/28 14:28:53.40 uu2sZY8y.net
そんな必要ないよ。
自分の位置より進行方向1ブロック分をチェックして障害物なら動かなくすればいいだけ。
619:名前は開発中のものです。
14/04/28 14:31:26.43 uu2sZY8y.net
ああ、いや違った。
上と左に関しては進行方向1ピクセル分だった。
620:名前は開発中のものです。
14/04/28 19:55:37.77 BBr+Jrn/.net
>>599-600
アクションゲームでそういう処理をするゲームは少なそうだが
621:名前は開発中のものです。
14/04/29 00:40:51.84 EMV53Qmd.net
>>530-536
大昔にタスクシステムスレだったかSTGスレだったかにこんな感じのソース
(微妙に違うかもだが)を貼ったが、別にゴチャゴチャ言われなかったけどな
因みに同人STG
int APIENTRY _tWinMain(HINSTANCE,HINSTANCE,LPTSTR,int)
{
try{
boost::shared_ptr<GAMEENV> gameenv(new GAMEENV); //D3D,SOUND,INPUT,USERDATA,etc
boost::scoped_ptr<SCENE> logo(new LOGO(gameenv)); //ロゴ画面
boost::scoped_ptr<SCENE> demo(new DEMO(gameenv)); //デモ画面
boost::scoped_ptr<SCENE> title(new TITLE(gameenv)); //タイトル画面
boost::scoped_ptr<SCENE> config(new CONFIG(gameenv)); //コンフィグ画面
boost::scoped_ptr<SCENE> stage1(new STAGE1(gameenv)); //ステージ1
(…中略…)
boost::scoped_ptr<SCENE> stage8(new STAGE8(gameenv)); //ステージ8
boost::scoped_ptr<SCENE> ending(new ENDING(gameenv)); //エンディング
logo->Run(); //ロゴ画面再生