質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

Q&A

解決済

2回答

4118閲覧

DxLibで画像を動かしたい

kurira

総合スコア28

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

0グッド

0クリップ

投稿2021/01/08 01:52

Dxライブラリで、モグラたたき風のミニゲームを作っているのですが、画面に配置されているモンスターが動くようにしたいです。

#define GHOST_NUM 10 struct Ghost{ int x,y,r,hit,width,height; }; int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC) { const int n = GHOST_NUM; struct Ghost enermy[GHOST_NUM], player; ChangeWindowMode(TRUE); if (DxLib_Init() == -1) return -1; SetDrawScreen(DX_SCREEN_BACK); srand((unsigned int)time(NULL)); SetMouseDispFlag(TRUE); for (i = 0; i < n; i++) { enermy[i].x = rand() % 640; enermy[i].y = rand() % 480; enermy[i].r = 30; enermy[i].hit = 0; enermy[i].width = 80; enermy[i].height = 40; } player.r = 55; player.width = 100; player.height = 110; GetMousePoint(&player.x, &player.y); mouseInput = GetMouseInput(); if ((mouseInput & MOUSE_INPUT_LEFT) != 0) { for (i = 0; i < n; i++) { if (enermy[i].hit == 0) { d[0] = player.r + enermy[i].r; d[1] = player.x - enermy[i].x; d[2] = player.y - enermy[i].y; if (d[0] * d[0] >= d[1] * d[1] + d[2] * d[2]) { enermy[i].hit = 1; count++; PlaySoundMem(hitSound, DX_PLAYTYPE_BACK); } } } for (i = 0; i < n; i++) { if (enermy[i].hit == 0) { DrawRotaGraph(enermy[i].x - enermy[i].width / 2, enermy[i].y - enermy[i].height / 2, 0.15,0.15,ghostImg, TRUE); } }

現在のソースはこんな感じです。長くなってしまうため、背景やBGMの設定などその他細かい部分は省略しました。

現在、ghostImgがランダムに10匹ただ配置されているだけの状態です。これを、ghostImgが移動するようにしたいです。左右でも上下でも、動けば何でも大丈夫です。
動かすことは可能でしょうか? また、動いたときに一緒に当たり判定も動いてくれるのでしょうか?

おわかりになる方いましたらお教えいただけるとありがたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

メインのループのところでGhostを描画するところがあるはずですよね?
もしGhostを描画するところがメインのループの中になければループの中に移動させてください。
struct Ghostを見ると x, y と位置を保存する変数があるみたいなので、それを利用してGhostの描画位置を決めてください。
動かすには描画するたびにstruct Ghost の中のx, y を変えればいいです。
試しにループの中に
enermy[i].x = rand() % 640;
enermy[i].y = rand() % 480;
を追加してみてください。
多分高速でGhostがあちこちに移動します。

投稿2021/01/08 11:53

vann_2921

総合スコア190

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

動かすことは可能でしょうか? また、動いたときに一緒に当たり判定も動いてくれるのでしょうか?

という疑問に関して,適当に実験してみれば良いのではないでしょうか.

例えば,「右クリックするごとに enemy[0].x の値を+10する」みたいな処理を試しに追加してみればどうでしょう.

投稿2021/01/08 01:58

fana

総合スコア11996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurira

2021/01/08 02:39

それが出来てれば多分質問してないです^^;
fana

2021/01/08 02:57

「左クリックした際にどうのこうの」というコードを書いている人が,「右クリックした際に…」を出来ないとは想像しがたいのですが. (それ以前にそのコード書いておいてこの質問内容というところから謎ではあるのだが)
fana

2021/01/08 03:46

何らかの事情によって「右クリック…」のための数行を追加することが困難だということなのであれば… 回答内に書いた「右クリック」は単なる「例えば」でしかないから別にこだわる必要もない. 他の操作だろうが,既存の左クリック時処理内だろうが,どこに書こうが構わないわけなのだから,とにかく試すことが可能な場所に記述を追加して動作を見てみれば良いだけの話.
dodox86

2021/01/08 03:51

どこか別に、元にされた(他の方が書いた)コードがあるのでしょうか。 > 動いたときに一緒に当たり判定も動いてくれるのでしょうか? いえ、ここはゲーム作成の手助けをするサイトではないので、質問者さん自身がコードを理解し、必要であればそのように自分で修正する必要があるはずです。現状、 > if (d[0] * d[0] >= d[1] * d[1] + d[2] * d[2]) { あたりで、「三平方の定理」を用いて当たり判定をしてそうですけれども。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問