トップページ > 過去ログ > 記事閲覧
SetMousePointの座標・行間情報付フォントの描画
名前:SmokingWOLF 日時: 2011/06/06 00:59

前回は素早いご対応、誠にありがとうございました。 また些細な点ですが、気になる点を2点確認いたしましたので、 ご報告させていただきます。お時間があるときにご確認いただければ幸いです。 【環境】 Windows7 64bit / DXライブラリは3.05a (更新日6/4 22:16) ---------------------------------------- 1.関数SetWindowSizeExtendRateで画面を広げたとき、  SetMousePointの移動先座標がGetMousePointと異なる単位になっている。  まず現在の挙動としては、SetWindowSizeExtendRateで画面を2.0倍にしたとき、  SetMousePoint(500,100);を実行すると、GetMousePoint座標(250,50)に  カーソルがジャンプします。  よってSetMousePointでカーソルジャンプ先の座標計算を行う際は、  画面の拡大率に応じて数値を調整する必要があります。それ自体は対処可能なのですが、  問題は、以下のような手順を行うと、想定した場所に移動させられない点です。 【例】  1.SetGraphMode(640,480,32);で画面サイズ640x480にする。  2.SetWindowSizeExtendRate(2.0)でウィンドウを2倍に引き延ばす  3.SetMousePoint(1000,100) を実行(内部的に(500,50)にカーソルを移動させたい)  4.しかし、実際の移動先はGetMousePointで(320,50)の座標になる。   X座標の移動先が画面サイズの横640/2.0 以内に制限されている? 可能でしたら、SetWindowSizeExtendRate使用時の SetMousePointのカーソル移動先を、GetMousePoint座標と 同じにしていただけると、計算しやすくなって助かります。 【再現ソース】 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // 画面モードを設定 ChangeWindowMode(TRUE) ; // ウィンドウモード SetGraphMode(640,480,32);// 640x480に設定 SetDrawScreen( DX_SCREEN_BACK ) ; SetWindowSizeExtendRate(2.0); if( DxLib_Init() == -1 ){ return -1;} // DXライブラリ初期化処理 // メッセージ処理 int X,Y; while( ProcessMessage() != -1 ) { SetMousePoint( 1000 , 100 ); // マウス座標を移動 GetMousePoint( &X , &Y ); // マウス座標を取得 // マウス座標を表示 ClearDrawScreen() ; DrawFormatString(0,0,GetColor(255,255,255),"X=%d Y=%d", X, Y); ScreenFlip(); if( CheckHitKey( KEY_INPUT_ESCAPE ) != 0 ){//Escで抜ける break; } } WaitKey();// キー待ち DxLib_End() ;// DXライブラリ使用の終了処理 return 0 ;// ソフトの終了 } ----------------------------------------------------- 2.行間情報があるフォントだけ、同じY座標でも、やや下にずれて表示される hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=2248  上記の記事で修正された影響だと思うのですが、 行間があるフォントとそうでないフォントを同じY座標で表示した場合、 従来はフォントの上下位置が調整されて表示されていたのに対し、 新しいバージョンではY座標が同じでも見た目が(行間分だけ?)ずれるようです。 挙動としては、これで想定通りでしょうか? 【従来のVer3.05の文字列描画(左からMS ゴシック・Arial Black・メイリオ・MS ゴシック)】 silversecond.com/WolfRPGEditor/tmp/Dxlib_fonttest1_305.jpg 【最新のVer3.05aの文字列描画(左からMS ゴシック・Arial Black・メイリオ・MS ゴシック)】 silversecond.com/WolfRPGEditor/tmp/Dxlib_fonttest2_305a.jpg Y座標が同じでも、見た目の縦位置がずれて表示されます。 もしこれで仕様でしたら、ずれた分の行間を、フォントハンドルから取得できる関数があると、 Y座標の調整が容易になるので助かります (すでにあるようでしたら申し訳ございません)。 【再現ソース】 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // 画面モードを設定 ChangeWindowMode(TRUE) ; // ウィンドウモード if( DxLib_Init() == -1 ){ return -1;} // DXライブラリ初期化処理 SetFontSize(48);// 違いが分かるように大きめのフォントで DrawString(0,0,"テスト",GetColor(255,255,255)); ChangeFont("Arial Black",DX_CHARSET_DEFAULT); DrawString(150,0,"ABC",GetColor(255,255,255)); ChangeFont("Meiryo UI"); DrawString(270,0,"テスト",GetColor(255,255,255)); ChangeFont("MS ゴシック"); DrawString(370,0,"テスト",GetColor(255,255,255)); WaitKey();// キー待ち DxLib_End() ;// DXライブラリ使用の終了処理 return 0 ;// ソフトの終了 } ------------- 以上です。 お忙しい中の修正、いつも誠にありがとうございます。

Page: 1 |

Re: SetMousePointの座標・行間情報付フォントの描画 ( No.1 )
名前:管理人 日時:2011/06/08 02:36

不具合のご報告ありがとうございます > 1.関数SetWindowSizeExtendRateで画面を広げたとき、 >  SetMousePointの移動先座標がGetMousePointと異なる単位になっている。 現象を手元の環境で確認でき、修正( 画面サイズが640x480 の時に SetWindowSizeExtendRate で 2倍表示にした状態でSetMousePoint( 320, 240 )を実行すると GetMousePointで得られる座標が ( 320, 240 )になる位置にマウスカーソルが移動するように )致しました こちらに修正版をアップしましたので、よろしければお試しになってみてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCCTest.exe // Gnu C++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) > 2.行間情報があるフォントだけ、同じY座標でも、やや下にずれて表示される アップして頂いた画像を見て初めて以前のバージョンの状態では他フォントより 小さくなっているなりに指定サイズに合った位置に描画されるようになっている ということに気付きました 良さそうな対処策を思いついたのですが、実装には若干時間がかかりそうです 今週末は諸事情で作業時間が確保できないので、早くても来週末になってしまいそうです 申し訳ありませんが少々お待ち下さい m(_ _;m
Re: SetMousePointの座標・行間情報付フォントの描画 ( No.2 )
名前:SmokingWOLF 日時:2011/06/09 21:33

1のご対応ありがとうございます。早速使用させていただきます。 2は、こちらは急ぎませんので、管理人様のお時間のあるときでお願い致します。 お忙しい中の素早いご対応、いつも本当にありがとうございます。
Re: SetMousePointの座標・行間情報付フォントの描画 ( No.3 )
名前:管理人 日時:2011/06/19 03:45

2の対応ができたバージョンをアップしましたので、よろしければお試しになってみてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCCTest.exe // Gnu C++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) 行間分を考慮して座標を調整( 描画y座標 - 行間 / 2 )するようにしてみました 少し試した限りでは問題が無さそうです
Re: SetMousePointの座標・行間情報付フォントの描画 ( No.4 )
名前:SmokingWOLF(解決) 日時:2011/06/23 01:08

早速こちらでも使わせていただきました。 今のところ、期待通り問題なく表示されていることを確認できました。 丁寧なご対応、いつも本当にありがとうございます。
Re: SetMousePointの座標・行間情報付フォントの描画 ( No.5 )
名前:SmokingWOLF(追加報告) 日時:2011/06/23 08:02

ユーザの方から情報をいただきましたので、些細な点ですが、 一点、報告させてください。 ・メイリオ(Meiryo UIではない)フォントを指定すると、サイズ24くらいにしたとき、  他のフォントより少し上に(というか大きめに?)表示されるようです。 【画像】 silversecond.com/WolfRPGEditor/tmp/Dxlib20110623.png (真ん中、メイリオの「テスト」だけ少し上にずれている、  または大きめに表示されているのが分かると思います) 【再現ソース (使用ライブラリ 6/19 3:11版)】 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // 画面モードを設定 ChangeWindowMode(TRUE) ; // ウィンドウモード if( DxLib_Init() == -1 ){ return -1;} // DXライブラリ初期化処理 SetFontSize(24);// 違いが分かるように大きめのフォントで DrawString(0,10,"テスト",GetColor(255,255,255)); ChangeFont("Arial Black",DX_CHARSET_DEFAULT); DrawString(90,10,"ABC",GetColor(255,255,255)); ChangeFont("メイリオ"); DrawString(150,10,"テスト",GetColor(255,255,255)); ChangeFont("MS ゴシック"); DrawString(230,10,"テスト",GetColor(255,255,255)); ChangeFont("Meiryo UI"); DrawString(310,10,"テスト",GetColor(255,255,255)); WaitKey();// キー待ち DxLib_End() ;// DXライブラリ使用の終了処理 return 0 ;// ソフトの終了 } ------------------- ただ、「現状が正式な仕様で、今後新たな修正はない」とされるのであれば、 個人的には、このままの仕様でも問題ないと思っています。 (困るのは途中で仕様が変わってしまうことだけですから) お手数をお掛けしますが、ご確認の方、よろしくお願い致します。
Re: SetMousePointの座標・行間情報付フォントの描画 ( No.6 )
名前:管理人 日時:2011/06/26 16:41

ご報告ありがとうございます メイリオのみ大きく、且つ少し上に表示される現象は私も確認しています WindowsXPに付属しているソフトの「ペイント」で確認した限りでは、 DXライブラリと同じように同サイズの別のフォントより若干大きく、 若干中心より上に寄っています、なので、サイズだけを調整した 現状のバージョン( 6/19 のバージョン )の意図を外れた結果ではないようです そして、フォント毎の文字の高さを自動で直感的に「丁度良い」と思える 位置に調節するのは今のAPIで取得できる文字情報ではちょっと難しそうです なので、暫くは今の仕様で行こうと思っています ( ただ、あるフォントでは文字の大きさや位置が常識的に考えてどう見ても 不具合と思えるような結果になる、などのことがあったら対処します )

Page: 1 |