ゲームのアルゴリズムを教えて管sai (199レス)
上下前次1-新
66(1): 2005/06/17(金)22:36 ID:L6bXNRcs(1) AAS
>>64
普通の2次元配列を用意すると、任意の要素の周辺には8個の要素があるが、
そのうち2個削れば6個になる。
横並びのHEXの場合、削り方には
・右上と右下
・左上と左下
の2通りあるが、行の隅・奇で決めればよい。
但し、このアドレス計算のオーバーヘッドが無視できない場合、
>>65の言うようにリスト構造か、[6方位][各セル]分の配列を
あらかじめ作ってしまう方法も検討するとよい。
67: 2005/06/18(土)22:38 ID:FcEi37Wc(1) AAS
>65-66
?
話が前後するけど移動に関しては↓の「2.マップ移動システム」みたいな
話もある。構造が明快ではなくなるけどXY式より処理は少なくなる。
外部リンク[html]:members.jcom.home.ne.jp
横軸分引けば下移動、足せば上移動だから、アクションでも使えるん
じゃないかな?
68: 2005/12/22(木)22:39 ID:W7fzD8KK(1) AAS
>>60-63が参考になった。
69(1): 2005/12/24(土)08:14 ID:mHMu6n/Z(1) AAS
斜めになっている地面、斜めになっている天井とプレイヤーとの当り判定ってどーゆーふうにしたらいいんですかね?
地面は何とかなりそうなんですが天井の方がよくわかりません。
70: 2007/01/27(土)00:39 ID:MBdcNsZ6(1) AAS
ほ
71: [age] 2007/02/16(金)14:29 ID:SVucWmYy(1) AAS
age
72: 2007/02/18(日)16:29 ID:Y8Ki4rPj(1) AAS
某板よりコピペ
多数のオブジェクトの衝突判定を並列化する方法
移動後の座標をボクセルに振り分ける。
1つのボクセル内に存在するキャラを総当たりで衝突判定。
処理の順序としては、移動、振り分け、衝突判定、衝突処理。
これで処理を並列化できる。
もう少し詳しく言えば、衝突判定をしやすくするために、
ボクセルに振り分ける時点で座標値などをボクセルごとの一時バッファに複製しておく。
これにより巨大なバッファをLSにロードする必要がなくなる。
衝突の連鎖については次フレームに回す。それで結果的には再帰処理になる。
普通は移動後に振り分けるというより
ボクセル内のオブジェクトを管理するバッファを常設しておいて
移動でボクセル外に出たときだけバッファの更新をするでしょ。
73: 2007/02/24(土)16:15 ID:LTRE8EdM(1) AAS
>>69
・坂を方程式で表す方法
例えば天井がy=-0.1*x+64の直線と考えれば、
atamay<=-0.1*atamax+64なら当たり。
地面をy=-0.1*x+480の直線と考えれば、
asiy>=-0.1*asix+480なら当たり。
atamax,atamayはキャラの頭の座標。asix,asiyはキャラの足の座標。
画面は640*480を想定。
・小さい矩形に分ける方法
天井も地面も小さい矩形がたくさん集まったものだと考え、それぞれの矩形と
の当たり判定を行う。壁(当たり判定がある地形)があるシューティングとかは
これでやってるはず。
これなら坂はまっすぐでなくてもかまわない。
・色で判定する方法
たとえば壁(当たり判定がある地形)は黄色で描くものと決める。atamax,atamay
の座標の色を読み黄色なら当たり。RGBのRが128以上なら壁とかでもいい
(言語による)。描画処理と当たり判定の順序に気をつける必要がある。地形
を描いて、キャラを描く前に当たり判定を行う。あるいは地形だけ仮想画面に
描くか。
・矩形との当たり判定
天井をたとえば10度傾いた矩形と考える。この矩形をAとする。Aの中心点
を中心として−10度回転させた矩形をBとする。同じように点(atamax,atamay)
を回転させた架空の点の座標を(kakuux,kakuuy)とする。
あとは普通に傾いてない矩形の当たり判定(Bと(kakuux,kakuuy)の当たり判定)
を行うだけ。足と地面も同様。サイン、コサイン、アークタンジェントが分かれば
できる。
74: 2007/04/05(木)02:54 ID:UIV+9920(1) AAS
AGE
75(1): 2007/04/05(木)03:08 ID:tWT0PUr7(1) AAS
ビリヤードの玉のように、円形のオブジェクトが
同じ円形のオブジェクトに当たって弾き飛ばすような
移動の仕方って、どうすればいいんでしょうか?
76: 2007/08/27(月)20:25 ID:bCl/miWp(1) AAS
動画リンク[ニコニコ動画]
77: 2007/08/28(火)00:03 ID:8moxEFVA(1) AAS
>>75
衝突距離が出しやすいから矩形よりも簡単だったりする。
接線での水平成分、垂直成分それぞれの速度の変換を行う。高校数学(三角関数)と物理なんだが。
食い込んだ分の補正をするとなお良し。
78: 2007/08/28(火)01:13 ID:oeJOJ4t+(1) AAS
死後4ヶ月以上経過した75の白骨死体を発見
79(3): 2007/09/07(金)13:37 ID:5sK/fkD5(1) AAS
角度を付けた移動ってどうやるんですか?45度だったら
x=x+45
y=y+45
でいいんですか?
80: 2007/09/07(金)13:39 ID:H8DGQcSX(1) AAS
>>79
なんじゃいそりゃ
81: 2007/09/07(金)14:08 ID:ODKwq4Ib(1) AAS
高校の(今は中学か?)教科書嫁
というのはなんなのでヒントだけ
x = x + v * cos(angle)
y = y + v * sin(angle)
82: 2007/09/07(金)14:22 ID:puv664XK(1) AAS
>>79
これは酷いww
ワラタ
釣りだろ
83: 2007/09/07(金)23:45 ID:ZuhXBmED(1) AAS
せめて足すんぢゃなくてXょうゃ…
75は角度なんでそのまま使ったらヤバいょうな気がする;
角度たら360°ダロ?
75÷360ぽくね!?
少数点だし…ナンカ上手く曲がりソウぢゃん!?
こんな感じでゲームを創ってたアノ頃………
(涙)
84: 2007/09/08(土)13:11 ID:ZvPWIcCC(1) AAS
まぁいろいろトライするのが思い出になるんだよな。
85: 2007/09/08(土)13:34 ID:x0k7gG8Z(1) AAS
Deg と Rad を知らなかったあの頃
86: 2007/09/12(水)20:10 ID:u002ijju(1) AAS
>>79
#define RAD 3.14159/180
って定義しておいて、
x+=cos(45*RAD)*speed;
y-=sin(45*RAD)*speed;
でいけると思うよ。
87: 2007/11/18(日)11:26 ID:kpbdlgGK(1) AAS
質問させて下さい。
ユーザーに手書きで図形を書かせ、
それが丸なのか四角形なのか三角形なのかを判別したいのですが
どのようなアルゴリズムが考えられますでしょうか?
88: 2007/11/18(日)11:37 ID:RmDGoqPy(1) AAS
ふたつかんがえた。もちろん使ったことはない。
・描画速度の変化をみる
(角を描くときに速度が落ちるので、2回落ち込むと三角形とか)
・描かれた線の接線のむきの分布みる
(三方向にピークが出ると三角形、とか)
89: 2007/11/18(日)21:55 ID:VoyUbEfi(1) AAS
・グリッドを作って通過するポイントで判定(文字認識?)
・マウスの移動方向をxyの変化量で8つに分ける(マウスジェスチャ?)
俺も作ろっと
90: 2007/11/25(日)15:24 ID:DZ368X4a(1) AAS
NN
91(1): 2008/02/11(月)21:08 ID:3BJFJrZO(1) AAS
縦スクロールシューティングゲームを作ってるんですが、
敵の出現のやり方がいまいち分かりません。
今までは、マップを描画したときに、
敵の情報があったら、同時に表示して、その敵の情報を削除
してました。
何か、いいアルゴリズムがありましたら、教えてください。
92: 2008/02/12(火)07:56 ID:qFBBafcB(1/2) AAS
#define MAX_X 20
typedef struct _Map{
int ShowX;
int ShowY;
int Type;
int Hp;
int X;
int Y;
}_Map;
_Map Map[MAX_X][500];
void ShowEnemy(int ScY,MapChip Map)
{
for(i=0;i<MAX_X;i++)
{
if(ScrollY==Map[i][ScrollY/16].ShowY)
{
switch(Map[i][Scroll/16].EnemyNuber)
{
case 1:
CreateEnemy(i*16-ScrollX,0,1,3);
break;
case 2:
CreateEnemy(i*16-ScrollX,0,2,5);
break;
…
default:
break;
}
}
}
}
93: 2008/02/12(火)08:03 ID:qFBBafcB(2/2) AAS
ちなみに、CreateEnemyの引数は、X座標、Y座標、敵番号、耐久力だ。
94: 2008/02/12(火)11:55 ID:5WyTfMV5(1) AAS
95: 2008/02/18(月)23:07 ID:YtDwWNhg(1) AAS
>91
発生する時刻と座標のテーブル持ってればいいんじゃないの?
上下前次1-新書関写板覧索設栞歴
あと 104 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.020s