質問編集履歴
6
コメント追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -32,6 +32,7 @@
|
|
32
32
|
|
33
33
|
#include "DxLib.h"
|
34
34
|
|
35
|
+
//変数、関数宣言
|
35
36
|
extern int dGraphHandle1;
|
36
37
|
extern int dGraphHandle2;
|
37
38
|
extern bool dFlag;
|
@@ -46,6 +47,7 @@
|
|
46
47
|
//test.cpp
|
47
48
|
#include "test.h"
|
48
49
|
|
50
|
+
//変数、関数定義
|
49
51
|
int dGraphHandle1 = 0;
|
50
52
|
int dGraphHandle2 = 0;
|
51
53
|
bool dFlag = 0;
|
@@ -55,7 +57,7 @@
|
|
55
57
|
|
56
58
|
void dGraphMove()
|
57
59
|
{
|
58
|
-
|
60
|
+
//画像を読み込む
|
59
61
|
if (dFlag == false)
|
60
62
|
{
|
61
63
|
dGraphHandle1 = DxLib::LoadGraph("キャラクター画像.png");
|
@@ -64,12 +66,15 @@
|
|
64
66
|
dFlag = true;
|
65
67
|
}
|
66
68
|
|
69
|
+
//描画先を裏画面にする
|
67
70
|
DxLib::SetDrawScreen(DX_SCREEN_BACK);
|
68
|
-
|
71
|
+
//画面をクリアする
|
69
72
|
DxLib::ClearDrawScreen();
|
70
73
|
|
74
|
+
//キャラクターの移動速度
|
71
75
|
int speed = 10;
|
72
76
|
|
77
|
+
//上下左右移動
|
73
78
|
if (DxLib::CheckHitKey(KEY_INPUT_UP) != 0)
|
74
79
|
{
|
75
80
|
dP_Y(-speed);
|
@@ -88,8 +93,10 @@
|
|
88
93
|
dP_X(speed);
|
89
94
|
}
|
90
95
|
|
96
|
+
//描画の際のブレンドモード無し
|
91
97
|
DxLib::SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0);
|
92
98
|
|
99
|
+
//背景、キャラクター描画
|
93
100
|
DxLib::DrawGraph
|
94
101
|
(
|
95
102
|
0,
|
@@ -106,6 +113,7 @@
|
|
106
113
|
TRUE
|
107
114
|
);
|
108
115
|
|
116
|
+
//裏画面を表画面に描画
|
109
117
|
DxLib::ScreenFlip();
|
110
118
|
}
|
111
119
|
|
@@ -113,6 +121,7 @@
|
|
113
121
|
#pragma once
|
114
122
|
#include "test.h"
|
115
123
|
|
124
|
+
//FPS制御のための変数
|
116
125
|
unsigned long long dNow = 0;
|
117
126
|
unsigned long long dStart = 0;
|
118
127
|
bool dFlag_Time = 0;
|
@@ -120,6 +129,7 @@
|
|
120
129
|
|
121
130
|
double dOneFrame = 1000000 / 60;
|
122
131
|
|
132
|
+
//main関数
|
123
133
|
int WINAPI _tWinMain(
|
124
134
|
[[maybe_unused]] _In_ HINSTANCE hInstance,
|
125
135
|
[[maybe_unused]] _In_opt_ HINSTANCE hPrevInstance,
|
@@ -127,6 +137,7 @@
|
|
127
137
|
[[maybe_unused]] _In_ int nCmdShow)
|
128
138
|
{
|
129
139
|
|
140
|
+
//ウィンドウモードに変更
|
130
141
|
DxLib::ChangeWindowMode(true);
|
131
142
|
DxLib::SetGraphMode(1900, 1080, 32);
|
132
143
|
|
@@ -135,27 +146,37 @@
|
|
135
146
|
return -1; // エラーが起きたら直ちに終了
|
136
147
|
}
|
137
148
|
|
149
|
+
//描画先を裏画面にする
|
138
150
|
DxLib::SetDrawScreen(DX_SCREEN_BACK);
|
139
151
|
|
152
|
+
//ループ処理
|
140
153
|
while ((DxLib::ProcessMessage() == 0) && (DxLib::CheckHitKey(KEY_INPUT_ESCAPE) == 0))
|
141
154
|
{
|
155
|
+
//FPS処理の初期化
|
142
156
|
if (dFlag_Time == false)
|
143
157
|
{
|
144
158
|
dStart = DxLib::GetNowHiPerformanceCount();
|
145
159
|
dFlag_Time = true;
|
146
|
-
}
|
160
|
+
}
|
147
161
|
|
162
|
+
//現在の時間
|
148
163
|
dNow = DxLib::GetNowHiPerformanceCount();
|
149
164
|
|
150
165
|
unsigned long long dif = dNow - dStart;
|
151
166
|
|
167
|
+
//FPS制御
|
152
168
|
if (dif >= (dOneFrame * dCount))
|
153
169
|
{
|
154
170
|
|
171
|
+
//裏画面セット、クリア、
|
172
|
+
//キャラクターの座標移動、
|
173
|
+
//ブレンドモード無し、背景、キャラクターの描画、
|
174
|
+
//ダブルバッファリング
|
155
175
|
dGraphMove();
|
156
176
|
|
157
|
-
|
177
|
+
++dCount;
|
158
178
|
|
179
|
+
//1秒ごと(1000000ミリ秒)に開始時間、カウントをリセット
|
159
180
|
if (dif >= 1000000)
|
160
181
|
{
|
161
182
|
dStart = DxLib::GetNowHiPerformanceCount();
|
5
文章の修正。ジャンプ時の斜め移動時に残像が全体にかかる。
title
CHANGED
File without changes
|
body
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
画像Aはキャラクターを描画していると思ってもらえばわかりやすいと思いますが、
|
13
13
|
画像Aが単純な四角画像の場合は画像端のみ残像があるように見えるのですが、
|
14
14
|
実際のキャラクターの画像を描画した場合、
|
15
|
-
|
15
|
+
特にジャンプなどの斜め移動をする動きをするとき、キャラクターの全体に残像がかかって、かなり見づらいのです。
|
16
16
|
|
17
17
|
画像AがBMP画像でも現象が起きます。
|
18
18
|
テストではウィンドウモードにしていますが、フルスクリーンでも現象が起きます。
|
4
コードの修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -154,6 +154,8 @@
|
|
154
154
|
|
155
155
|
dGraphMove();
|
156
156
|
|
157
|
+
++dCount;
|
158
|
+
|
157
159
|
if (dif >= 1000000)
|
158
160
|
{
|
159
161
|
dStart = DxLib::GetNowHiPerformanceCount();
|
3
コードの修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -113,6 +113,13 @@
|
|
113
113
|
#pragma once
|
114
114
|
#include "test.h"
|
115
115
|
|
116
|
+
unsigned long long dNow = 0;
|
117
|
+
unsigned long long dStart = 0;
|
118
|
+
bool dFlag_Time = 0;
|
119
|
+
int dCount = 0;
|
120
|
+
|
121
|
+
double dOneFrame = 1000000 / 60;
|
122
|
+
|
116
123
|
int WINAPI _tWinMain(
|
117
124
|
[[maybe_unused]] _In_ HINSTANCE hInstance,
|
118
125
|
[[maybe_unused]] _In_opt_ HINSTANCE hPrevInstance,
|
@@ -132,7 +139,28 @@
|
|
132
139
|
|
133
140
|
while ((DxLib::ProcessMessage() == 0) && (DxLib::CheckHitKey(KEY_INPUT_ESCAPE) == 0))
|
134
141
|
{
|
142
|
+
if (dFlag_Time == false)
|
143
|
+
{
|
144
|
+
dStart = DxLib::GetNowHiPerformanceCount();
|
145
|
+
dFlag_Time = true;
|
146
|
+
}//if
|
147
|
+
|
148
|
+
dNow = DxLib::GetNowHiPerformanceCount();
|
149
|
+
|
150
|
+
unsigned long long dif = dNow - dStart;
|
151
|
+
|
152
|
+
if (dif >= (dOneFrame * dCount))
|
153
|
+
{
|
154
|
+
|
135
|
-
|
155
|
+
dGraphMove();
|
156
|
+
|
157
|
+
if (dif >= 1000000)
|
158
|
+
{
|
159
|
+
dStart = DxLib::GetNowHiPerformanceCount();
|
160
|
+
dCount = 0;
|
161
|
+
}
|
162
|
+
}
|
163
|
+
|
136
164
|
}
|
137
165
|
|
138
166
|
DxLib_End(); // DXライブラリ使用の終了処理
|
2
イメージ画像の追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -145,3 +145,8 @@
|
|
145
145
|
//テスト画像
|
146
146
|

|
147
147
|

|
148
|
+
|
149
|
+
//イメージ画像
|
150
|
+
画像左が静止中、右が動いている最中のイメージです
|
151
|
+

|
152
|
+

|
1
プログラム中のコメント一部削除
title
CHANGED
File without changes
|
body
CHANGED
@@ -73,20 +73,20 @@
|
|
73
73
|
if (DxLib::CheckHitKey(KEY_INPUT_UP) != 0)
|
74
74
|
{
|
75
75
|
dP_Y(-speed);
|
76
|
-
}
|
76
|
+
}
|
77
77
|
else if (DxLib::CheckHitKey(KEY_INPUT_DOWN) != 0)
|
78
78
|
{
|
79
79
|
dP_Y(speed);
|
80
|
-
}
|
80
|
+
}
|
81
81
|
|
82
82
|
if (DxLib::CheckHitKey(KEY_INPUT_LEFT) != 0)
|
83
83
|
{
|
84
84
|
dP_X(-speed);
|
85
|
-
}
|
85
|
+
}
|
86
86
|
else if (DxLib::CheckHitKey(KEY_INPUT_RIGHT) != 0)
|
87
87
|
{
|
88
88
|
dP_X(speed);
|
89
|
-
}
|
89
|
+
}
|
90
90
|
|
91
91
|
DxLib::SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0);
|
92
92
|
|