こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

締切り済みの質問

javaでゲーム作りを始めようと思ったのですが

初歩的な質問をすみません。

javaで簡単なテトリスを組もうと考えネットでやり方を探して
見たのですが、どのサイトにもマルチスレッドで作ることを推奨していて、
しかもアプレットとしてHTMLに埋め込まなければいけないと書いてありました。

しかし、ゲームループを回すうえで、必ずしもマルチスレッドである必要性
が私にはよく理解できません。
C++ではスレッドがどうとか特に意識する必要はないようなのですが、
javaではなぜスレッドを使わなければならないのでしょうか?

投稿日時 - 2017-10-03 20:57:30

QNo.9381811

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(8)

ANo.8

>javaで簡単なテトリスを組もうと考えネットでやり方を探して
>見たのですが、どのサイトにもマルチスレッドで作ることを推奨していて

テトリスなら1つのスレッドで作れますが、マルチ・スレッド的なプログラミングが必須になります。
(メインの)イベント処理と競合しないように排他制御(synchronized)が必要になります。

投稿日時 - 2017-10-05 17:46:10

ANo.7

>>どのサイトにもマルチスレッドで作ることを推奨していて

>スレッドを1つだけ作った場合でも、(メインの)イベント処理と競合しないように排他制御(synchronized)が必要になります。
>スレッドを1つだけ作った場合でも、結局 マルチ・スレッド的なプログラミングが必須になります。

動きのあるゲームを作る場合、最低限1つのスレッドが必要になります。
スレッドが1つだでも、結局 マルチ・スレッド的なプログラミングが必須になります。
ただし、スレッドが1つだで(メインの)イベント処理が全く無いなら排他制御(synchronized)は必要あるませんが…。

投稿日時 - 2017-10-04 17:53:50

ANo.6

>どのサイトにもマルチスレッドで作ることを推奨していて

スレッドを1つだけ作った場合でも、(メインの)イベント処理と競合しないように排他制御(synchronized)が必要になります。
スレッドを1つだけ作った場合でも、結局 マルチ・スレッド的なプログラミングが必須になります。

投稿日時 - 2017-10-04 17:46:20

ANo.5

必ずしもマルチスレッドにする必要はありませんがswtなどでGUI作ると必然的にマルチスレッドになっちゃいますよ。

投稿日時 - 2017-10-04 07:25:40

補足

そうなんですか。有難うございます。

投稿日時 - 2017-10-04 20:21:40

ANo.4

>>javaではなぜスレッドを使わなければならないのでしょうか?

ネットでゲームを楽しむ人が1人だけなら、別にマルチスレッドにする必要はなく、シングルスレッドでいいのです。
でも、通常は、複数の人が同時にゲームを楽しむようにしますよね?

そして、複数のゲームというかタスクを同時実行させる方法のひとつとして、マルチスレッドという手法があるのです。
他に複数タスクを同時実行する手法として、マルチプロセスというやり方があります。

プログラミングの難易度としては、マルチスレッドのほうが高いですが、要求するシステム資源がマルチプロセスよりも少ないのです。
JavaはC++などと比較して、システム資源を多く使う傾向があるので、マルチスレッドを推奨しているのかもしれませんね。

C++やCは、HTMLとは無関係に起動することもできますし、システム負荷がJavaより低い傾向がありますから、お手軽なマルチプロセスを利用しているのでしょう。逆にいえば、マルチスレッドで記述するのがめんどくさいし、勉強用のサンプルプログラムは、できるだけ単純なほうがいいですからね。

ちなみに、C#はバージョン 5.0より、マルチスレッドが簡単に記述できるように、新たな構文(async/await)が導入されました。

ゲームプログラミングで有名なUnityは、C#系なので、この新しい命令を活用されているようです。

投稿日時 - 2017-10-03 23:41:13

補足

回答ありがとうございます。

投稿日時 - 2017-10-04 20:21:46

ANo.3

>回答No.2 amanojaku1

>日本のアニメは秒間8コマ~12コマの画像を一定時間ごとに表示させているらしい

例えば秒間10コマ表示させたい場合は、1コマを0.1秒ごとに表示させます(この場合の一定時間とは0.1秒になる)。

投稿日時 - 2017-10-03 22:43:01

ANo.2

>回答No.1 amanojaku1

下記が一定時間ごとに動かしている例です。
日本のアニメは秒間8コマ~12コマの画像を一定時間ごとに表示させているらしいですが、それで いかにも動いているように見えるのと同じ原理です(その瞬間・瞬間は止まった画像でしかありません)。

通常のJava
Java2 Appletcation 10『Sin グラフを横スクロールさせる(6)』
https://youtu.be/XRoiPPgqxto

Android Java
SurfaceView 029
https://youtu.be/0v5PRF-S5nM

投稿日時 - 2017-10-03 22:27:58

ANo.1

>どのサイトにもマルチスレッドで作ることを推奨していて

落ちてくるブロックの動きは一定時間ごとに動かします、そのためにスレッドが必要になります。
テトリスにかぎらず一定時間ごとに動きのあるゲームにはスレッドが必要になります。

マルチスレッドではスレッドの排他制御(synchronized)が必要になります。
下記ページの「スレッドの排他制御(synchronized)」に例が記載されています。

http://www.tohoho-web.com/java/thread.htm

投稿日時 - 2017-10-03 21:48:25

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-