ゲーム制作 磁石移動

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: ゲーム制作 磁石移動

Re: ゲーム制作 磁石移動

#3

by 若葉マークぺらひこ » 7年前

なるほど、役割を分けてみます!
分かりづらい説明にアドバイスありがとうございました!

Re: ゲーム制作 磁石移動

#2

by Gonbeishi » 7年前

特に気になる2点だけ。

①magnet関数にキャラの移動を任せるなら、キャラを移動させる処理が必要。
移動させたい座標値だけ計算してない?

②X座標とY座標の上限値・下限値を意識する。
while全般に言えることだけど、
> while (y > 384)
>            y++;

while (MAX_Y>y&&y > 384)//MAX_YはY座標の上限値とする
            y++;

にしないと、yの値が385以上の時にyのインクリメントが延々続き、signed intで取りうる正の最大値になった際も
while文の
> (y > 384)
が真となり
>y++;
が実行されます。
すると、yの値がsigned intで取りうる負の最大値になって画面から消えそう。

移動させたい座標だけ先に計算して、移動を請け負う関数でまとめて処理した方がいいかも。
関数呼び出しが1回で済むので。

ゲーム制作 磁石移動

#1

by 若葉マークぺらひこ » 7年前

図々しいDXライブラリ初心者です。
自分は新・ゲームプログラミングの館を参考にしてゲームを制作しています。
自分はマップ上にあるオブジェクトに対応してキャラクターが移動するプログラムを組もうと思っています。
説明が難しいのですが、マップ上にあるオブジェクトというのが磁石で、片方のキャラクターがN、もう片方がSという形にしたいです。
例を出してしまえば、ゼルダの伝説に出てくるマグネグローブからNS切り替えをとったようなイメージです。
「キャラクターが特定の座標とx軸かy軸が同じ時、あるキーを押している間だけ、ある座標までキャラクターが移動する、ある座標から壁に当たるまで離れる」という処理をさせたいのですが、自分ではどうすればいいのか分かりません。
下が自分が考えた精一杯です。オブジェクトは416,288の位置にあります。

コード:

void magnet(int x, int y, int direction) {//ステージ1自機A 吸い寄せの処理
	if (direction == 0)//上向きなら
		if(x == 416 && Key[KEY_INPUT_I] >= 1)
		while (y > 384)
			y++;
	if (direction == 1)//左向きなら
               if(y == 288 && Key[KEY_INPUT_I] >= 1)
               while (x >576)
                       x++;
	if (direction == 2)//下向きなら
		if(x == 416 && Key[KEY_INPUT_I] >= 1)
                      while (y > 64)
                                y++;
	if (direction == 3)//右向きなら
		if (y == 288 && Key[KEY_INPUT_I] >= 1)
			while (x > 64)
				x--;
}

ページトップ