teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

6

コメント追記

2025/07/10 17:16

投稿

asdfghjkl_12345
asdfghjkl_12345

スコア27

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
- }//if
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
-     ++dCount;
177
+ ++dCount;
158
178
 
179
+ //1秒ごと(1000000ミリ秒)に開始時間、カウントをリセット
159
180
  if (dif >= 1000000)
160
181
  {
161
182
  dStart = DxLib::GetNowHiPerformanceCount();

5

文章の修正。ジャンプ時の斜め移動時に残像が全体にかかる。

2025/07/10 09:05

投稿

asdfghjkl_12345
asdfghjkl_12345

スコア27

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

コードの修正

2025/07/10 08:54

投稿

asdfghjkl_12345
asdfghjkl_12345

スコア27

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

コードの修正

2025/07/10 08:52

投稿

asdfghjkl_12345
asdfghjkl_12345

スコア27

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
- dGraphMove();
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

イメージ画像の追加

2025/07/10 07:13

投稿

asdfghjkl_12345
asdfghjkl_12345

スコア27

title CHANGED
File without changes
body CHANGED
@@ -145,3 +145,8 @@
145
145
  //テスト画像
146
146
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2025-07-10/6ba57c56-836f-4c18-8ca0-af669eecbac5.png)
147
147
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2025-07-10/62b86c25-9747-489e-b707-d5477f2258f0.png)
148
+
149
+ //イメージ画像
150
+ 画像左が静止中、右が動いている最中のイメージです
151
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2025-07-10/2ab9c575-955e-47ca-b727-eca4f3823299.png)
152
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2025-07-10/6fac93d0-0687-48ea-87b7-689fa5ccbeb1.png)

1

プログラム中のコメント一部削除

2025/07/10 05:16

投稿

asdfghjkl_12345
asdfghjkl_12345

スコア27

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
- }//if
76
+ }
77
77
  else if (DxLib::CheckHitKey(KEY_INPUT_DOWN) != 0)
78
78
  {
79
79
  dP_Y(speed);
80
- }//else
80
+ }
81
81
 
82
82
  if (DxLib::CheckHitKey(KEY_INPUT_LEFT) != 0)
83
83
  {
84
84
  dP_X(-speed);
85
- }//if
85
+ }
86
86
  else if (DxLib::CheckHitKey(KEY_INPUT_RIGHT) != 0)
87
87
  {
88
88
  dP_X(speed);
89
- }//else
89
+ }
90
90
 
91
91
  DxLib::SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0);
92
92