マウスの方向を向くプログラム

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

マウスの方向を向くプログラム

#1

投稿記事 by kazuki » 14年前

マウスでクリックされている座標を取得して、その座標の方向に画像を回転させるにはどうしたらいいですか?
説明がわかりずらくてすみません。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: マウスの方向を向くプログラム

#2

投稿記事 by みけCAT » 14年前

とりあえずフォーラムルールをお読みください。
使っている言語、OS、ライブラリ、その他の環境は何ですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

kazuki

Re: マウスの方向を向くプログラム

#3

投稿記事 by kazuki » 14年前

すみません。
OSはWindows7で使用言語はC言語です。ライブラリはDXライブラリをつかっています。開発環境はMicrosoft Visual C++ 2010 Expressを使っています。
現在マウス操作を主にしたシューティングゲームを作っています。最終的には操作キャラがマウスのほうを向いて追いかけていくようにしたいのですが、まずはマウスのほうを向くプログラムを作ろうと思って投稿しました。
どのような関数を使うかは、リファレンスページで大体わかったのですが、マウスの方向に回転させる角度を求めたりする方法がいまいちよくわかりません。(むしろ数学の問題かもしれません。)

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: マウスの方向を向くプログラム

#4

投稿記事 by h2so5 » 14年前

C標準の数学関数としては atan や atan2 を使用することで、
マウス座標の差から角度を求めることができます。

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 14年前
住所: 北海道札幌市
連絡を取る:

Re: マウスの方向を向くプログラム

#5

投稿記事 by Dixq (管理人) » 14年前

サンプルを作ってみました、こちらでいかがでしょうか。
http://dixq.net/g/zip/AimMouse.zip

コード:

#include <math.h>
#include "DxLib.h"

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
        ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定

        int Handle;     // 画像格納用ハンドル
        int x, y;		// マウスの座標格納用変数
        float angle;	// マウスと中心点との角度格納用変数
        Handle = LoadGraph( "画像/キャラクタ01.png" ); // 画像のロード

        // while(裏画面を表画面に反映, メッセージ処理, 画面クリア)
        while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){

			GetMousePoint( &x, &y ); // マウスの座標を取得

			angle = (float)atan2( y-240., x-320. );	// 中心点とマウスの座標から角度を計算
	
			DrawRotaGraph( 320 ,240, 1.0, angle, Handle, TRUE ); //描画

        }
        
        DxLib_End(); // DXライブラリ終了処理
        return 0;
}
実行結果
※添付ファイル

GetMousePoint関数
http://homepage2.nifty.com/natupaji/DxL ... .html#R5N6

でマウスの位置がとれます。
また、atan2関数に、対象物の、yの差分、xの差分を渡すことで角度が計算出来ます。
後は特に難しい事はしていません。
ソースコードはゲームプログラミングの館で紹介しています。
http://dixq.net/g/

kazukiさんはatan2関数について知りたかっただけですかね?
添付ファイル
AimMouse.png
AimMouse.png (43.89 KiB) 閲覧数: 6241 回

kazuki

Re: マウスの方向を向くプログラム

#6

投稿記事 by kazuki » 14年前

h2so5さん、Dixq(管理人)さん、ありがとうございます!
math.hを使うことは思いつきませんでした。
書いてあったと思うのですが、クリックしているときだけマウスのほうを向くにはどうしたらいいですか?
DixqさんのサンプルでGetMouseInput( )をどこで使えばいいかわかりません。

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 14年前
住所: 北海道札幌市
連絡を取る:

Re: マウスの方向を向くプログラム

#7

投稿記事 by Dixq (管理人) » 14年前

サンプルとして書いたのでその通りに動作する事は意識しませんでした。
マウスが押されている時だけ角度を更新したいなら、
押されている時だけangleに角度を代入すれば良いと思いますよ。

if( マウスのボタンが押されている ){
  angle = ...;
}

と言う感じです。

kazuki

Re: マウスの方向を向くプログラム

#8

投稿記事 by kazuki » 14年前

それは試してみたのですがエラーが出てしまいました。
エラーはデバック中に別ウィンドウで
Run-Time Check Failure #3 - The variable 'angle' is being used without being initialized.
と出てきました。

そのときのソース貼っておきます。

コード:

#include "DxLib.h"
#include <math.h>

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
        ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定

		int Handle;
		int x,y;
		float angle;
		Handle = LoadGraph("test1.png");

		while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){
			GetMousePoint(&x,&y);
			

			if((GetMouseInput() & MOUSE_INPUT_LEFT) != 0){
			    angle = (float)atan2(y-240.,x-320.);
			}
			DrawRotaGraph( 320, 240, 1.0 ,angle,Handle,TRUE);
		}
        
		DxLib_End();
		return 0;

}
どこが悪いのでしょうか?

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 14年前
住所: 北海道札幌市
連絡を取る:

Re: マウスの方向を向くプログラム

#9

投稿記事 by Dixq (管理人) » 14年前

The variable 'angle' is being used without being initialized.

エラーメッセージそのまんまの意味ですよ。
「angle初期化せずに使っちゃだめ」って書いてあるので、

float angle = 0;

のように予め何か値を入れておけば良いと思います。

kazuki

Re: マウスの方向を向くプログラム

#10

投稿記事 by kazuki » 14年前

ありがとうございます。
英語嫌いが祟ったようです・・・
おかげさまで、うまく動きました!

閉鎖

“C言語何でも質問掲示板” へ戻る