[過去ログ] 【ゲームで、この処理ってどーやってんの?】 (125レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1
(32): 1 [sage] 2018/05/30(水) 20:09:05.10 ID:fZdspc/Y(1/23) AAS
ゲームを作ってるor作りたい人が、自分のゲームに実装したい処理や、既存のゲームのこんな処理ってどーやって実現してるの?と質問すると、心優しい誰かが説明してくれるスレです。

質問は、これこれこういう処理、〇〇のゲームのこれみたいな、とか、△△のこの面のこれってどーやってんの?という感じで既存のゲームなどを例示したりして、分かりやすい質問を心がけましょう。

説明は、コード羅列は禁止しましょう。長文でも良いので、このようにできている、又は、こんな感じでできるんじゃない、という風に文章で分かるような説明を心がけましょう。

■ゲーム開発会社がゲーム製作技術を伝授するスレ
2chスレ:gamedev
↑上記スレを見ていて、現スレのようなのがあれば、便利かなと思って建てました。
2: 1 [] 2018/05/30(水) 20:10:02.65 ID:fZdspc/Y(2/23) AAS
sageちゃアカンやんage
3
(6): 1 [sage] 2018/05/30(水) 20:18:53.13 ID:fZdspc/Y(3/23) AAS
即消されないように、しばらく自問自答したいと思います。
自分がなるほどなあ、と思った超基礎的なやつ。
1行なのでコードで書かせてください。いきなり禁止破り。原則禁止、とすべきでした。

0〜nの数字を順送りし、n番目の次は0に戻る処理

a=(a+1)mod(n+1)

n+1で、増えていくaを割った余りを返すことで、nの次は0に戻る処理です。
4: 1 [sage] 2018/05/30(水) 20:19:57.56 ID:fZdspc/Y(4/23) AAS
a+1の1を任意の数値にすることで、いくつ進めるかを任意にできます。
5
(1): 1 [sage] 2018/05/30(水) 20:28:15.39 ID:fZdspc/Y(5/23) AAS
次。
0〜nの数字を順送り逆送りして、n+1で0、0から-1になった場合nになる処理。

どーだっけな。
m:加算値(+1や-1など任意の正負の数

a=(a+m+n+1)mod(n+1)
合ってるかな。

a+mに最大値nと1を足すことで、a+mがマイナスになった場合、プラスの数値に変換し、n+1で割った余りを戻すことで、0-1をnに送ることができます。
式、合ってるよね?
6: 1 [sage] 2018/05/30(水) 20:33:03.41 ID:fZdspc/Y(6/23) AAS
マウスドラッグで画面をつまんでスクロール。

描画座標x,y
?ドラッグ開始座標dx,dy
?マウス座標mx,my
描画タイミングごとに、?と?の差を描画座標に加算して描画して、?に?を代入する。

こんな感じだったっけ。
7: 1 [sage] 2018/05/30(水) 20:36:40.03 ID:fZdspc/Y(7/23) AAS
ちなみに、1は自分でゲーム作ってる人です。
作ってる時に、あ、なるほどー、自分で思いついた俺、天才!とか思ったことを、しばらく書いていきたいと思います。
8: 1 [sage] 2018/05/30(水) 20:48:44.78 ID:fZdspc/Y(8/23) AAS
クロスバー表現。
アイテムなどを種別ごとに横並び、強さなどごとに縦並びで、PS3のクロスメディアバーのようなものを作りたくって考えました。

詳しくはちょっと忘れちゃったけど、今作り直したらもっと理解して作れそう。

横種別がn
縦並びのアイテムを配列yoko(n).data(m個(種別ごとの動的配列)
で、表示開始ID、横用yと縦用t(n)を持ち、
操作で、yとt(n)が変化するごとに表示内容が変わります。
t(n)なので、横に動かすと全体が横移動しますが、縦に動かすと、1列のみ縦移動するように動きます。
9: 1 [sage] 2018/05/30(水) 20:52:50.23 ID:fZdspc/Y(9/23) AAS
その際、マウスの動きが縦方向なのか、横方向なのかを検知する必要がありました。

これは、上記マウスのドラッグで移動を応用して、
開始座標と、0.01秒とかの短い時間後のマウス座標の差から絶対値を出し、x>yなら横移動、y>xなら縦移動したとみなして、それぞれの処理を行ないます。
10: 1 [sage] 2018/05/30(水) 20:56:23.56 ID:fZdspc/Y(10/23) AAS
この部分はもっと最適化できそうだけど、めんどいので放置してます。

というか、自分が考えついた処理は、unityとかのツールだとライブラリであるのかなあ、と思いますが、あえて遠回りしてる自分が良いのか悪いのか、トホホ
11: 1 [sage] 2018/05/30(水) 21:06:17.17 ID:fZdspc/Y(11/23) AAS
自分の疑問も書いておきます。

■星のドラゴンクエストで、球形マップを、?クルクルした後、回転をリセットすると、球形マップの?初期表示角度に戻ると思うのだけど、戻る途中の描画に使う角度などの計算はどうやってるの?

クルクルは自分で作れたつもりなんだけど、xyzの三軸回転と視点カメラの位置と方向とかも含めて考えるとこんがらがってわけわかめ。
12: 1 [sage] 2018/05/30(水) 21:10:30.09 ID:fZdspc/Y(12/23) AAS
ちなみに1の知識はファミコンレベルかと思いますので、ご了承ください。
13
(1): 1 [sage] 2018/05/30(水) 21:16:08.81 ID:fZdspc/Y(13/23) AAS
先日他スレで書いたやつ
ファミコングラディウスの2面の粒々のあたり判定

粒々は配置されてる動かない物体なので、横スクロール座標と、ビームなどの座標を合成した座標に、粒々があったら当たったと見なして消滅処理すればイイんじゃないかなあと思いました。

例えば、現在表示される画面を描画する際、8×8ドットごとに区切ったマトリクスを2次元配列で持つとかして、中身は0:空っぽ(背景)、1:破壊可能物体、2:破壊不可物体とかを設定。
これは、面のマップ情報をスクロール分だけずらして、現在表示分をコピるだけでもイイですね。
昔のテレビって640×480でしたっけ?だと、横80×60の比較用配列で済むか。
で、ビームやレーザーの現在位置をビームが移動するごとにその配列のインデックスに直接参照できるから、オブジェクトごとの衝突判定みたいな時間のかかる処理は必要ないかと思いました。
14: 1 [sage] 2018/05/30(水) 21:31:15.28 ID:fZdspc/Y(14/23) AAS
上記クロスバー表現で、横縦アイテムひとつの半分までずらしたら、一個ぶんズレたり戻ったりする処理。

アイテムひとつの半分の距離aを持っておき、
ドラッグドロップ時点の移動距離bがそれを超えたら一個ズレ。
超えなかったら元に戻る。
その際、ドラッグ距離が長い場合もあるので、アイテム一個ぶんの距離で割った余りの距離が、半分超えてたら+方向に、超えてなければ-方向に、
で、余りの距離と、前後の定位置との差分を、任意の数で分割して分割した数だけ分割距離ずつ表示座標に加算して、みよん、とズレたり戻ったりの表現。

大体こんな感じだったような。
でも、細かい部分でおかしい。
15: 1 [sage] 2018/05/30(水) 21:35:31.67 ID:fZdspc/Y(15/23) AAS
たくさんのアイテムを所持してる時、全部表示してたのを、表示エリア外のものは表示しなくした処理。

ゲーム作り始めた頃、画面外でも、オブジェクト表示処理をしてて、動作が重かったのを、
あれ、画面外にあるんだから表示処理しなくていいんじゃね?と思って修正したら、何百個持っててもスイスイになって感動する。
16: 1 [] 2018/05/30(水) 21:42:06.23 ID:fZdspc/Y(16/23) AAS
ドラッグしたオブジェクトをドラッグしながら、だんだんマウスカーソルの中心に持っていく処理。

これは、天才!とは思わなかったですが。

カーソルの座標と、オブジェクトの中心位置などの座標との差をドラッグ開始に取得し、その差分をマウス座標に足してオブジェクトを描画すると、つまんで動かす表現。
動かしていくごとに、その差分を×0.99とかしていくと、次第につまんでる位置が真ん中になる。
17: 1 [] 2018/05/30(水) 21:42:25.32 ID:fZdspc/Y(17/23) AAS
つかれた。
18: 1 [] 2018/05/30(水) 21:43:52.53 ID:fZdspc/Y(18/23) AAS
一休み一休み
19: 1 [] 2018/05/30(水) 21:46:06.04 ID:fZdspc/Y(19/23) AAS
好きなゲームの処理の説明されてるページ
ワンダと巨像のやつ
https://game.watch.impress.co.jp/docs/20051207/3dwa.htm
20: 1 [] 2018/05/30(水) 21:51:02.40 ID:fZdspc/Y(20/23) AAS
衝突判定はちょっと苦労しました。

衝突可能性のあるもの同士だけ判定するために、3,4回並べ替えとか配列の生成を繰り返してから、判定したりとか。

まだ簡単に説明できないので、いずれまた。
21: 1 [] 2018/05/30(水) 21:53:58.54 ID:fZdspc/Y(21/23) AAS
経路検索も楽しかった。
A*が今の所速いそうだけど、ダイクストラの方が分かりやすかったのでそっちで作りました。
説明は、よー分からん!
22: 1 [] 2018/05/30(水) 21:55:00.14 ID:fZdspc/Y(22/23) AAS
こんなところかなあ。

2ちゃんって、いろんな人が書き込まないと消えるのかな。

誰か!助けて!
25: 1 [] 2018/05/30(水) 23:31:13.49 ID:fZdspc/Y(23/23) AAS
>>23
落ちないんですか。そうですか。
教えてくださってありがとうございます。

VBで作ってます。馴染みがあったのがVBだったので。
今作ってるのが終わったらUnityに移る予定なので、その際はいろいろ勉強させてください。
29
(3): 1 [] 2018/05/31(木) 09:15:43.81 ID:N+l2Be6d(1) AAS
>>27
スレチですが。

乱数関係だと。

一定の確率で複数の分岐処理を扱う時。

1番最初は
select case 0to0.2
〜case 0.6to0.7みたく直接数字書いたけど、もっと楽にできないかと考えました。

で、分岐させたい数の配列t(n)を作り、
その中に確率の大小を入れ(合計が100にならなくても良い)
、t(n)の値の合計sumを出し、それを使ってt2(n)に0.0〜1.0の範囲として割り振る。
例えば3つの分岐で、1つめが45、2つめが90、3つめが15だとすると、合計150なので、1は30%、2は60%、3は10%
なので、0.3,0.6,0.1となり、t2(0)は0.0と0.3
t(1)は0.3と0.9、t2(2)は0.9と1.0の開始値と終了値を格納。
ここらへんは、ちょっと冗長。終了値だけで事足りそう。

で、乱数を出し、
n回だけ繰り返してそれがどの範囲かの番号を返す。

その後それぞれの処理へ。

要約すると、、、
t(n)にそれぞれの当たり確率を適当な整数で示せば、その内のどれに当たるかを返してくれる関数。

分岐の確率を手書きしなくて済むことと、合計100にしなくても良くなった瞬間でした。
30: 1 [] 2018/05/31(木) 09:28:37.23 ID:qD6WAQaC(1) AAS
>>28
>>13で書いたような、任意のドットで区切った縦横のBG配列に地形情報を入れ(破壊不可だから、1かな)
ミサイルの座標をBG配列のインデックスに計算し、参照。
破壊不可と重なったら、ミサイルの座標を1ブロックかその半分くらい上に移動させる。

ミサイルは基本的に下と右に向かうので、地面がデコボコしてたらそのデコボコに沿う感じになるんじゃないかと。

細かく地面を這わせたい時は、BG配列のドット区切りを細かくすれば良いと思います。

どうでしょう?
48: 1 [sage] 2018/06/05(火) 08:09:45.07 ID:d+YvGmuW(1) AAS
>>46
まあそのへんは好きずきで。

0≦a<Nの方が気持ちいいのは、何か理由があるのでしょうか。
よかったらお聞かせください。
71: 名前は開発中のものです。 [] 2018/06/26(火) 10:01:25.64 ID:CQ8pmEPX(1) AAS
>>1
二番煎じだとしても発想はわりと良いスレだと思う
板が過疎り過ぎだからがんばってくれ
90: 1 [sage] 2018/08/11(土) 02:07:42.72 ID:E001RheI(1) AAS
自分も戦略戦術系シミュレーション作りを志向してますので、考えてますが。
今のところ考えてるのは、
・拡大描写時→画面に映る人の数は少ない→画面から外れる人の描画処理はカット(戦闘によるダメージ計算や座標移動計算のみする)
・縮小して広い範囲を描写→個々の物体が小さくなるので、物体の画像(3Dモデルなども)は低容量のものに差し替えて描画する。
基本3D空間では遠くにあるものは低容量画像を使えばイイのかな、と思ってます。

言うのは簡単だけど、これって、拡大時、縮小時、中間時と、同じキャラを3種類用意しないといけないってことですね。3倍面倒だ〜

隊列とかについては、、、なんだろ、そんなに大変ですかね。
一人一人に、中心となる人との相対座標持たせて、戦闘以外の時、隊列に戻ろうとする時その座標を目指させればいいだけ?
その際、倒されて隊列に穴が空いた箇所があれば、他で補う処理を噛ませる。
リーダーと部隊全員だと、部隊員数が増えた時アレなので、サブリーダー、場合にとってはサブサブリーダーを階層的に追加できるようにして、リーダー、サブ、隊員と、上位者との相対座標を持たせれば隊列はそれっぽく見えませんかね。

処理の軽減、高速化はうまくできると楽しいですよね。
では、長文失礼しました。
93: 1 [sage] 2018/08/21(火) 17:18:06.27 ID:P+ykmxBw(1) AAS
自前でゲーム作ってるんですが最近のゲームではほぼ必須の、チュートリアルで、
「○○の練習だやってみよう!」このボタンだけ押す、次はこのボタン、次は、、、というのはどう考えれば良いのでしょう。

単純に、矢印やそのボタン辺りだけ明るく周りを暗くして、他の操作は無反応にするってだけでもいけそうですけど。。。
95: 1 [sage] 2018/08/22(水) 08:11:27.57 ID:T/cR3DQo(1/2) AAS
>>94
レスありがとうございます。
作る前から難しそうって考えちゃうんですよね。実際作り始めるとそれほどでもない、ということ多々あるのに。
悪い癖だ。作り始めて考える、なんてのも導入しなきゃですね。
よーし、やるぞー、おー。
97: 1 [sage] 2018/08/22(水) 22:17:40.69 ID:T/cR3DQo(2/2) AAS
>>96
ごめんなさい。章があるゲームではないもので。
124: 1 [] 2020/06/26(金) 09:24:36.10 ID:1Y6XlZbc(1) AAS
1です。

>>3についての>>70>>77の記述に対して、コメしようと思ったけどやめました。

3の式は5に発展して、送る数が複数でもよくなったり逆順でも大丈夫になって、0〜nを前後にループさせることができるようになったんですよね。

自分的には、74さんのツッコミの意図は、自分(1)はなるべく汎用的な数式で表わそうとしていたんですが、それに対し70,77さんが、書き方と処理の流れが分かってないと理解しづらい三項演算子や、Cでの書き方を記述したからではないのかなあ、と思いました。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.379s*