マウスでクリックされている座標を取得して、その座標の方向に画像を回転させるにはどうしたらいいですか?
説明がわかりずらくてすみません。
マウスの方向を向くプログラム
Re: マウスの方向を向くプログラム
とりあえずフォーラムルールをお読みください。
使っている言語、OS、ライブラリ、その他の環境は何ですか?
使っている言語、OS、ライブラリ、その他の環境は何ですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: マウスの方向を向くプログラム
すみません。
OSはWindows7で使用言語はC言語です。ライブラリはDXライブラリをつかっています。開発環境はMicrosoft Visual C++ 2010 Expressを使っています。
現在マウス操作を主にしたシューティングゲームを作っています。最終的には操作キャラがマウスのほうを向いて追いかけていくようにしたいのですが、まずはマウスのほうを向くプログラムを作ろうと思って投稿しました。
どのような関数を使うかは、リファレンスページで大体わかったのですが、マウスの方向に回転させる角度を求めたりする方法がいまいちよくわかりません。(むしろ数学の問題かもしれません。)
OSはWindows7で使用言語はC言語です。ライブラリはDXライブラリをつかっています。開発環境はMicrosoft Visual C++ 2010 Expressを使っています。
現在マウス操作を主にしたシューティングゲームを作っています。最終的には操作キャラがマウスのほうを向いて追いかけていくようにしたいのですが、まずはマウスのほうを向くプログラムを作ろうと思って投稿しました。
どのような関数を使うかは、リファレンスページで大体わかったのですが、マウスの方向に回転させる角度を求めたりする方法がいまいちよくわかりません。(むしろ数学の問題かもしれません。)
Re: マウスの方向を向くプログラム
C標準の数学関数としては atan や atan2 を使用することで、
マウス座標の差から角度を求めることができます。
マウス座標の差から角度を求めることができます。
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 14年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: マウスの方向を向くプログラム
サンプルを作ってみました、こちらでいかがでしょうか。
http://dixq.net/g/zip/AimMouse.zip
実行結果
※添付ファイル
GetMousePoint関数
http://homepage2.nifty.com/natupaji/DxL ... .html#R5N6
でマウスの位置がとれます。
また、atan2関数に、対象物の、yの差分、xの差分を渡すことで角度が計算出来ます。
後は特に難しい事はしていません。
ソースコードはゲームプログラミングの館で紹介しています。
http://dixq.net/g/
kazukiさんはatan2関数について知りたかっただけですかね?
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 (43.89 KiB) 閲覧数: 6242 回
Re: マウスの方向を向くプログラム
h2so5さん、Dixq(管理人)さん、ありがとうございます!
math.hを使うことは思いつきませんでした。
書いてあったと思うのですが、クリックしているときだけマウスのほうを向くにはどうしたらいいですか?
DixqさんのサンプルでGetMouseInput( )をどこで使えばいいかわかりません。
math.hを使うことは思いつきませんでした。
書いてあったと思うのですが、クリックしているときだけマウスのほうを向くにはどうしたらいいですか?
DixqさんのサンプルでGetMouseInput( )をどこで使えばいいかわかりません。
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 14年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: マウスの方向を向くプログラム
サンプルとして書いたのでその通りに動作する事は意識しませんでした。
マウスが押されている時だけ角度を更新したいなら、
押されている時だけangleに角度を代入すれば良いと思いますよ。
if( マウスのボタンが押されている ){
angle = ...;
}
と言う感じです。
マウスが押されている時だけ角度を更新したいなら、
押されている時だけangleに角度を代入すれば良いと思いますよ。
if( マウスのボタンが押されている ){
angle = ...;
}
と言う感じです。
Re: マウスの方向を向くプログラム
それは試してみたのですがエラーが出てしまいました。
エラーはデバック中に別ウィンドウで
Run-Time Check Failure #3 - The variable 'angle' is being used without being initialized.
と出てきました。
そのときのソース貼っておきます。
どこが悪いのでしょうか?
エラーはデバック中に別ウィンドウで
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: マウスの方向を向くプログラム
The variable 'angle' is being used without being initialized.
エラーメッセージそのまんまの意味ですよ。
「angle初期化せずに使っちゃだめ」って書いてあるので、
float angle = 0;
のように予め何か値を入れておけば良いと思います。
エラーメッセージそのまんまの意味ですよ。
「angle初期化せずに使っちゃだめ」って書いてあるので、
float angle = 0;
のように予め何か値を入れておけば良いと思います。