トップページgamedev
987コメント388KB

Javaでゲーム作成 2本目

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2005/10/27(木) 09:43:50ID:dzSvRQXE
Javaでのゲーム作成について情報交換をするスレです。
ゲーム作成以外の話題はム板(http://pc8.2ch.net/tech/)、
他言語に関する話題は他スレでお願いします。

前スレ
JAVAでゲーム作成
http://pc8.2ch.net/test/read.cgi/gamedev/1074347252/

テンプレは>>1->>10あたりを参照
0252名前は開発中のものです。2006/03/18(土) 23:25:32ID:xwepgm3J
鯖アプリじゃないんだから物理メモリの割合は意味がないぞ
メモリ増えればGCにかかる時間は増えるわけで、ゲームで使用するメモリ量とかちゃんと計算してないの?
それだとGCとかでかたつかないか?
0253名前は開発中のものです。2006/03/19(日) 00:20:58ID:jd/0wDmz
単位時間に対するGC率が増えるのって操作性に影響でないの?
0254名前は開発中のものです。2006/03/19(日) 00:26:14ID:UecNa0OI
100秒ごとに1秒とまるGCと1秒ごとに0.01秒とまるGCとどっちがゲーム向きかということだ

それにわりあいでやられたら世代の調整とかおわっとる
GCのアルゴリズムの種類だって調整するのは常識なんだし
アプリごとに最適な値は大きくことなる
0255名前は開発中のものです。2006/03/19(日) 00:34:10ID:jd/0wDmz
Mapにキャッシュするサイズ+演算用のサイズで考えればいいんだよね?
最適値というのは演算分のヒープサイズがどのくらいのものなの?
0256名前は開発中のものです。2006/03/19(日) 00:50:29ID:UecNa0OI
GCの頻度とか使用量とかチェックしてないの?
-verbose:gcオプションいれてごらん

もっと詳しく見たいのならプロファイラで見るのが一番だが
まずはGC部分に注力するならこれが見やすいだろうね
0257名前は開発中のものです。2006/03/19(日) 00:58:12ID:jd/0wDmz
>>256
OK、チャレンジしてみます。
0258名前は開発中のものです。2006/03/31(金) 14:22:07ID:5bd8BEHK
当方、子供の頃にZ80アセンブラやBASICでゲームプログラムして遊んでいました。
まぁアルゴリズムとかは結構わかります。

今頃になって、再びプログラムを趣味にしてみようと思いJavaを選択しました。
シンタックスやOOPの基本的なことは大丈夫そうです。
Eclipseインストールしてちょっと感激。

で、問題なのはすこしでもDirectDrawとかFPS管理とか、ちょっとでもシステム寄りの
部分になると全然わからないのです。
いくつかソースを読んでみますと、各人でわりと実装が違うようですね。
Java5ではどんな方法がよいのかなど、参考になるものは無いでしょうか。
0259名前は開発中のものです。2006/03/32(土) 00:20:26ID:dul/XEV4
>>258
そういう人かなりいるよね
ゲームは問題なく作れるけどウインドウアプリになるとmainからはじまらないので
わけがわからない、と

Javaは一応mainから常に始まるしまだ楽なほう
>>1-11あたりはまずよんでみた?
0260名前は開発中のものです。2006/03/32(土) 01:27:44ID:liMA6BYm
3/32 記念パピコ
0261名前は開発中のものです。2006/04/04(火) 13:36:48ID:oy1ylhQ+
eclipseってそんなに良いか?【エクリプス】
http://pc8.2ch.net/test/read.cgi/tech/1099300344/274-
> 280 名前:デフォルトの名無しさん[sage] 投稿日:2006/04/04(火) 09:53:59
> >>276
> ほんとかよ。
> 2Dゲームの背景にタイルを敷き詰める処理を作ってみたが明らかに遅いぞ。
> これと言って変な処理は入れてないが、5fps出ない。
>
透過pngをImageIO.read()で読み込んで
Graphics.drawImage(Image, int, int, ImageObserver)で表示すると確かに重くなるが
上の奴はこれと同じ状況なのだろうか?
0262名前は開発中のものです。2006/04/04(火) 13:41:10ID:h6nMnOJP
アルファブレンドだと重いけどただの色抜きなら重くはないよ
5.0ではBufferedImageのままなにもしなくてもそれなりにきくようになってるし
5fpsってありえんね

そもそもソフトウェア描画でもVGAで30fpsはでそうだが
0263名前は開発中のものです。2006/04/06(木) 12:59:32ID:kzyZx0iO
iアプリを作ろうと思って勉強してるんですが、画像表示で躓いています。

サンプルではちゃんと表示されるんですが、画像を自作のものと入れ替えるとIO.connectionexception
ってのがでるんです。サンプルと同じGIFでサイズも同じにしてあるんですが。自作画像の方に問題が
あるんでしょうか。
0264名前は開発中のものです。2006/04/06(木) 14:20:33ID:mP0GEHd4
>>263
動かないのが実機かPC上かを明記してもらえるとありがたい
サンプルがどんな処理を行うアプリケーションなのかも関係してくる
情報が少なすぎるのでエスパー回答してみるが、

・ファイルが壊れている
終端コードが無かったり、BMPなのに拡張子だけGIFにしたとか
試しにネット上に転がってる別のGIFファイルでテストしてみては?

・ファイル名の指定が間違っている
サンプルと同じファイル名にしてテストしてみては?
大文字小文字、全角半角の違いがないか気をつけて

・容量がオーバーしている
同じサイズというのはピクセル数のことだと思いますが、
バイト数が上限を超えていないか確認してください。
0265名前は開発中のものです。2006/04/06(木) 17:15:27ID:kzyZx0iO
適当に書いてすいません。エラーがでるのはDoja3.5のPC上で、ビルドした後実行すると出ます。
サンプルは簡単なもので、画面にタイトルを表示するだけのものです。十枚ある画像を取り込んで
そのうちの一つを画面に表示するものです。

ファイルが壊れている>壊れているかは私に判断できないんですが、自作の画像はwindowsのペイ
ントで書いて、0という名前で(サンプルで表示されるのが0.gif)形式をGIFにしています。

容量がオーバー>サンプルは色付きですが、自作のものは白と黒のみなのでサイズは小さいです。


いろいろ試してみたんですが、サイズの違う画像の時に一回エラーがでずにちゃんと表示されて、
その画像の大きさをいろいろ変えたんてみても上手く表示されました。やはり元の画像が悪いので
しょうか
0266名前は開発中のものです。2006/04/06(木) 17:20:56ID:kzyZx0iO
あともう一つ。一回エラーが出た後、画像をもとのサンプルの画像にしても、やはり
エラーが出たままなんです。
02672632006/04/08(土) 17:16:17ID:+i1+4exU
ソースも画像も変えてないのに何回かやったら表示されるようになりました。
お騒がせしました。264さんありがとうございます。
0268名前は開発中のものです。2006/04/08(土) 21:22:15ID:MsUK1t+N
何回かやったらってありえね
ビルドしてないとか
0269名前は開発中のものです。2006/04/09(日) 20:57:47ID:S2mcpQ+R
俺の場合、PCを再起動してみたら正常に動いたってことはたまにある。
メモリが不足してたのかな?
02702632006/04/09(日) 23:11:53ID:TOyrHTNi
原因はわからないです。さんぷるの画像の内、一枚だけ入れ替えたらうまくいったんで、
一枚ずつ入れ替えていったらエラーがでなくなりました。言われてみれば一回電源切った
あとかも
0271名前は開発中のものです。2006/04/10(月) 02:20:42ID:tKGbAe46
>>270
わかんないならもうレスしなくていいよ
0272名前は開発中のものです。2006/04/15(土) 01:23:46ID:sf5nUDiw
そのくらいのサンプル段階ならソース晒してもいいでしょう
アップローダにアップしては?
http://gamdev.org/up/upload.php
短いソースならこのスレに書き込んでもいいだろうし。
0273名前は開発中のものです。2006/04/15(土) 10:51:05ID:0dEqMUag
この板寂しいからレスしてくれよ・・・
書き込みがあるとわくわくする
0274名前は開発中のものです。2006/04/15(土) 11:44:35ID:HLCHM0Al
最近アプレットは流行らないよな。
このスレはJavaアプリのこと?アプレットのこと?
サーバ側の話?J2MEのこと? なんでもあり?

それよりなにより、漏れは女とJavaTea飲みたい。
0275名前は開発中のものです。2006/04/15(土) 16:50:42ID:hisjoupK
MEは実装依存度が高すぎるからそちらのスレで
基本はJavaアプリだろうね

アプレットは社内用リッチクライアント用途ではかなりいいけど
アプリと違って起動時のパラメータとかチューニングが限界がある

アプリによってメモリやGC等の設定は細かくかえるのが普通だから
ゲーム用ではさほど・・
フルスクリーンとかファイルアクセスとか限界もあるしね

手軽に配布ということでフラッシュ程度でいいのならフラッシュで作ればいいし
JavaでやりたいのならWebStartにしたほうがまし

JRE同梱してアプリにしたほうがいいよ
0276名前は開発中のものです。2006/04/15(土) 18:40:50ID:nQHtm5rD
某スレに幾つかアプレットの2Dゲームが上がってるけど、
速度的には全然遜色ないな。
アプレットでも結構作れる事は作れるけど、開発環境などその他諸々の点で
フラッシュの方が断然上。
アプレットでゲームを作るメリットは何もないよ。
0277名前は開発中のものです。2006/04/15(土) 18:57:48ID:AcPPvKEl
無料でまともなFlash開発環境があればいいんだけどな
0278名前は開発中のものです。2006/04/15(土) 19:10:16ID:Vc+Xe/9j
ActionScript経由でFlashの機能は全部表現できるんだよね?
だったらActionScript3.0がパブリッシュ(コンパイルの意)出来る環境があれば
あとはAPIリファレンスを手に入れるだけで何とかなりそう
0279名前は開発中のものです。2006/04/15(土) 21:04:45ID:hisjoupK
>>276
配布を考えればの間違いでは?
開発環境はアプレットのほうがどこをどう考えても上

アクションスクリプトきっついよ
0280名前は開発中のものです。2006/04/15(土) 22:36:11ID:lpccgP2z
>>276
ASの開発しづらさを知ってて言ってるのか?
マジキツイっての、アプレットと作り比べてみろよ。
0281名前は開発中のものです。2006/04/21(金) 18:53:51ID:7zcsjMK6
Java使えればゲーム以外にも仕事で役立ちそう
Flashは覚えても応用範囲が狭そう
0282名前は開発中のものです。2006/04/26(水) 22:50:39ID:h83t4bfk
>>281
俺はC→AS→Javaだったよ
ASだけは遊びで覚えたんだけど、OO開発の基礎は自然と身についた
MovieClipの仕様がいいんだろうな
0283名前は開発中のものです。2006/04/29(土) 05:29:13ID:e8m8pSlv
みなさんゲーム作ったんですか?
ここじゃ晒さないんですか?
0284名前は開発中のものです。2006/05/01(月) 20:40:07ID:nUaQGh3S
フリーのは、ふりーむ!とベクターで公開してる。
有料のはDLsite.com等で販売中。
0285名前は開発中のものです。2006/05/07(日) 00:14:23ID:W2WiM6Ar
知っている方がいらっしゃったら教えてほしいことがあります。

以前j2re1.4.1_02でフルスクリーンとウィンドウモードを切り替えるものを作ったのですが
1.5.0_06では解像度の変更が正しくうごかないという事に当たりました。

手順は
1)フルスクリーンにする
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
device = ge.getDefaultScreenDevice();
DisplayMode fullscreen = new DisplayMode(640, 480, 32, DisplayMode.REFRESH_RATE_UNKNOWN);
device.setFullScreenWindow(fullscreen);

2)排他を解除しウィンドウモードにする

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
device = ge.getDefaultScreenDevice();
device.setFullScreenWindow(null);

この後で1)を行った場合、1.4.1_02ではフルスクリーンで解像度が変わったのですが
1.5.0_06ではフルスクリーンにはなるが解像度が変わらないということになりました。

何かご存知の方がいらっしゃったらお願いします。
02862852006/05/07(日) 00:27:33ID:W2WiM6Ar
書き忘れていました。
1)では決まったフレームをフルスクリーン指定してます。

device.setFullScreenWindow(frame);

0287名前は開発中のものです。2006/05/07(日) 02:17:45ID:5a9PuC3k
元々フルスクリーンと行き来するとリークが発生するから起動時に選択させるほうがいい

ところで意味が分かりにくいのだが
1>2>1ってこと?
02882852006/05/07(日) 02:57:40ID:W2WiM6Ar
>287

>元々フルスクリーンと行き来するとリークが発生するから起動時に選択させるほうがいい

ありがとうございます、その方向で考えてみます。

>1>2>1ってこと?

そうです。
0289名前は開発中のものです。2006/05/07(日) 11:37:59ID:5a9PuC3k
いまやってみたけど画面ちゃんと切り替わったよ
02902852006/05/07(日) 14:11:36ID:W2WiM6Ar
>289

j2re1.4.1_02では、繰り返し切り替えたときにちゃんと解像度も一緒に変わったのですが
1.5.0_06ではフルスクリーンにはなりましたが、二度目以降のフルスクリーン切り替えで
解像度が変わりませんでした。(一回目はちゃんと解像度が変わるようです。)

もしうまく切り替わったのでしたらソース、上げていただけませんでしょうか?
0291名前は開発中のものです。2006/05/07(日) 14:15:43ID:5a9PuC3k
こんなかんじ

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice device = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = device.getDefaultConfiguration();
DisplayMode mode = new DisplayMode(640, 480, 32, DisplayMode.REFRESH_RATE_UNKNOWN);

JFrame frame = new JFrame(gc);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
device.setFullScreenWindow(frame);
device.setDisplayMode(mode);

Thread.sleep(1000);

device.setFullScreenWindow(null);

Thread.sleep(1000);

device.setFullScreenWindow(frame);
device.setDisplayMode(mode);
0292名前は開発中のものです。2006/05/07(日) 14:17:41ID:5a9PuC3k
注意事項としてウインドウモードとフルスクリーンモードで
色深度が違う場合テクスチャキャッシュとか全部作り直してね

異なる色深度で転送を行うとすごく遅くなる
02932852006/05/07(日) 14:20:50ID:W2WiM6Ar
ソース、ありがとうございます。
確認してみます。
02942852006/05/07(日) 15:30:17ID:W2WiM6Ar
>292
先ほどのソースありがとうございました。
フレームの非表示をフルスクリーンとウィンドウ毎にきりかえりため
毎度フレームをdisposeし、再作成していたが原因でした。
ところで、上記ソースのやり方でフルスクリーンのときにだけ
frame.setUndecorated(true);
を有効にしたいとおもい、いくつか試しているのですがうまくいっていません。
作成していたソースを載せておきますので、再度も一度だけご指摘いただけますでしょか?
02952852006/05/07(日) 15:33:08ID:W2WiM6Ar
以下がソースです。

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice device = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = device.getDefaultConfiguration();
DisplayMode mode = new DisplayMode(800, 600, 32, DisplayMode.REFRESH_RATE_UNKNOWN);

JFrame frame = new JFrame(gc);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

System.out.println("初期表示");

frame.setSize(800, 600);

frame.setResizable(false);
frame.setLocationRelativeTo(null);//中央配置
frame.setVisible(true);

Thread.sleep(10000);
System.out.println("フルスクリーンへ");
//frame.setUndecorated(true);//フレームの非表示
device.setFullScreenWindow(frame);
device.setDisplayMode(mode);

Thread.sleep(10000);
System.out.println("ウィンドウモードへ");
device.setFullScreenWindow(null);
0296名前は開発中のものです。2006/05/07(日) 16:01:17ID:5a9PuC3k
>このフレームの装飾の有効化と無効化を切り替えます。
>フレームが表示されていない時にだけ呼び出すことができます。

マニュアルどおりだと思うんだが

タイトルバーの表示、非表示はフレームが表示されているときは駄目
一度非表示にする必要があるよ
0297名前は開発中のものです。2006/05/07(日) 16:03:32ID:5a9PuC3k
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice device = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = device.getDefaultConfiguration();
DisplayMode mode = new DisplayMode(640, 480, 32, DisplayMode.REFRESH_RATE_UNKNOWN);

JFrame frame = new JFrame(gc);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setUndecorated(true);
device.setFullScreenWindow(frame);
device.setDisplayMode(mode);

for(int i=0; i<10 ;i++){
Thread.sleep(1000/2);

//ウインドウモード
frame.setVisible(false);
frame.dispose();
frame.setUndecorated(false);
device.setFullScreenWindow(null);
frame.setVisible(true);

Thread.sleep(1000/2);

//フルスクリーンモード
frame.setVisible(false);
frame.dispose();
frame.setUndecorated(true);
device.setFullScreenWindow(frame);
}
0298名前は開発中のものです。2006/05/07(日) 16:06:27ID:5a9PuC3k
あ、最後フルスクリーンモードで終わってるんでALT+F4な
02992852006/05/07(日) 17:03:17ID:W2WiM6Ar
丁寧な反応、本当にありがとうございます。
setVisible(false); の後でdisposeが必要なのですね、
わからずに数ヶ月引っかかっていました。
297でいただいたサンプルなのですが、最後のフルスクリーンの状態で
解像度が640, 480ではなく元に戻っていませんでしょうか?
これを何とかできないかなと
//フルスクリーンモード
frame.setVisible(false);
frame.dispose();
frame.setUndecorated(true);
device.setFullScreenWindow(frame);
device.setDisplayMode(mode);
としてみたのですが、今度はウィンドウモードの解像度が戻らなくなってしまいました。
これが一番最初の質問と同じ状態のようです。
0300名前は開発中のものです。2006/05/07(日) 17:32:54ID:5a9PuC3k
ウインドウモードのタイミングが指定がおかしかった


//ウインドウモード
device.setFullScreenWindow(null);
frame.setVisible(false);
frame.dispose();
frame.setUndecorated(false);
// device.setFullScreenWindow(null);
frame.setVisible(true);

としてごらん
03012852006/05/07(日) 18:08:49ID:W2WiM6Ar
ありがとうございます。
切り替え動くようになりました。
動くようになったので調子に乗って切り替え100回とか試してみたら
java.lang.OutOfMemoryError
がでてきました。最初におっしゃってたように、あまり頻繁に切り替えるもんじゃないって事なんですね。
0302名前は開発中のものです。2006/05/09(火) 15:25:13ID:ii7Fciy7
ソース見直してたらstaticでいいのにインスタンス生成してる部分が結構あった
インスタンス生成よりstaticの方が軽い、速いかな?
0303名前は開発中のものです。2006/05/09(火) 16:50:48ID:BdqQPpYt
Java的にはstaticはできるだけ使わないほうがいいらしいけど
0304名前は開発中のものです。2006/05/09(火) 17:54:55ID:oSIIzbHZ
オブジェクトはプールしないで積極的に生成破棄してくれ
世代別GCとの相性を考えるとこれ
0305名前は開発中のものです。2006/05/09(火) 22:27:04ID:p8kDUjWo
>>303
実装するにあたって、static変数が必要なデザインパターンもあったんじゃね。
0306名前は開発中のものです。2006/05/09(火) 23:23:28ID:j9harUZK
>>303
そういう覚え方はよくないよ。勉強しなおしたほうがいい。
0307名前は開発中のものです。2006/05/16(火) 11:01:52ID:oJeJmTzF
ドラクエってさ、コマンド選ぶと前のコマンドがバックに表示されたまま
次のコマンドが出るじゃん それでキャンセルで現在のウィンドウが消えて
前のコマンドに参照が戻るよね
あれってそれぞれにバッファ用意してやるしかないかな?
たとえば道具→使う→誰に なら
道具を表示するバッファ
道具、使うを表示するバッファ
道具、使う、誰にを表示するバッファ
みたいに
0308名前は開発中のものです。2006/05/16(火) 11:35:56ID:pNczDPI9
ファミコン時代にバッファがあったと思うか?
ひたすら上書き

ウインドウが消えたらアクティブになったウインドウの描画

それだけだよ
0309名前は開発中のものです。2006/05/16(火) 11:37:03ID:pNczDPI9
一応レイヤーという考え方もありだが、いまだとそっちのほうが楽だろ
それぞれウインドウ内のみの描画管理
画面全体の描画でそれらを適切に呼び出す
0310名前は開発中のものです。2006/05/20(土) 04:48:56ID:i7QcIrxX
>>308-309
遅くなったけどサンクス
なんとなく分かってきた

キャラやアイテムのリスト作るのが面倒臭いな・・・
存在してるキャラ、所持してるアイテムを調べてリストにして
多ければウィンドウをスクロールさせなきゃならぬ
面倒だけどがんばるか・・
0311名前は開発中のものです。2006/05/20(土) 09:04:00ID:R0av8b56
面倒か?
わからなければ先にUMLでもなんでもいいけど処理の手順を書いたほうがいい
0312名前は開発中のものです。2006/05/21(日) 05:45:05ID:BQPLtheI
処理を考えるのが一番面倒だ
きちんと順序立ててやってみるよ・・
0313名前は開発中のものです。2006/05/22(月) 04:54:34ID:rAUj867u
俺はデータモデルの設計が一番面倒だなぁ。
変更や拡張に強く、ネットワーク越しの同期の取りやすいデータモデルをとか考え出すとはまり込む。
03145072006/05/22(月) 19:16:41ID:KUql4eEY
Javaを最近勉強しはじました。
とりあえず簡単なゲームを作りたいと思っているのですがどれ位勉強すればいいですか?
0315名前は開発中のものです。2006/05/22(月) 19:27:29ID:bgWiXtf3
ゲーム作りで勉強すれば
そういう本最近多いし
0316名前は開発中のものです。2006/05/23(火) 14:28:37ID:qGRGm1GF
if else で100近く分岐しそう・・
激重かな
0317名前は開発中のものです。2006/05/23(火) 15:24:24ID:5zoiL+RS
>>316
どういう風に分岐させたいんだ?
0318名前は開発中のものです。2006/05/23(火) 15:30:17ID:nyPWq5Mq
100こくらいのifでおもくなるって10MHz切ってるマシンの人かな
0319名前は開発中のものです。2006/05/23(火) 22:43:16ID:qGRGm1GF
>>317
たとえばさ、魔法クラスがあって、そのメソッドに魔法No.をわたして
そのメソッド内で渡されたNo.によってswitchで分岐させるとか

話がswitchになっちゃったけどswitchは数しかつかえないんだよね、たしか
それ以外で識別したいならif elseしかないと思って

あと、変数は少ないけどメソッドがたくさんあるクラスのインスタンスを
100個くらいつくるとメモリがやばかったりするかな?
0320名前は開発中のものです。2006/05/23(火) 22:51:29ID:wlFUtSp+
class Magic
{
0321320はミス2006/05/23(火) 22:57:01ID:wlFUtSp+
abstract class Magic{
public abstract void perform();
}
みたいにして、個別の魔法はこれを継承するようにするとJavaらしくなるよね
実際にゲームを完成させる気ならこんなことしないだろうけど

メソッドはたくさんあっても問題なし
0322名前は開発中のものです。2006/05/23(火) 23:14:15ID:qo1KKw1q
デザインパターン立ち読みでもいいからおぼえとくといいぞ

制御とデータをわけるという考え方は
Cとか構造化言語までのものだ
0323名前は開発中のものです。2006/05/23(火) 23:18:59ID:qo1KKw1q
>>321
いや、ゲームでも普通はそういうプログラムを書く

それと識別させたいのならenumを使え
switchもつかえるし
0324名前は開発中のものです。2006/05/23(火) 23:34:50ID:qGRGm1GF
レスサンクス
おかげで設計ができてきた
enumすか・・あまり馴染みがないから学ぶよ

ところで>>321の4,5行目が素でわからない
アフォですまぬ
教えてもらっていい?
0325名前は開発中のものです。2006/05/24(水) 00:05:11ID:qo1KKw1q
ポリモーフィズムとかStateパターンとか
そのへんしらべてみるとわかるよ
0326名前は開発中のものです。2006/05/24(水) 00:29:52ID:0rz/nhQ6
おk、ゲーム作りながら勉強する
いろいろサンクス
0327名前は開発中のものです。2006/05/27(土) 11:28:27ID:MsTUcez+
VectorにStringとInteger入れて、取り出すときに
Integerの要素をStringでキャスト、変換したり
Stringの要素をIntegerでキャスト、変換したら
エラー出るかな 面倒くさいんでInteger、Stringで統一してるんだが

勉強すればわかることだけどもしよければレスちょうだい
0328名前は開発中のものです。2006/05/27(土) 11:38:38ID:EufEKVaf
それぞれIntegerとStringが対応してるんなら
class (名前)
{
public String getString();
public Integer getInteger();
}
みたいなクラスを作る

対応してないんだったら、String用のVectorとInteger用のVectorを別にする
0329名前は開発中のものです。2006/05/27(土) 11:49:40ID:ryxQUfnb
キャストはかならずクラスの関連性がないと無理
かならず数字を含む文字列ということであれば格納前に返還すればいいだけの話だが
この情報だけではどうしたいのかがわからない

あとゲームということは多少パフォーマンス気にすることも多いのだろうから
Swing部分使わないのならVectorよりはArrayListで

シングルスレッドならパフォーマンスはまずかわらんけどな
0330名前は開発中のものです。2006/05/27(土) 13:09:54ID:MsTUcez+
即&わざわざレス感謝
ArrayListの方がパフォーマンスいいのか・・・
大分Vector使ってコード組んじゃったから、今度からはそうしよう
RPGだからスレッドはマップのキャラ動かすのとアニメーションくらいしか使わないと思う

Vectorの指定された要素がIntegerかStringかで
変換、キャストしたのちifで分岐させて処理を分けたいと思ったんだけど
やっぱり元々のVectorを別にした方がわかりやすかった 対応してないし

話変わるけど、コマンドの実装が面倒だ・・
移動コマンド、アイテムコマンド、魔法コマンド、使用対象コマンド・・
それぞれにクラス作ってそのクラスのキーイベント処理メソッドを
現在のコマンドモードによって呼び分けなきゃならん
いい方法ないかな
0331名前は開発中のものです。2006/05/27(土) 13:39:56ID:8ehQx4Ia
よくわからんがキーイベントにゴリゴリ書いてるのか?
それならフレームワークの設計自体からやりなおしたほうがいいぞ
0332名前は開発中のものです。2006/05/27(土) 13:57:59ID:MsTUcez+
ゴリゴリ書いてる・・
とりあえず組んでみようとは思ったがマジで勉強が足りんらしい
チラ裏スマソでした
0333名前は開発中のものです。2006/05/27(土) 14:12:56ID:8ehQx4Ia
キーイベントではキーの入力フラグを上げ下げするだけ
そしてゲームのループ内でそのフラグを読み取る

これでおけ
0334名前は開発中のものです。2006/05/27(土) 14:23:34ID:MsTUcez+
ゲームループ内だとkeyTypedメソッドが呼ばれてから
時間差があるかもと思ってkeyTypedメソッドから
直接各コマンドクラスのメソッドを現在のコマンドモードで分岐させて呼んでた

ドラクエみたいなのを再現しようと思ってるんだがゲーム作りって難しいな
俺のゲーム作りが終わるまでJavaが生き残ってるといいんだけど・・

ここの住人はレベル高いね スレ汚しスマソでした
0335名前は開発中のものです。2006/05/27(土) 14:52:54ID:8ehQx4Ia
ループ内は60fpsとか固定でチェックするから問題ないよ

というか、普通のゲームはイベントで処理するところはほとんどないから
それを隠すためのフレームワークというかそんなもの

まず言語的にJavaがどうのこうのというよりゲームプログラミングに対しての
技術がちょっと足りないかなぁという感じがする

10~20年前だったらゲーム作りとかいろんな本で毎月雑誌に載ってたんだけどな

いまじゃ残ってるプログラム雑誌がなくなってるし、ユーザーが求めるものが
高すぎてギャップで苦しんでる人が多いのはつらい時代だな

とにかくメインループで取得して状態に応じてswitchで戦闘時なのか移動時なのか
キャンプコマンド中なのか分離するようにかけばおけ
0336名前は開発中のものです。2006/05/27(土) 17:41:03ID:MsTUcez+
ゲームの作り方か・・
一から設計見直すよ
マジで参考になった、ありがとう
0337名前は開発中のものです。2006/05/28(日) 16:35:03ID:su6FTHmr
C++だとエフェクト(爆発とか)は加算合成を使うって書いてあるんですがJavaでも同じような方法で実装する手段ありますか?
0338名前は開発中のものです。2006/05/28(日) 17:06:46ID:oT4lybEG
Java2Dには通常合成はあるが加算合成はない
自前で実装するかJOGLとかで3Dで描画するしかない

>>11とかのライブラリに単純な合成がある模様
0339名前は開発中のものです。2006/05/28(日) 22:35:07ID:L8EQs44V
>316
ifをバイナリツリーみたいな構造にすれば
log2(100)の回数の比較だけで済むんじゃないか?
0340名前は開発中のものです。2006/05/30(火) 19:56:51ID:AkbGbw5f
mpeg2のような差分圧縮形式のシーケンシャルアニメーションって負荷高いですか?
レイヤー可能でそれを実現できたらコンパクトになるなと思ったのですが
0341名前は開発中のものです。2006/05/30(火) 21:02:41ID:bnvMLnBd
Javaの質問と関係ないな
効率がいい場合と効率が悪い場合があるっしょ
0342名前は開発中のものです。2006/05/30(火) 22:16:22ID:AC7eOzy5
>>339
ポリモフィズムで解決という結論がとっくに出ていると思うのだが
0343名前は開発中のものです。2006/05/31(水) 19:31:13ID:kqayNosp
みんなが配布物に同梱してるSPIってOGG Vorbisくらい?
これが便利ってのがあったら教えてください。
0344名前は開発中のものです。2006/05/31(水) 22:06:19ID:H+lYwXra
だろうね
OggVorbisさえ再生できればだいたいこまらん
0345名前は開発中のものです。2006/06/01(木) 20:01:54ID:oy8AdH4m
Javaのゲームライブラリ作成中。Flashの1/2くらいの表現力、生産性が目標。
まぁ皆も半月くらいでライブラリは作って、オーサリング環境作るのに挫折するんだろうけどね。
0346名前は開発中のものです。2006/06/01(木) 23:16:05ID:mTuQuIix
普通に考えてFlashより表現力は上だし
生産性もFlashはスクリプトがおわっとるからまけないだろ
0347名前は開発中のものです。2006/06/01(木) 23:24:39ID:IyLxQihX
実行環境の普及率と人々のイメージ
0348名前は開発中のものです。2006/06/02(金) 02:24:25ID:IlXUhKKR
FLASHと比べるんだからブラウザ上で動かすんだよな
・MIDIや圧縮音声を再生する
・BGMと映像を確実に同期させる
・表示サイズを変更するとそこそこのクオリティで拡縮表示する
あたりが大変そうだ
0349名前は開発中のものです。2006/06/02(金) 07:57:55ID:OCsBTCKI
・JavaSoundでmidiと圧縮音声は問題なく可能。すぐ上でOggの話が出てる。
・BGMとの同期はそうつくればいいだけ。
・拡大縮小時にアンチエイリアスをかけるかどうかの設定が可能。アルゴリズムも設定可能。

別に大変じゃないし
0350名前は開発中のものです。2006/06/02(金) 21:25:12ID:cNNwG7w6
Flashは、例えばMovieClipの完成度の高さが大いに参考になる。
あれはComposite、Prototype、Flywightなどの
パターンの組み合わせがかなり洗練されててしかも使いやすい。

なんかFlash8.5からはさらに高度なAPIを持つらしいし
実装の研究をする教材としてはかなり好奇心がくすぐられる。
0351名前は開発中のものです。2006/06/05(月) 07:16:50ID:voSd2aR7
JavaでノベルゲームとかRPGって作れますか?
0352名前は開発中のものです。2006/06/05(月) 10:04:02ID:EcpAwWeS
macromediaはずっとデザイナー偏向で作ってきたけど
adobeとの合併で技術者向けのAPIも良くなってくと思う

でもFlashの対抗馬である事に関して、Sunは殆ど興味ないみたいだな
5年前のJavaに今の速度があればいい勝負になってたかもしれんのに

>>351
うん
■ このスレッドは過去ログ倉庫に格納されています