
いつもお世話になっています。
いま、タイマーを使ったアニメーションをやっているのですが、
SetTimer(VisualWnd,ID_YOKOUGOKI,200,NULL);
SetTimer(VisualWnd,ID_MOJIOKURI,20,NULL);
ようにすると、下のID_MOJIOKURIの部分しか処理されません。
case WM_TIMER:
switch(wParam){
case ID_YOKOUGOKI:
if(syouninkaiwa<13){
if(playeryoko==1){
playeryoko=2;
}else if(playeryoko==2){
playeryoko=3;
}else if(playeryoko==3){
playeryoko=4;
}else if(playeryoko==4){
playeryoko=1;
}
if(syouninyoko==1){
syouninyoko=2;
}else if(syouninyoko==2){
syouninyoko=3;
}else if(syouninyoko==3){
syouninyoko=4;
}else if(syouninyoko==4){
syouninyoko=1;
}
}
break;
case ID_MOJIOKURI:
if(syouninkaiwa==1){
mojiokuri+=1;
}
break;
}
InvalidateRect(VisualWnd,NULL,FALSE);
return 0;
また描画処理は
if(playeryoko==1){
BitBlt(hdcv, 250,132, 34, 32,
memdc[50], 0, 0, SRCCOPY);
}else if(playeryoko==2){
BitBlt(hdcv, 249,130, 34, 32,
memdc[55], 0, 0, SRCCOPY);
}else if(playeryoko==3){
BitBlt(hdcv, 250,132, 34, 32,
memdc[50], 0, 0, SRCCOPY);
}else if(playeryoko==4){
BitBlt(hdcv, 249,130, 34, 32,
memdc[56], 0, 0, SRCCOPY);
}
if(syouninyoko==1){
BitBlt(hdcv, 220,130, 29, 32,
memdc[51], 0, 0, SRCCOPY);
}else if(syouninyoko==2){
BitBlt(hdcv, 220,130, 29, 32,
memdc[57], 0, 0, SRCCOPY);
}else if(syouninyoko==3){
BitBlt(hdcv, 220,130, 29, 32,
memdc[51], 0, 0, SRCCOPY);
}else if(syouninyoko==4){
BitBlt(hdcv, 220,130, 29, 32,
memdc[58], 0, 0, SRCCOPY);
}
}else{
BitBlt(hdcv, 250,130, 34, 32,
memdc[50], 0, 0, SRCCOPY);
BitBlt(hdcv, 220,130, 29, 32,
memdc[51], 0, 0, SRCCOPY);
}
SetTimer(VisualWnd,ID_YOKOUGOKI,200,NULL);
SetTimer(VisualWnd,ID_MOJIOKURI,20,NULL);
if(syouninkaiwa == 0){
TextOut(hdcv,350,350,TEXT("push Enter"),lstrlen(TEXT("push Enter")));
}else if(syouninkaiwa == 1){
if(mojiokuri==1){
wsprintf(TEXT1,L"○");
}else if(mojiokuri==2){
wsprintf(TEXT1,L"○○");
}else if(mojiokuri==3){
wsprintf(TEXT1,L"○○○");
}else if(mojiokuri==4){
wsprintf(TEXT1,L"○○○○");
}else if(mojiokuri==5){
wsprintf(TEXT1,L"○○○○○");
}else if(mojiokuri==6){
wsprintf(TEXT1,L"○○○○○○");
}else if(mojiokuri==7){
wsprintf(TEXT1,L"○○○○○○○");
}else if(mojiokuri==8){
wsprintf(TEXT1,L"近頃、冒険者が多");
}
・・・・・・・・・・・・・・・・・・・・
TextOut(hdcv,20,240,TEXT1,lstrlen(TEXT1));
というふうです。
どちらが悪いのか分かりません。
ちなみに、タイマーの時間を同じにしたら、同時にできましたが、両方の処理が遅くなりました。
どのように解決したらよいのか教えてください。お願いします。
No.1ベストアンサー
- 回答日時:
コードから推察するに、原因は描画コード内のSetTimer関数の呼び出しだと思われます。
> SetTimer(VisualWnd,ID_YOKOUGOKI,200,NULL);
> SetTimer(VisualWnd,ID_MOJIOKURI,20,NULL);
まず、SetTimer関数(およびメッセージタイマー全体)の仕様を確認してください。
MSDN - SetTimer関数
http://msdn.microsoft.com/ja-jp/library/cc411200 …
SetTimer関数を呼び出すとuElapse引数で与えられた間隔で、WM_TIMERイベントを送り続ける仕様です。
nIDEventで識別されるタイマーが既に設定されていた場合、タイマーはリセットされます。
描画コードがWM_PAINTメッセージで処理されると仮定すると、
WM_TIMER→InavlidateRect()→WM_PAINT送出→SetTimer()が呼び出され、どちらのタイマもリセットされる。
ID_MOJIOKURIのタイマの方がID_YOKOUGOKIより高頻度なため、
高確率でID_MOJIOKURIが処理されているように見える…のではないかと思います。
提示されたコードからの推測ですので、確証はありませんが。
コードを見る限り、描画コード中のSetTimer関数呼び出しは不要に思えます。
ひとまず、描画コード中のSetTimer関数呼び出しは削除し、
タイマが不要になったらKillTimer関数を呼び出すように変更してみてはいかがでしょうか。
また、蛇足ですがメッセージタイマは55ms程度の精度しかありません。
ID_MOJIOKURIで20msを指定されていますが、実際にはその間隔での処理は期待できません。
文字送りですので、特に問題ないと思いますけど。
回答ありがとうございました。
SetTimerをWM_CREATEでやったらできました。
詳しいご説明、本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB2010のChartで、何本もの線を...
-
DrawLineで引いた線が消えてし...
-
線の描画速度
-
ビットマップに描画をしてピク...
-
ExcelVBAのコントロールの種類...
-
どう増強すべきか
-
複数のコマンドボタン(VBAで)...
-
VBA シートのボタン名を変更し...
-
パソコンへの「Dropbox...
-
AccessVBAで「dim dbs as datab...
-
Debug.exe実行時にWinMainCRTSt...
-
【マクロ】エラー【#DIV/0!】が...
-
フォーム1が開いているのならMs...
-
VB.NETでラベルの大きさってど...
-
クリックイベントなのに、2回ク...
-
[VB.net] ボタン(Flat)のEnable...
-
Do While中のVBAアプリケーショ...
-
共通モジュールでDBへの接続と...
-
worksheetFunctionクラスのVloo...
-
Amazon api について。JANコー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ListBoxで改行したい
-
PowerPoint の VBA
-
VC;;6.0のMFCで線を簡単に引け...
-
vb6のTEXTBOX
-
C# DrawImage 物理サイズでな...
-
for文の実行速度を遅くしたいの...
-
Pythonにおける物理のシミュレ...
-
MFCでのコンボボックスについて
-
C#を用いて描画する四角形の角...
-
円の頂点の求め方を知りたいです。
-
win32api複数のタイマーを同時...
-
給紙トレイをダイアログを使わ...
-
エクセルのレーダーチャート 0...
-
VB 6.0 PictureBox のプロパテ...
-
Excel VBA:コントロールボタン...
-
C#で壁の当たり判定と自キャラ...
-
VC++ ドラッグしながらの図の...
-
Word 描画オブジェクトを削除...
-
scilabでのグラフ描画時の軸設定
-
ピクチャーボックスでの折線グ...
おすすめ情報