Re: Win8でのMakeKeyInputの不具合について ( No.1 ) |
- 名前:管理人 日時:2013/06/09 01:01
少し前にWindows8環境で漢字変換が正常に動作しない不具合を修正しましたので、
恐らくこちらの最新バージョンでは直っていると思います
よろしければお試しになってみてください 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/DxLibGCC_DevCppTest.exe // Dev-C++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用
http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』を、VCをお使いの場合は『リビルド』を、
Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
|
Re: Win8でのMakeKeyInputの不具合について ( No.2 ) |
- 名前:PATOLE 日時:2013/06/09 01:12
管理人さま
返答ありがとうございます。
上記の不具合は修正されておりました。
少し気になる点があるのですが
一度入力が完了して
再びMakeKeyInputでハンドルを作成し、入力しようとすると
全角入力だったものが、半角入力に毎回変わっているのは仕様でしょうか?
|
Re: Win8でのMakeKeyInputの不具合について ( No.3 ) |
- 名前:管理人 日時:2013/06/23 20:55
仕様です・・・
ライブラリ内部の処理として、文字列入力ハンドルが一つもない状態で MakeKeyInput で
文字列入力ハンドルが作成された場合に SetUseIMEFlag( TRUE ) ; を呼び、
同じように全ての文字列入力ハンドルが DeleteKeyInput で削除されたときに
SetUseIMEFlag( FALSE ) ; を呼んでいます
そして SetUseIMEFlag( FALSE ) ; が呼ばれたタイミングで全角入力だった設定がリセットされます
ただ、SetUseIMEFlag 関数は DxLib.h に書かれている内部処理外からも使用できる関数なので、
内部で勝手にこの設定が変更されるのは不自然なので、内部では SetUseIMEFlag 関数で変更される
フラグとは別にフラグを持つことで内部では SetUseIMEFlag 関数を呼ばないように仕様を変更しました
この変更で内部で新たに追加したフラグか、SetUseIMEFlag で設定するフラグのどちらかが
TRUE になっていたら全角入力の設定をリセットしないようにしましたので、事前に
SetUseIMEFlag( TRUE ) ; を実行しておけば全角入力の設定がリセットされないようにできるようになりました
上記変更を加えたバージョンをこちらにアップしましたので、よろしければお試しになってみてください 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/DxLibGCC_DevCppTest.exe // Dev-C++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用
http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』を、VCをお使いの場合は『リビルド』を、
Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
|
Re: Win8でのMakeKeyInputの不具合について ( No.4 ) |
- 名前:PATOLE 日時:2013/07/17 16:40
確認が大変遅れてしまい、恐れ入ります。
確認をさせていただきましたが、不具合がありました。
上記のバージョン及び、DXライブラリの最新版で試してみましたが
SetUseIMEFlag( TRUE ) ; を使用しない場合は
変換候補が表示されませんでした。
使用した場合は変換候補が表示されましたが
前回の変換候補が残ったまま、正常に動作ないようです。
お忙しい中恐れ入りますが、ご確認いただければ幸いです。
開発・実行環境
Windows8
Visual C++ 2010
|
Re: Win8でのMakeKeyInputの不具合について ( No.5 ) |
- 名前:PATOLE 日時:2013/07/18 00:10
追記です。
以前は、『DxLibVCTest.exe』でいただいたDXライブラリを使用していました。
(ファイルの更新日が6/9です)
最新のDXライブラリを使用すると、なぜか2Dの描画処理が異常に重くなっています。
大規模なゲームプログラムなので、どの関数による影響かまではわかりませんが
2D描画(文字描画?)関連がとても重いです。
ライブラリを、旧バージョンに戻すと速度は正常に戻るようです。
そちらも重ねてご確認いただければと存じます。
|
Re: Win8でのMakeKeyInputの不具合について ( No.6 ) |
- 名前:管理人 日時:2013/07/21 09:44
|
Re: Win8でのMakeKeyInputの不具合について ( No.7 ) |
- 名前:PATOLE 日時:2013/07/21 18:26
修正お疲れ様です。
確認をさせていただきましたところ
MakeKeyInput系の不具合は直っておりませんでした。
Windows8とWindows7の両方の環境下で実行したところ
Windows8でのみ発生します。(両方ともGoogle日本語入力)
日本語文字列の表示や一発変換などはうまくいくのですが
1.日本語文字列を入力
2.スペースキーを2回押して変換候補を表示
3.エンターで決定後、再び日本語を入力
4.スペースキーで変換をしようとすると、2で表示された変換候補がそのまま表示されます。
これは、サンプルプログラムでも発生しました。
(ウィンドウモードで起動するように変更しましたが……)
IMEは、Google日本語入力を使用しています。
Microsoft IMEでは正常に動作いたしました。
(どうやらIMEの種類が問題だったようです。伝える情報が不足しており申し訳ありません)
動作が重くなる件ですが
『20130630』までは通常どおりの動作で
『20130708』以降が非常に重い状態になることを確認しました。
(確認した環境は、Windows7,Vistaです)
比較的、低スペックのコンピュータでのみ現象を確認できました。
1ループごとに毎回使用してそうな関数は
ProcessMessage()
ClearDrawScreen()
GetMousePoint()
GetHitKeyStateAll()
ScreenFlip()
DrawGraph()
DrawRotaGraph()
SetDrawBlendMode()
SetDrawArea()
GetNowCount()
GetActiveFlag()
SetFontSize()
DrawFormatString()
などです。ざくっと見ただけですが、見当違いでしたら申し訳ないです。
メインループに入る前に使用している関数は
SetMainWindowText()
SetGraphMode( 1024 , 614 , 16 )
SetWindowIconID()
ChangeWindowMode( TRUE )
SetHookWinProc()
SetWindowSizeChangeEnableFlag( TRUE )
SetAlwaysRunFlag( TRUE )
SetDoubleStartValidFlag( TRUE )
SetOutApplicationLogValidFlag( FALSE )
DxLib_Init()
SetDrawScreen( DX_SCREEN_BACK )
SetDXArchiveKeyString()
SetDXArchiveExtension()
ChangeFont( "MS ゴシック" )
ChangeFontType( DX_FONTTYPE_EDGE )
SetUseIMEFlag( TRUE )
SetTransColor()
SetCameraScreenCenter()
ChangeLightTypeDir()
SetCameraNearFar()
以上です。
このゲームは3D描画と2D描画が混在していますが
2D描画のみしかないシーンでも動作が重くなる現象を確認できました。
他にも必要な情報がありましたら仰ってください。
|
Re: Win8でのMakeKeyInputの不具合について ( No.8 ) |
- 名前:てらす 日時:2013/07/22 06:01
私も気になった点がありまして、
こちらで問題になっている動作が重くなる件に関連しそうなので、書き込ませていただきます。
ちょうどDrawString系を使用するプログラムを作っており
私の環境でも異常に重くなるので簡単にテストしてみたところ
どうやらChangeFontを実行した後、DrawStringやDrawFormatStringを実行すると途端に重くなるようです。
CreateFontToHandleとDrawStringToHandleの組み合わせなら異常に重くなることもないため
現在はそれで対応しています。
環境:
Windows 7 Home Premium 64-bit (6.1, Build 7601) Service Pack 1 (7601.win7sp1_gdr.130318-1533)
Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz (8 CPUs), ~3.4GHz
NVIDIA GeForce GTX 660 (Driver Version: 9.18.13.1422)
Visual Studio 2010 Professional (Version: 10.0.40219.1 SP1Rel)
DXライブラリはこのトピックに貼られた最新のものです。
一応、テストに使用したソースコードも貼っておきます。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE );
if( DxLib_Init() == -1 ){ return -1; }
SetDrawScreen( DX_SCREEN_BACK );
//*ChangeFontを使用するかしないかで明らかな速度差が出る。
//FontNameが何だろうと結果は変わらない。
ChangeFont( "MS ゴシック" );
//*/
//SetFontSize( 14 );
//SetFontThickness( 1 );
while( !ProcessMessage() ){
if( CheckHitKeyAll() != 0 ){ break; }
ClearDrawScreen();
LONGLONG time = GetNowHiPerformanceCount();
for( int i=0; i<100; ++i ){
DrawString( 320, 240, "TEST", GetColor( 255, 255, 255 ) );
}
time = GetNowHiPerformanceCount()-time;
DrawFormatString( 0, 0, GetColor( 255, 255, 255 ), "%08lld", time );
ScreenFlip();
}
DxLib_End();
return 0;
}
|
Re: Win8でのMakeKeyInputの不具合について ( No.9 ) |
- 名前:管理人 日時:2013/07/27 23:26
詳しいご情報ありがとうございます、Windows8 + Google日本語入力で手元の環境でも再現しました
正常に動作するように修正したバージョンをアップしましたので、よろしければお試しください 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/DxLibGCC_DevCppTest.exe // Dev-C++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用
http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』を、VCをお使いの場合は『リビルド』を、
Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
動作が重くなる件についてもお試しいただきありがとうございます
ただ、20130630 から 20130708 への変更の中では処理が重くなる原因となるようなものが無く
手元でも速度変化を再現できていないので何もできていない状態です
挙げて頂いた1ループ毎に使用している関数の中では
SetFontSize が1ループ毎に使用するには負荷の高い関数となっていますので、
てらすさんも仰られていますが SetFontSize を使用する代わりにメインループに
入る前に CreateFontToHandle で予め必要なサイズのフォントを作成しておいて、
メインループ内ではサイズに合わせて作成しておいたフォントハンドルを使用して
文字列を描画するようにしてみてください
|
Re: Win8でのMakeKeyInputの不具合について ( No.10 ) |
- 名前:PATOLE(解決) 日時:2013/08/19 00:36
返答が大変遅くなり申し訳ありません。
修正、お疲れ様です。
上記を試してみましたが、正常に修正されておりました。
ですが、重い現象は変わらないようです。
SetFontSizeが重いとのことですので
すべてフォントハンドルを作成して表示すれば重い現象は発生しなくなりました。
そのため、そちらで現在は対応しています。
結果的に解決できましたので、解決とさせていただきます。
|