• 締切済み

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

初歩的な質問をすみません。 javaで簡単なテトリスを組もうと考えネットでやり方を探して 見たのですが、どのサイトにもマルチスレッドで作ることを推奨していて、 しかもアプレットとしてHTMLに埋め込まなければいけないと書いてありました。 しかし、ゲームループを回すうえで、必ずしもマルチスレッドである必要性 が私にはよく理解できません。 C++ではスレッドがどうとか特に意識する必要はないようなのですが、 javaではなぜスレッドを使わなければならないのでしょうか?

  • Java
  • 回答数8
  • ありがとう数0

みんなの回答

回答No.8

>javaで簡単なテトリスを組もうと考えネットでやり方を探して >見たのですが、どのサイトにもマルチスレッドで作ることを推奨していて テトリスなら1つのスレッドで作れますが、マルチ・スレッド的なプログラミングが必須になります。 (メインの)イベント処理と競合しないように排他制御(synchronized)が必要になります。

回答No.7

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

回答No.6

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

  • wormhole
  • ベストアンサー率28% (1622/5659)
回答No.5

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

blacknike94
質問者

補足

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

  • catpow
  • ベストアンサー率24% (620/2527)
回答No.4

>>javaではなぜスレッドを使わなければならないのでしょうか? ネットでゲームを楽しむ人が1人だけなら、別にマルチスレッドにする必要はなく、シングルスレッドでいいのです。 でも、通常は、複数の人が同時にゲームを楽しむようにしますよね? そして、複数のゲームというかタスクを同時実行させる方法のひとつとして、マルチスレッドという手法があるのです。 他に複数タスクを同時実行する手法として、マルチプロセスというやり方があります。 プログラミングの難易度としては、マルチスレッドのほうが高いですが、要求するシステム資源がマルチプロセスよりも少ないのです。 JavaはC++などと比較して、システム資源を多く使う傾向があるので、マルチスレッドを推奨しているのかもしれませんね。 C++やCは、HTMLとは無関係に起動することもできますし、システム負荷がJavaより低い傾向がありますから、お手軽なマルチプロセスを利用しているのでしょう。逆にいえば、マルチスレッドで記述するのがめんどくさいし、勉強用のサンプルプログラムは、できるだけ単純なほうがいいですからね。 ちなみに、C#はバージョン 5.0より、マルチスレッドが簡単に記述できるように、新たな構文(async/await)が導入されました。 ゲームプログラミングで有名なUnityは、C#系なので、この新しい命令を活用されているようです。

blacknike94
質問者

補足

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

回答No.3

>回答No.2 amanojaku1 >日本のアニメは秒間8コマ~12コマの画像を一定時間ごとに表示させているらしい 例えば秒間10コマ表示させたい場合は、1コマを0.1秒ごとに表示させます(この場合の一定時間とは0.1秒になる)。

回答No.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

回答No.1

>どのサイトにもマルチスレッドで作ることを推奨していて 落ちてくるブロックの動きは一定時間ごとに動かします、そのためにスレッドが必要になります。 テトリスにかぎらず一定時間ごとに動きのあるゲームにはスレッドが必要になります。 マルチスレッドではスレッドの排他制御(synchronized)が必要になります。 下記ページの「スレッドの排他制御(synchronized)」に例が記載されています。 http://www.tohoho-web.com/java/thread.htm

関連するQ&A

  • JavaマルチスレッドでSleepを使わずに終了

    C#(.NET Framework)では、マルチスレッドで動作しているメソッドを抜けるには「Thread.Abort()」を実行してThreadAbortExceptionを発生させます。C#では原則として常にこの例外が発生しますが、Javaの場合、ループにSleep()がないと「InterruptedExceptionは到達不可能」というエラーが出てコンパイルができません。JavaでSleepを用意しない場合のループの抜け方はあるのでしょうか。

    • ベストアンサー
    • Java
  • Javaアプレットでゲーム作成するのにまとめたライブラリなどはあるので

    Javaアプレットでゲーム作成するのにまとめたライブラリなどはあるのでしょうか? 当方Javaは未経験です。 C++、Delphi、PHP、Physonでのプログラム経験はあり、 Delphiでも簡単なゲームを作った事が有りますし、C++で3Dゲーム作成・WindowsAPIでもDirectXでもゲームを作った事があり、スクリプトエンジンの作成だったり、ゲームの基本的なループの取り方だったり、物理的な描写の方法とかは大丈夫です。 今回WEBに埋め込めるJavaAppletで簡単な2Dゲームを作ろうと思い、DXライブラリのように必要な関数をまとめたライブラリや解説しているサイトを検索してみたのですが見つからず… そのような物ってJavaにもあるのでしょうか? 図形描写、画像描写、オフスクリーン等…主に描写関係の物のライブラリがあれば大感激です。 総合開発環境もEclipseかNetBeansか悩んでいるのですが、やはりまだJavaの開発ではEclipseが優秀でしょうか?

  • javaでアプレットを使用していますが、

    javaでアプレットを使用しています。 startメソッドでkicker.start();しているのに、 stopメソッドではkicker=null;はしているものの、 kicker.stop();は推奨されていません。 これで開始されたスレッドが停止するのでしょうか?

  • JAVAのアプレットって?

    JAVAのアプレットとスクリプトの違いを教えてください。 JAVAのアプレットはスクリプトをコンパイルしてバイナリ-に変えたものと理解していいんでしょうか。何が違うのでしょうか。 またサバープレットでしたっけ(サーバーなんとか)、あれはどう違うのでしょうか。 それから、JAVAプログラムをWEBに組むための開発環境を整えるにはどのようなものが必要なのでしょうか、それはフリーなんですか? よく理解していないので変な質問ですみません。 こちら、UNIX、C,PERL、FORTRAN等はかなり詳しいと思っているけどWEB開発には縁のない人間です。

  • JAVAについて

    WEBプログラムに興味がありますが、現在、HTMLとビルダーが使いこなせるようになったので、Dreamweaverを習っています。 次にJAVAを勧められましたが、コンピュータの知識も必要なようで、難しいのでしょうか?ちょっと悩んでいます。 スクールに通っていますがJAVAって、スクールだけで理解できるのでしょうか? コンピュータに触ったことや、初歩的な知識もないので、習いたいのですが、不安でもあります。 JAVAを習われた方、お教えください。

  • java plug-in警告

    先ほど「java」というワードの入ったアプリケーションをアンインストールして、javaのサイトで新しくインストールしたのですが、javaがうまく動作しません。 例えばYahoo!のゲームを開こうとすると、 『java plug-in警告  このHTMLページのアプレットでは、現在ブラウザで使用されているものとは異なるバージョンのjavaが必要です。アプレットをこのHTMLページで実行するには、新しいブラウザセッションが必要です。Netscapeブラウザセッションをすべて閉じ、新しいブラウザセッションでHTMLページを実行してください。』 と表示され、「はい」を選択するとウインドウには 「JAVA Plug-inがJRE衝突を検出しました。」と表示され、新しいウインドウが出ます。 新しいウインドウにはゲームの部屋が表示されるのですが、 「ユーザーIDの認証に失敗したためYahoo!ゲームにログインできません。」と表示されゲームをすることはできません。 javaを使ったチャットでも入室などは出来るものの、同じような(警告が出て、「はい」を選択すると新しいウインドウが出る)現象が起きます。 これはどうすれば改善できるでしょうか? OSはWindowsXPで、アンインストールしたものの名称は忘れてしまったのですが、「java」というワードの入ったものを2つアンインストールしました。 Java Plug-inの問題なのかなとは思うのですがどうすればいいのかわかりません。 何かアドバイスお願いします。

    • ベストアンサー
    • Java
  • 「UIスレッド」「マルチスレッド」の違い

    Androidで、「UIスレッド」「マルチスレッド」の違い、を教えてください。 ■下記理解で合ってるでしょうか? Androidは、「シングルスレッド」の「UIスレッド」モデルなので、それを「マルチスレッド」で動かそうとすると、「ワーカースレッド」で処理する必要がある ・「マルチスレッド」=「マルチタスク」? ・「UIスレッド」とは、メインスレッドが「GUI (グラフィカルユーザーインターフェイス) 処理」を行うものを指す? ・つまり、「Android」=「UIスレッド」? ・「UIスレッド」って何の用語? Androidに特化した用語? それともJAVAの用語? あるいはそれ以外?

    • ベストアンサー
    • Java
  • C言語でゲーム作り テトリス

     忙しい中失礼します。愚問過ぎて済みませんが・・・  今C言語に興味が沸いて来て、ゲームを作りたい、と思っています。  最終的にはC言語を駆使してテトリスを作りたい、と思っています。  あの、アーケードゲームにあるやつ(ブロックの絵があり、カーソルスティック?でブロックの方向を変えて等)、そのまま作りたい、と思っています。  可能でしょうか?やはりC++言語は必要になってくるのでしょうか?  要はC、またはC++(←出来ればこの2言語まででテトリスゲームを作成したい)等、Cに関する言語を使って、ゲームを完成させたい、と思っているのです。  開発環境はWindows XP Home Edition  C言語:http://www.codegear.com/jp/downloads/free/cppbuilder  にあります、Borland C++Compiler / Turbo Debugger  を使っています。  知らない言語を学ぶ場合、まずはウェブサイトを通して学びたい、と思っています。  なので、参照となるURLがあればご提示願います。  結局本だと相性があるので・・・。まあ、ウェブサイトもそうですが、お金がかからない・・・という時点でウェブサイトを探したい、と思っているのです。  その後必要な本を探す、という手立てで考えています。  宜しければ教えて下さい。お願いします。  下記のURLを参照してからこの質問を書き込みました:  http://oshiete1.goo.ne.jp/qa1601586.html  http://oshiete1.goo.ne.jp/qa2586359.html  また、最終的にテトリスゲームなので、  ステップ1:C言語でじゃんけんゲームを作る必要有、で言語はC言語のみで十分  ステップ2:じゃんけんゲームでグラフィックを次に付け足す、言語はC言語で作成可、Graphic?関数を使う必要有  みたいな、手順を踏んでいこうと思っています。先ずは小さなものから・・・始めていこう、と思っています。

  • MacでJavaゲーム作り JJEdit

    現在MacOSでJavaの2Dゲームを作ろうとしています。 そのためにJJeditをダウンロードしたのですが、JJEditのみでゲームの作成・試行はできるのでしょうか?他になにかJava関連のソフトが必要なのでしょうか? 一応、文字列を表示するなどの簡単なプログラムを組んでコンパイル・実行するのには成功しましたが… また、ゲームはアプレット形式にしたいのですが、JJEditとMacOSの機能だけでアプレットを作成することはできますか?ネットや参考書も数冊調べたのですが、たいていWindowsでの作成方法しかのってなかったり詳しくのってなかったりだったので、できたら方法を教えていただきたいです。

    • ベストアンサー
    • Java
  • UTF-8 TeraTermPro で javaをするにはどうしたらよいのでしょうか

    javaをつい先日からはじめた超初心者です。(javaに関しては) そこで、プログラムがのっている参考書片手にそのまま写して実行させたのですがエラー??で何もできません。 友人に聞いても、そのまま実行すればできる。しか言いません。 授業でもいづれ必要になってくるのでこのままにしておくわけにはいかないのです・・・ 一応、こんな風になりました↓ import java.awt.*; import java.applet.*; public class WebApplet extends Applet{ public void paint(Graphics g){ String myString; myString="簡単なアプレット"; g.drawString(myString,50,50); } } <HTML> <HEAD>実験</HEAD> <BODY> <APPLET CODE ="WebApplet.class"width="190"height="90"> </APPLET> </BODY> </HTML> で、appletviewer WebApplet.HTMLと実行すると Exception in thread "main" java.lang.InternalError: Can't connect to X11 window server using・・・・・・・ と実行できないのです。 どなたか、教えてください。 個人で調べてみたのですが、さっぱりわかりません!! よろしくお願いします!!

    • ベストアンサー
    • Java