Re: マウス関連関数を追加するとビルドエラーになります ( No.1 ) |
- 名前:管理人 日時:2019/07/22 00:49
すみません、Android版では SetMouseDispFlag を使用することはできません
( マウスポインタの表示状態をソフトウェア側で制御することができないため )
|
Re: マウス関連関数を追加するとビルドエラーになります ( No.2 ) |
- 名前:fghck852 日時:2019/07/22 04:16
早速のご回答ありがとうございます。
SetMouseDispFlag()関数を削除したら、ビルドはできましたが、「マウス右ボタンが押されるまで待つ」のサンプルプログラムが動作しません。
下記のような、サンプルプログラムに四角形の描画とキー入力待ちを加えただけのプログラムですが、マウスの右ボタンをクリックしても、
何も描画されず、ダンマリです。
ARMのエミュレータ上で確認しています。
マウス関連部分をまるごと削除すれば、当然ながら四角形が描画されます。
ソースコードは下記の通りです。
#include "DxLib.h"
// プログラムは android_main から始まります
int android_main(void)
{
int MouseInput;
if (DxLib_Init() == -1) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
//SetMouseDispFlag(TRUE); // マウスを表示状態にする
MouseInput = GetMouseInput(); // マウスの入力を待つ
while ((MouseInput & MOUSE_INPUT_RIGHT) == 0)
{
if (ProcessMessage() == -1) // メッセージ処理
{
break; // エラーが起きたらループから抜ける
}
MouseInput = GetMouseInput(); // マウスの入力を得る
}
DrawBox(220, 140, 420, 340, GetColor(255, 255, 255), TRUE); // 四角形を描画する
WaitKey(); // キー入力待ち
DxLib_End(); // DXライブラリ使用の終了処理
return 0; // ソフトの終了
}
上のプログラムは、マウスの右ボタンをクリックすると、四角形を描画するというつもりなのですが、
プログラムが悪いのでしょうか、それとも私が何か勘違いしているのでしょうか。
|
Re: マウス関連関数を追加するとビルドエラーになります ( No.3 ) |
- 名前:fghck852 日時:2019/07/22 11:20
マウスのサンプルプログラムが動作しない件ですが、私の勘違いという気がしてきました。
GetMouseInput()などの関数はスマホの実機にマウスを接続して初めて動作するもので、パソコン上でエミュレーションしているときに
いくらパソコンのマウスを操作しても、これらの関数は動作しないのではないでしょうか。
キー入力待ちのWaitKey()も、エミュレーション時にパソコンのキーボードをたたいても動作しません。これと同じことではないでしょうか。
なにせ初めてで、よくわからずにやっているところもあると思いますので、ご指導いただきたく、よろしくお願いします。
|
Re: マウス関連関数を追加するとビルドエラーになります ( No.4 ) |
- 名前:通りすがりの。 日時:2019/07/23 19:14
Androidのテスト環境作成していないので正しい回答になっているかわかりませんが。
リファレンスのサンプルとコードが違うようですが意図したものですか?
サンプル
if( ( GetMouseInput() & MOUSE_INPUT_LEFT ) != 0 )
{
// 押されている
}
else
{
// 押されていない
}
提示頂いた内容は判定条件が ==で行われています。
ディスプレイ文を入れるなどして自分の求めている結果が正しく帰ってきているかまで、
確認していただけると管理人さんも動作確認がスムーズにできて良いのではないかと思います。
(リファレンスで書いている内容と異なる結果が返ってくるなど)
|
Re: マウス関連関数を追加するとビルドエラーになります ( No.5 ) |
- 名前:fghck852 日時:2019/07/24 03:25
書き込みありがとうございます。おっしゃる点については、以下の通りです。
1.サンプルコードの判定条件「==」について
「通りすがりの。」様がご覧になっているのは、「左ボタンが押されているか調べる」のif文のサンプルコードかと思います。
私が使用しているのは、その下に記載されている、「マウス右ボタンが押されるまで待つ」のmain()の全文が載っている方の
while文のサンプルです。
この部分は( MouseInput & MOUSE_INPUT_RIGHT )が0の間は右ボタンが押されていないので、ループを繰り返すわけなので、
判定条件は「==」で間違いないと思います。
2.ディスプレイ文について
wnile文のループの中の、
MouseInput = GetMouseInput(); // マウスの入力を得る
の下に次の4行を追加して、変数MouseInputの内容を表示してみました。
char Str[32];
sprintf(Str, "MouseInput = %d", MouseInput);
SetFontSize(64);
DrawString(0, 0, Str, GetColor(255, 255, 255));
その結果、画面に「MouseInput = 0」と表示され、マウスの右ボタンを押しても、左ボタンを押しても、表示は変わりませんでした。
GetMouseInput()が0を返していることになります。
|
Re: マウス関連関数を追加するとビルドエラーになります ( No.6 ) |
- 名前:管理人 日時:2019/07/25 00:51
手元で以下のようなマウスカーソルの座標に円を描画するテストプログラムを組んでみましたが
問題なくマウスカーソルの座標に円が描画されました
#include "DxLib.h"
int android_main()
{
int PosX, PosY ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// メインループ
while( ProcessMessage() == 0 )
{
// 画面のクリア
ClearDrawScreen() ;
// マウスカーソルの位置に円を描画
GetMousePoint( &PosX, &PosY ) ;
DrawCircle( PosX, PosY, 40, GetColor( 255, 255, 255 ), TRUE ) ;
// 座標を表示
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Input:%d X:%d Y:%d", GetMouseInput(), PosX, PosY ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
よろしければfghck852さんの環境でも正常に動作するかお試しいただけないでしょうか?m(_ _)m
あと、もしかしたら最近の暫定最新版では正常に動作するという可能性もありますので、
よろしければこちらの最新版をお試しください m(_ _)m
https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.zip // Android版 ARM用
https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM64.zip // Android版 ARM64用
https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.zip // Android版 x86用
https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x64.zip // Android版 x64用
 |
Re: マウス関連関数を追加するとビルドエラーになります ( No.7 ) |
- 名前:fghck852 日時:2019/07/25 17:02
ご回答ありがとうございます。当方の環境で試したところ、以下のようになりました。
1.ご提示のテストプログラムについて
エミュレータでデバッグ開始すると、画面左上に円(第4象限の1/4円)が表示され、文字列「Input:0 X:0 Y:0」が表示されました。
その後マウスを左クリックしても、右クリックしても新しい円は表示されず、文字列の表示も「Input:0 X:0 Y:0」のまま、変わりませんでした。
2.ご提示の暫定最新版ライブラリについて
「Android版 ARM用」しか試していませんが、暫定最新版ライブラリにしても、1項と同じ結果でした。
3.変な現象について
当方でご提示のテストプログラムを実行するにあたって、下記のような現象が発生しました。
3.1 プロジェクトをコピーした場合の現象
最初に、新規プロジェクトは作成せずに、以下のようにしてテストプログラムを実行しました。
(1)古いプロジェクト「MouseTest2」をコピーして、一番外側のフォルダ名だけを「MouseTest3」にする。
(2)「MouseTest3」のmain.cppの内容を、ご提示のあったプログラムに置き換える。
(3)「ソリューションのクリーン」を行った後、「ソリューションのリビルド」を行う。
(4)デバッグを開始する。
以上の様にしたところ、画面は古いプロジェクト「MouseTest2」の画面になりました。
Visual Studioのエディタ上では、今回ご提示のプログラムが表示されているのですが、実行結果は古いプロジエクトが実行されているように
「MouseInput = 0」と表示されました。何回リビルドしても同じでした。
3.2 新規プロジェクトを作成
そこで新規プロジェクト「MouseTest4」を作成し、今回ご提示のプログラムを入れたところ、当然ながら新しい画面となり、1項の様に表示されました。
4.問合せ項目
(1)今まで、Windowsのデスクトップアプリ作成等の際には3.1項の様に古いプロジェクトをコピーして、フォルダ名を変えた後、
ソースに変更を加えるという事は良くやっていたのですが、今回のような現象が発生することはありませんでした。
Androidのアプリ作成においては、3.1項のようなことをやってはいけないのでしょうか。
(2)1項の様に、マウスのクリックが検出できないこと、及び3.1項の様な現象が発生することから、Visual Studioが正常に動作していない可能性が
考えられるでしょうか。Visual Studio Community 2019を再インストールしてみた方が良いでしょうか。
以上、よろしくお願いします。
 |
Re: マウス関連関数を追加するとビルドエラーになります ( No.8 ) |
- 名前:管理人 日時:2019/07/26 00:53
> 1.ご提示のテストプログラムについて
> エミュレータでデバッグ開始すると、画面左上に円(第4象限の1/4円)が表示され、文字列「Input:0 X:0 Y:0」が表示されました。
> その後マウスを左クリックしても、右クリックしても新しい円は表示されず、文字列の表示も「Input:0 X:0 Y:0」のまま、変わりませんでした。
あ、エミュレータではマウスのクリックは端末の画面をタッチしたとして扱われるので、
GetMousePoint などでは情報を取得することはできません、
代わりに GetTouchInputNum や GetTouchInput などのタッチ系の関数を使用する必要があります
エミュレータではマウス入力をエミュレートすることはできないので、
GetMousePoint などのマウス系の入力のプログラムをテストする際は実機のAndroid端末に
マウスを接続して行う必要があります
> 3.変な現象について
プロジェクトを拝見してみないと何とも言えませんが、プロジェクトの参照パスが絶対パスになっていて、
フォルダをコピーしてもプロジェクトが参照する先は元の MouseTest2 の中の main.cpp だったということが考えられます
> (1)今まで、Windowsのデスクトップアプリ作成等の際には3.1項の様に古いプロジェクトをコピーして、フォルダ名を変えた後、
> ソースに変更を加えるという事は良くやっていたのですが、今回のような現象が発生することはありませんでした。
> Androidのアプリ作成においては、3.1項のようなことをやってはいけないのでしょうか。
はい、AndroidのプロジェクトはWindowsアプリのようには融通が利かないことが多いので、やらないほうが良いと思います
> (2)1項の様に、マウスのクリックが検出できないこと、及び3.1項の様な現象が発生することから、Visual Studioが正常に動作していない可能性が
> 考えられるでしょうか。Visual Studio Community 2019を再インストールしてみた方が良いでしょうか。
こちらについては前述の通りマウスのクリックではなく画面タッチとして扱われていますので GetMouseInput などでは
マウスクリックされていない状態となっています、載せられた情報の限りでは Visual Studio は正常に動作していると思いますので
再インストールされる必要は無いと思います
 |
Re: マウス関連関数を追加するとビルドエラーになります ( No.9 ) |
- 名前:fghck852(解決済み) 日時:2019/07/26 02:18
ご丁寧な回答ありがとうございます。
マウスの件、及びVisual Studioプロジェクトのコピーの件ともに、私の疑問は解決しました。
どうもありがとうございました。
|