ページ 11

マップチップ上で追跡する敵を4方向移動にしたい

Posted: 2019年9月20日(金) 00:11
by GEN3
初めまして。初めて掲示板を利用するので不備があったら言ってください。
Dxライブラリでプレイヤーを追いかけるゲームを作っています。
マップチップを使って敵とプレイヤーの座標を比較して移動しています。
追跡する敵の移動方向を上下と左右のみにしたいです

コード:

if (abs(PlayerX - EnemyX) <= 3 && abs(PlayerY - EnemyY) <= 3)
{


if (EnemyX < PlayerX)EnemyX += 1;
if (EnemyX > PlayerX)EnemyX -= 1;
if (EnemyY < PlayerY)EnemyY += 1;
if (EnemyX > PlayerX)EnemyY -= 1;
}

いろいろと調べたのですが斜め移動のやり方しか見つけられませんでした。

Re: マップチップ上で追跡する敵を4方向移動にしたい

Posted: 2019年9月20日(金) 10:09
by Ouxiy
https://dixq.net/g/03_01.html
のサイトでは左右上下があります。
何かお力になれば幸いです。

Re: マップチップ上で追跡する敵を4方向移動にしたい

Posted: 2019年9月20日(金) 10:51
by usao
> いろいろと調べたのですが …… 見つけられませんでした。

よく目にする文言だけど,何をどう調べたのかは絶対に明かされない不思議!


Xが左右方向でYが上下方向なのだとして,

(1) Y座標を固定してX座標だけを動かせば「左右のみ」になる.
(2) X座標を固定してY座標だけを動かせば「上下のみ」になる.
(3) X座標とY座標とを同時に変更すると「斜め」に移動することになる.

という3点は明らかであると思うのだが,どうだろうか.
「明らかでない」というならば,自分はちょっともうこれ以上簡単に説明できないです.
「明らかである」ならば,上下左右のみに限定したいなら(3)が起きないようにすればよいだけ.
すなわち,X座標を動かしたならばY座標は動かさない.Y座標を動かしたならばX座標を動かさない.
(提示されたコードでは単に独立したifが4個ならんでいるけど,座標を変更する条件は互いに独立ではないということだ.)

Re: マップチップ上で追跡する敵を4方向移動にしたい

Posted: 2019年9月20日(金) 11:03
by usao
オフトピック
それはそれとして,「マップチップ云々…」という言葉から勝手に想像するに,
実際にゲームを作るとなると,ルール的に「敵が侵入できないマス」とかが設けられることが予想されるので,

(1) 敵の移動先候補を列挙する
 単純な例で言えば,今の座標の上下左右の4カ所のうち,侵入できる箇所であって且つ追跡対象との距離が近くなる箇所
(2) 列挙された中から実際の移動先を選ぶ

みたいな手続きにしておくと良いのかもしれない.