ゲームのアルゴリズムを教えて管sai (199レス)
上下前次1-新
49: あぼーん [あぼーん] AAS
あぼーん
50: あぼーん [あぼーん] AAS
あぼーん
51: あぼーん [あぼーん] AAS
あぼーん
52: あぼーん [あぼーん] AAS
あぼーん
53: あぼーん [あぼーん] AAS
あぼーん
54: 03/06/13 21:22 ID:NCwo/Gzi(1) AAS
みてね〜♪
外部リンク[html]:www1.free-city.net
55: 山崎 渉 [(^^)] 03/08/15 08:34 ID:KFL+te0G(1) AA×

56: 04/07/03 19:23 ID:E3a3uuaW(1) AA×

57: 2005/05/11(水)09:55 ID:QbGDxSga(1) AAS
こんなスレッドまで来て、ゲームアルゴリズムを真剣に
学びたい人はいないとは、思うけど、
単純な2Dシューティング(インベーダー程度)なら
配列、探索アルゴリズム、リスト、構造体
テーブル化、ソートアルゴリズム、フラグ、画像転送、
矩形の当たり判定
アドベンチャーゲームなら
自作スクリプトの字句解析、構文解析(lac,lex)
簡単な暗号化、圧縮アルゴリズム、バイナリファイル操作
画像エフェクト系(拡大縮小回転、ワイプ、ラスタースクロール、
α値操作、他いろいろ)
が分かれば作れると思います。
たぶん。
58: 2005/05/23(月)00:26 ID:MvQZceoD(1) AAS
59(1): 2005/06/14(火)17:02 ID:9FWtswMc(1) AAS
だれか、2Dアクションゲームの、スクロールとキャラクタ・当たり判定の
管理について教えてくださいな。
60(1): 2005/06/15(水)15:58 ID:J79aeXl5(1/4) AAS
>>59
昔のゲームを逆アセンブルで解析してみて参考にするのは、どうだろう…
私は、解析したことがないので、どうなっているのか分かりませんが、
少し昔の2Dアクションゲーム(ロックマン、マリオ、魔界村、ソニック、スペランカー、etc)
のマップは、おそらく32×32ドット(24×24ドット)程度の大きさで区切られたマスの組み合わせで
表現されていると思われます。
それを、2次元配列でint Map[300][300]={ {0,0,0,1,0,1,…のように表して
0を当たり判定なし、0以外の値(1など)を当たり判定ありとすれば、マップデータは完成。
●そのマップデータを画面に表現するには、
sx,syをx,y方向別のスクロール管理変数
画面の解像度を320×240とすると
void DrawMap()
{
int stx=sx/32;int edx=sx+320/32;
int sty=sy/32;int edy=sy+240/32;
for(int i=stx;i<edx;i++)
{
for(int j=sty;i<edy;j++)
{
DrawMapChip(map[i][j],i*32-sx,j*32-sy)
}
}
}
61(1): 2005/06/15(水)16:02 ID:J79aeXl5(2/4) AAS
●スクロールは、常にメインキャラクターを画面の中心に置いておきたい訳だから
void CalcScroll(int *sx,int *sy)
{
*sx=mx-320/2;
*sy=my-240/2;
if (sx<0) sx=0;
if (sy<0) sy=0;
if (sx>32*200) sx=32*200;
if (sy>32*200) sy=32*200;
}
だったかな…
ちなみにmx,myはメインキャラクターのx,y座標
62(1): 2005/06/15(水)16:54 ID:J79aeXl5(3/4) AAS
当たり判定は、いろいろな方法(ベクトル、三平方、色判定など)があるけども、
メインキャラクターが発射した弾と敵キャラとの当たり判定なら、単純に矩形(くけい)の
当たり判定で済みます。
●弾の座標を(ax,ay)、敵の座標を(bx,by)とした場合、
if(ax<bx2 && ax2>bx && ay<by2 && ay2>by)
{
}
で当たっているか、否かが分かります。
63(1): 2005/06/15(水)16:55 ID:J79aeXl5(4/4) AAS
●メインキャラクターとマップとの当たり判定は、
□x座標の移動処理の直後に
//左上と左下
if(Map[x/32][y/32]!=0 || Map[x/32,(y+height)/32]!=0)
{
x=(x/32+1)*32;
}
//右上と右下
if(Map[(x+width)/32,y/32]!=0 || Map[(x+width)/32,(y+height)/32]!=0)
{
x=(x/32)*32;
}
で
□y座標の移動処理の直後に
//左上と右上
If(Map[x/32,y/32]!=0 || Map[(x+31)/32,y/32]!=0)
{
y=(y/32+1)*32;
}
//左下と右下
If(Map[x/32,(y+31)/32]!=0 || Map[(x+31)/32,(y+31)/32)!=0
{
y=(y/32)*32;
}
とやればできます。どうしてそうなるのかは、
計算式を参考に図を書いてみれば分かると思います。
64(2): 2005/06/16(木)05:05 ID:3Ela4Sa6(1) AAS
俺も昔Javascriptで同じようなの作ったことあります。
肝心のゲームは流行らなかったけど。IE対応型RPGゲームね。
閑話休題、質問です。
SLGの六角型HEX画面ってどうやってるの?
テーブルで組んでいくと非効率的だし、実際のアルゴリズムも
かなり無駄な処理が入ってるのでしょうか?
65(2): 2005/06/16(木)11:32 ID:jcj8vG3U(1) AAS
>>64 リストで組んでみては?
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の白骨死体を発見
上下前次1-新書関写板覧索設栞歴
あと 121 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.034s