質問編集履歴

1

文章とタイトルを修正しました。

2021/01/25 08:31

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- フレームレートを制御するコードの作り方がうまく出来ない。
1
+ フレームレートを制御するコードの作り方がうまく出来ない。デバッグ方法を知りたい。
test CHANGED
@@ -1,6 +1,64 @@
1
- 提示コードはフレームレートを制限して60フレームで動くようにするコードですがなぜコメント部void wait();関数部のprintf()関数時間を停止出来ないのでしょうか?よく考えましたがわかりません。どうすればいいでしょうか?
1
+ 提示コードのwait();関数部ですがこれはしっかり60フレームで制御されてのでしょうか? デバッグログを出力してみましたがわかりません。また間違っている場合どうなってるのか教えてただけますでしょうか? またこの場合のデバッグ方法が知りたいです。
2
2
 
3
+
4
+
5
+ ![イメージ説明](1eb26b1a1baf1fef837cfb771e007e9a.jpeg)
6
+
7
+ ```cpp
8
+
9
+ #include "../Header/Fps.hpp"
10
+
11
+
12
+
3
- 値が0や-1などと表示されてしまます。
13
+ int Fps::mCount = 0;
14
+
15
+
16
+
17
+
18
+
19
+ Fps::Fps() {
20
+
21
+ glfwSetTime(0.0);
22
+
23
+
24
+
25
+ mStartTime = 0;
26
+
27
+ mFps = 0;
28
+
29
+ }
30
+
31
+
32
+
33
+ void Fps::Update() {
34
+
35
+
36
+
37
+ if (mCount == 0) { //1フレーム目なら時刻を記憶
38
+
39
+ mStartTime = GetTime();
40
+
41
+ }
42
+
43
+ if (mCount == N) { //60フレーム目なら平均を計算する
44
+
45
+ // printf("60FPS !\n");
46
+
47
+ int t = GetTime();
48
+
49
+ mFps = 1000.f / ((t - mStartTime) / (float)N);
50
+
51
+
52
+
53
+ mCount = 0;
54
+
55
+ mStartTime = t;
56
+
57
+ }
58
+
59
+ mCount++;
60
+
61
+ }
4
62
 
5
63
 
6
64
 
@@ -8,151 +66,17 @@
8
66
 
9
67
 
10
68
 
11
-
12
-
13
- ```cpp
69
+ void Fps::Wait() {
14
70
 
15
71
 
16
72
 
73
+ float tookTime = GetTime() - mStartTime; //かかった時間
17
74
 
75
+ // printf("tookTime: %f\n", tookTime);
18
76
 
19
- /*###############################################################################################################
77
+ // printf("(mCount * 1000.0f / FPS): %f\n", (mCount * 1000.0f / FPS));
20
78
 
21
- # フレームレート
22
-
23
- #################################################################################################################*/
24
-
25
- class Fps
26
-
27
- {
28
-
29
- public:
30
-
31
- Fps(int f)
32
-
33
- {
34
-
35
- mFrameRate = f;
36
-
37
- }
38
-
39
-
40
-
41
- void Update()
42
-
43
- {
44
-
45
- if (mCount == 0)
46
-
47
- {
48
-
49
- mStartTime = GetTime();
50
-
51
- }
52
-
53
-
54
-
55
- // printf("%d\n", GetTime() - mFps);
56
-
57
- mCount++;
58
-
59
-
60
-
61
- if (mCount == mFrameRate)
62
-
63
- {
64
-
65
- int t = GetTime();
66
-
67
- mFps = 1000.0f / ((t - mStartTime) / mFrameRate);
68
-
69
- //printf("mFps: %.2f\n", mFps);
70
-
71
- mCount = 0;
72
-
73
- mStartTime = t;
74
-
75
- }
76
-
77
- // printf("mCount: %d\n",mCount);
78
-
79
- }
80
-
81
-
82
-
83
- void Wait()///////////////////////////////////////////////////////////////////////////////////
84
-
85
- {
86
-
87
- int tookTime = GetTime() - mStartTime;
88
-
89
- int waitTime = mCount * 1000 / (mFrameRate - tookTime);
79
+ float waitTime = (mCount * 1000.0f / FPS) - tookTime; //待つべき時間
90
-
91
-
92
-
93
- //printf("waiTime:%d\n",waitTime);///////
94
-
95
- if (waitTime > 0)
96
-
97
- {
98
-
99
-
100
-
101
- glfwSetTime(waitTime);
102
-
103
- // printf("%lf\n",glfwGetTime());
104
-
105
- }
106
-
107
-
108
-
109
- }////////////////////////////////////////////////////////////////////////////////////////////
110
-
111
-
112
-
113
-
114
-
115
- static int getFrame()//フレーム取得関数
116
-
117
- {
118
-
119
- return mCount + 1;
120
-
121
- }
122
-
123
-
124
-
125
-
126
-
127
- static int getNextAnim(const int AnimSpeed)//引数は間隔で次切り替える時のフーレムを取得する。
128
-
129
- {
130
-
131
- int frame = 0;
132
-
133
- int f = mCount + AnimSpeed;
134
-
135
- if (f > 60)
136
-
137
- {
138
-
139
- f = f - 60;
140
-
141
- frame = f;
142
-
143
- }
144
-
145
- else {
146
-
147
- frame = f;
148
-
149
- }
150
-
151
-
152
-
153
- return frame;
154
-
155
- }
156
80
 
157
81
 
158
82
 
@@ -160,29 +84,9 @@
160
84
 
161
85
 
162
86
 
163
- private:
87
+ float f = waitTime * 1000;
164
88
 
165
- int mFrameRate = 0;
166
-
167
- static int mCount;
168
-
169
- float mFps = 0;
170
-
171
- int mStartTime = 0;
172
-
173
- int mMil_sec = 0; //ミリ秒管理
174
-
175
-
176
-
177
-
178
-
179
- int GetTime()
180
-
181
- {
182
-
183
- return (int)(glfwGetTime() * 1000.0);
89
+ std::chrono::milliseconds dura((int)f);
184
-
185
- }
186
90
 
187
91
 
188
92
 
@@ -190,11 +94,19 @@
190
94
 
191
95
 
192
96
 
97
+ glfwSetTime(0.0);
98
+
193
- };
99
+ }
194
100
 
195
101
 
196
102
 
103
+ int Fps::getFrameRate()
104
+
105
+ {
106
+
197
- #endif;
107
+ return mCount;
108
+
109
+ }
198
110
 
199
111
 
200
112
 
@@ -202,4 +114,16 @@
202
114
 
203
115
 
204
116
 
117
+ float Fps::GetTime()
118
+
119
+ {
120
+
121
+ return (float)glfwGetTime() * 1000.0f;
122
+
123
+ // return (float)glfwGetTime();
124
+
125
+ }
126
+
127
+
128
+
205
129
  ```