Javaで作るスタンドアローンゲーム

■ このスレッドは過去ログ倉庫に格納されています
1名前は開発中のものです。
垢版 |
2012/12/27(木) 16:04:18.62ID:rl+qGRHn
スレタイはアプレットとの対比的な意味と考えてください。
Javaでのゲーム開発は賛否ありますが、国外では割と盛んになってきているように思います。
裏を返せば日本語だけでは情報が得辛い状況であり、寂しく開発してる人が多いのでは・・・。

関連スレ
JAVAアプリでゲーム
http://toro.2ch.net/test/read.cgi/gamedev/1033926010/


参考になりそうなサイト
・どのイメージタイプを使うべき?
http://weblogs.java.net/blog/chet/archive/2004/08/toolkitbuffered.html
・弱点と言われる?ベクタグラフィックス関連の改善
http://docs.oracle.com/javase/1.5.0/docs/guide/2d/flags.html
・大量のソースコードを公開して下さっている国内サイト
http://aidiary.hatenablog.com/entry/20040918/1251373370
・Java 2D games tutorial
http://zetcode.com/tutorials/javagamestutorial/
・出入りが最も盛んな?フォーラム
http://www.java-gaming.org/index.php
・スプライトシートの切り方等(国内)
http://sky.geocities.jp/kmaedam/java2/java2.htm

動画
3D Game Programming tutorial
http://www.youtube.com/watch?v=iH1xpfOBN6M
2015/04/02(木) 00:51:21.72ID:Kd4ACYgu
ゲームの進行を管理するクラスが必要だなー。
データをセーブロードするクラスも必要だな。
データそのもののクラスがあったほうがいいな。
プレイヤーというクラスもあるな。
アイテムというクラスを作ったら、
プレイヤーにアイテムのリストを持たせる?
いやアイテムボックスというクラスを作って、
それをプレイヤーに持たせるか。
満タン判別とか簡単に引っ張って来られたら便利だなー…
あ、データクラスに含ませてセーブしたほうがいいな。
ロードしたらアイテムボックスにリストをセットしたいな。

…って感じで、まずは想像を膨らませながら
具体的に設計したら後々楽だよ。
461名前は開発中のものです。
垢版 |
2015/04/03(金) 01:10:13.49ID:InpPEbYz
ゲームの進行を管理するクラスが必要だなー。
データをセーブロードするクラスも必要だな。
データそのもののクラスがあったほうがいいな

から下は既存のコードを流用しようと思っていますので再設計などは他聞問題ないと思います。
http://www012.upp.so-net.ne.jp/flab/javatuto/javatuto8.html なものを見つけたので今勉強中。
もっと何かいいのがあれば教えてもらえればうれしいです。
stack exchangeやgamedev漁るのちと疲れてきた。
2015/04/03(金) 04:56:34.09ID:lkqZWAUT
シーン単位の設計とかそういう設計指針立てるのが苦手ってことなら、
ゲームエンジン使えば?って話になっちゃうかも

あと遷移図とか画面構成イメージとか描いたりしてる?
コード書く→リファクタリングばっかりでもいいけど、
適当に手書きで整理してみるだけでも違うもんだよ
2015/04/03(金) 17:48:28.80ID:chj1QkVN
シーンの遷移が分からないってはなしだろ?
シーンのインスタンスをstaticとかシングルトンにすれば
そのインスタンスがもってるプロパティもイモヅル式にどこからでもアクセスできる

https://pastebin.mozilla.org/8828264
2015/04/05(日) 16:43:37.56ID:FoWp8ODA
期限が短すぎたので上げなおし
https://pastebin.mozilla.org/8828750
465名前は開発中のものです。
垢版 |
2015/04/06(月) 18:56:08.99ID:/THq8Fdv
継承や関連性はなんとなく図を描いている所。
DFDしかちゃんと出来なくて困る。
コード見ましたところ、dispose関数がありますが、そのシーンを廃棄するのでしょうか?

基本的な流れとしては、
GameStateManagerでgame options, sound options, video optionsそしてmain game突入まで管理する。
STARTは単に"Presse Start"を表示させるだけにして、後でその他のoptionsをリストに追加する。

PLAYに(遷移:読み方知らん)かんい?したらPlayStateManagerに移る。
PlayStateManagerではキャラ移動,店での買い物,メニュー画面を開いてアイテム確認や装備変更等をそれぞれstateで管理する。
例えばPlayStateでキャラ移動, MenuStateでメニュー画面を開いてアイテム確認や装備変更等に分けている。

これで各state特有の処理は出来るのだが、ここで一つ問題が発生する。
問題とは、どのようしてリストに収納されている各stateで”GameStateに無い関数”にアクセスできるか?です。

例:
PlayStateでキャラ(player)を移動させているときにアイテム確認の為にメニューを開いた。
その時PlayStateManagerにあるsetPlayer(Player p)の関数を呼び参照準備完了。
そしてPlayStateManagerでstateの移行を実行しPlayStateからMenuStateに移行する。
その後MenuStateでPlayStateManagerにあるgetPlayer()を呼び参照取得。そしてアイテムの使用や廃棄等の操作をした後再びPlayStateに移行する。
その時PlayStateManagerにあるsetPlayer(Player p)の関数を呼び参照準備完了。
その後PlayStateにあるsetPlayer(Player p)を呼んで参照のセットを計る。

しかし、その関数はGameStateに記述されていないから参照できない。

goto的になっちゃんだよな〜


https://pastebin.mozilla.org/8828836
2015/04/06(月) 22:35:38.63ID:8cFcSghx
普通にGameStateをPlayStateにダウンキャストすればよいだけだろ
ダウンキャストしたくなければ、そもそもリストに詰めないことだ
467名前は開発中のものです。
垢版 |
2015/04/06(月) 23:40:08.53ID:/THq8Fdv
確かにダウンキャストすれば出来そうですが、それをしようとしたら各要所で条件分岐させなきゃならないし、
前呼んだ”javaで学ぶリファクタリング”の本でDCは余り良い手ではないと書いてあったので。
2015/04/07(火) 00:45:35.73ID:iKbQeSub
アホガキまるだしでうんざりする
2015/04/07(火) 02:22:24.35ID:HEtwadqH
そういえば春だね
470名前は開発中のものです。
垢版 |
2015/08/03(月) 09:32:43.57ID:kSwbA9Fz
Thread.sleep() を呼び出すと15ミリ秒も処理が帰ってこないという話があり

http://dobon.net/vb/bbs/log3-23/14028.html

最高精度の 1 ミリ秒にできたとしても
UI スレッド、描画スレッド、AIスレッドなどを同期させながら 60fps 出したいときに
スレッド切り替えるたびに 1 ミリ秒かかっていたのでは致命的だ

この辺みんなどうやってクリアしていますか?
2015/08/03(月) 11:20:15.35ID:kSwbA9Fz
src.zip, Thread.java, sleep(millis, nanos):

if (nanos >= 500000 || (nanos != 0 && millis == 0)) {
   millis++;
}

sleep(millis);

本当に丸められていた・・・
2015/08/04(火) 17:44:09.45ID:YB5Xtaqw
java.util.concurrent.lock.LockSupport.parkNanos(1L);

も15ミリ秒待たされた。
新しめの win 8.1 マシンでさえこんな状況
2015/08/05(水) 13:18:01.99ID:Kox9LHwR
>>470
同期させるならsleepのタイムアウト待つんじゃなくて割り込みかけない?
もうちょっとちゃんとするならjava.util.concurrentのCyclicBarrierやらCountDownLatchやらPhaser使うんじゃない?

>>472
うちの環境だとThread.sleep(1);やjava.util.concurrent.locks.LockSupport.parkNanos(1L);は約1msで戻ってくるけどなー
Windows 8.1 64bit/Java8/Pentium G6950
Windows 8.1 32bit/Java8/Atom Z3735F

ideoneも約1msだった
http://ideone.com/Hlp4cu
2015/08/05(水) 17:25:15.81ID:5iKsQnJc
>>473
アクティブレンダリングの待ちが念頭にあったから sleep と考えていたけど
確かに同期させるという用途なら wait / notify とかが良いかも。

そちらでは1ミリ秒の精度あるのですね。
環境によってばらつきがあるのかな?
parkNanos(1L) はさすがに1ナノ秒の精度は期待できないにしても
マイクロ秒単位の精度はあってほしかったですが
2015/08/22(土) 23:33:39.53ID:+Rszj5Wc
>>470
リンク先の内容って2005年の.NET C#の話でしょ?
なんでJava板で?・・・
System.nanoTime()使えばナノ秒単位の精度が出るでしょ。
http://aidiary.hatenablog.com/entry/20070429/1251463673
2015/08/23(日) 19:31:06.35ID:7bDmMhl8
nanoTime() は確かに 100 ナノ秒単位くらいの精度がでるかもしれないが
それは時間を「測る」ほうの精度で、sleep で「待つ」ほうの精度はもっと悪い。

リンク先を貼ったのは探すのをさぼってしまったからだけど、
Java で、最近の Windows でも状況は似たり寄ったりなのは >>471,472 の通り

ぬるぬる動くゲームを作ろうとしていて、Thread.sleep() を呼んでいる場合は、
けっこうオーバーヘッドになっているかもしれません
2015/08/24(月) 14:14:06.17ID:qQPD7DVJ
そりゃ寝てる間に別のタスク呼んでるんだから
2015/08/24(月) 18:32:26.01ID:Gp2n+Lvh
sleep(millis, nanos) とあるから、ナノ秒単位で寝かせられる
と思うじゃん、
2016/08/05(金) 20:21:48.53ID:Rrym3J/u
JavaFXってグラボのアクセラレーションかかるのかな?
って誰もいないかw
PCで携帯スマホのOpenGLくらいのパフォーマンスは出そうなんだが…
480名前は開発中のものです。
垢版 |
2017/02/03(金) 02:22:29.13ID:0I8xjrI1
age
481名前は開発中のものです。
垢版 |
2017/03/22(水) 20:19:40.48ID:2x3cQ72L
http://video.fc2.com/mycontents.php
2017/06/04(日) 16:37:34.00ID:uG346vtn
新板age
483名前は開発中のものです。
垢版 |
2017/12/31(日) 19:47:58.74ID:/rN76OKL
簡単にお金が稼げる方法興味ある人だけ見てください。

グーグル検索⇒『来島のモノノリウエ』

SCVG4A16FM
2018/02/17(土) 07:34:01.81ID:G/oBdhuK
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況