回答編集履歴
4
誤字
test
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
-
まずゲームつくりおよび,タグのC++からみて,C++での開発も視野に入れて質問されているのだと予想します.今の流行は前述の回答者の通り,C#ですが性能を求める,iosやandroidなどのwindows製品以外でゲーム開発をおこなう,このような用途ではC++も現役と言えるでしょう.UEもblueprintだとかいう機能があったと思いますが,基本的にはC++での開発になるはずですし.
|
7
|
+
まずゲームつくりおよび,タグのC++からみて,C++での開発も視野に入れて質問されているのだと予想します.今の流行は前述の回答者の通り,C#ですが,性能を求める,iosやandroidなどのwindows製品以外でゲーム開発をおこなう,このような用途ではC++も現役と言えるでしょう.UEもblueprintだとかいう機能があったと思いますが,基本的にはC++での開発になるはずですし.
|
8
8
|
|
9
9
|
というわけで自分は低水準よりであるC++を例として回答させていただきます.IDEを使わずに開発したいという話にもかかわってくるでしょうし.
|
10
10
|
|
@@ -90,9 +90,9 @@
|
|
90
90
|
|
91
91
|
.
|
92
92
|
|
93
|
-
. // 1 / 60 = 0.1666・・・.unsigned intで計算したいので整数に
|
93
|
+
. // 1 / 60 = 0.01666・・・.unsigned intで計算したいので整数に
|
94
94
|
|
95
|
-
. if( (current_time - previous_time) > (100 / 60) )
|
95
|
+
. if( (current_time - previous_time) > (1000 / 60) )
|
96
96
|
|
97
97
|
. {
|
98
98
|
|
3
訂正
test
CHANGED
@@ -88,7 +88,11 @@
|
|
88
88
|
|
89
89
|
. current_time = time();
|
90
90
|
|
91
|
+
.
|
92
|
+
|
93
|
+
. // 1 / 60 = 0.1666・・・.unsigned intで計算したいので整数に
|
94
|
+
|
91
|
-
. if( (current_time - previous_time) > 60 )
|
95
|
+
. if( (current_time - previous_time) > (100 / 60) )
|
92
96
|
|
93
97
|
. {
|
94
98
|
|
2
誤字
test
CHANGED
@@ -42,7 +42,7 @@
|
|
42
42
|
|
43
43
|
|
44
44
|
|
45
|
-
ただしウィンドウを表示する部分だけは,残念ながらOS依存です.この部分はappleやmicosoftがあらかじめ用意してあるAPIを通じて処理させる必要があります.windowsを解説しますが,こちらではWindowsAPIの,有名なスケルトンコードを用いる必要があります.関数名を列挙すると,CreateWindow,
|
45
|
+
ただしウィンドウを表示する部分だけは,残念ながらOS依存です.この部分はappleやmicosoftがあらかじめ用意してあるAPIを通じて処理させる必要があります.windowsを解説しますが,こちらではWindowsAPIの,有名なスケルトンコードを用いる必要があります.関数名を列挙すると,CreateWindow,RegisterClass,ShowWindow,UpdateWindowなどを利用しないといけません.
|
46
46
|
|
47
47
|
|
48
48
|
|
@@ -64,7 +64,7 @@
|
|
64
64
|
|
65
65
|
つまり30fpsとは一秒間に30回,メインループを回すことになります.これで動画を作成できます.
|
66
66
|
|
67
|
-
ちなみに人間が
|
67
|
+
ちなみに人間が動画のちょうどよい早さを認識するのは60fpsまでといわれています.これ以上のfpsは無駄ですのでそれだけPC・ハード機の性能が有り余っているということです.というか早すぎると処理が一瞬で終わってしまいます.
|
68
68
|
|
69
69
|
コードで書けば以下のような感じです.
|
70
70
|
|
@@ -94,7 +94,7 @@
|
|
94
94
|
|
95
95
|
. sleep(); // 60fps以上で暇なら寝る
|
96
96
|
|
97
|
-
. }
|
97
|
+
. }
|
98
98
|
|
99
99
|
.
|
100
100
|
|
1
誤字
test
CHANGED
@@ -58,47 +58,67 @@
|
|
58
58
|
|
59
59
|
ちょっとまってください.じゃあ絵を出したはいいが動画とするにはどうしたらいいでしょうか.
|
60
60
|
|
61
|
-
まあDirextXにはDire
|
61
|
+
まあDirextXにはDirectShowという機能があったと思いますが,基本的はある方法を利用します.これは方法なので完全にプログラミングテクニックであり,べつにAPIが必要とかそういう話ではありません.
|
62
62
|
|
63
|
-
それはメインループと呼ばれる,ループによ
|
63
|
+
それはメインループと呼ばれる,ループによる方式です.動画の基本原理もそうですが,人は一秒間に30回以上の静止画を立て続けに見せられると,その絵が動いて見えます.パラパラ漫画です.この単位を30fpsといいます.fpsはframe per secondの略で,frameとはメインループが何回ループしたかという単位です.
|
64
64
|
|
65
65
|
つまり30fpsとは一秒間に30回,メインループを回すことになります.これで動画を作成できます.
|
66
|
+
|
67
|
+
ちなみに人間がループの速さから,動画のちょうどよい早さは60fpsまでといわれています.これ以上のfpsは無駄ですのでそれだけPC・ハード機の性能が有り余っているということです.というか早すぎると処理が一瞬で終わってしまいます.
|
66
68
|
|
67
69
|
コードで書けば以下のような感じです.
|
68
70
|
|
69
71
|
※わかりやすいように書いてます.しかもクラスの機能使ってないので実質C言語です.
|
70
72
|
|
73
|
+
.
|
71
74
|
|
75
|
+
.Data input;
|
72
76
|
|
73
|
-
|
77
|
+
.unsigned int current_time = 0;
|
74
78
|
|
79
|
+
.unsigned int previous_time = 0;
|
75
80
|
|
81
|
+
.
|
76
82
|
|
77
|
-
while(true) // 永遠に回る
|
83
|
+
.while(true) // 永遠に回る
|
78
84
|
|
79
|
-
{
|
85
|
+
.{
|
80
86
|
|
81
|
-
|
87
|
+
. previous_time = current_time;
|
82
88
|
|
83
|
-
|
89
|
+
. current_time = time();
|
84
90
|
|
85
|
-
u
|
91
|
+
. if( (current_time - previous_time) > 60 )
|
86
92
|
|
87
|
-
|
93
|
+
. {
|
88
94
|
|
89
|
-
|
95
|
+
. sleep(); // 60fps以上で暇なら寝る
|
90
96
|
|
91
|
-
|
97
|
+
. }
|
92
98
|
|
93
|
-
|
99
|
+
.
|
94
100
|
|
95
|
-
|
101
|
+
. draw();
|
96
102
|
|
97
|
-
|
103
|
+
. input = getUserInput(); // Data構造体(クラス)で状態を受け取る
|
98
104
|
|
99
|
-
|
105
|
+
. update( input ); // ここでキャラの状態やらステージを更新
|
100
106
|
|
107
|
+
.
|
108
|
+
|
109
|
+
. if( input.clear_flag || input.exit )
|
110
|
+
|
111
|
+
. {
|
112
|
+
|
113
|
+
. releaseResouce();
|
114
|
+
|
115
|
+
. closeWindow();
|
116
|
+
|
117
|
+
. break; // 終了
|
118
|
+
|
119
|
+
. }
|
120
|
+
|
101
|
-
}
|
121
|
+
.}
|
102
122
|
|
103
123
|
|
104
124
|
|