トップページ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あたりを参照
0233名前は開発中のものです。2006/02/05(日) 19:35:20ID:XoC15JKP

>>232

640x480の画面に32x32のマップをひきつめただけですでに40FPSだったんですよね
Graphics2D。。。

やっぱりC++の方がゲーム開発はいいのかなぁ・・・
開発効率はJavaの方がはるかにいいんですけどね

何かJOGLやLWJGLに近い速度がでるゲーム用ライブラリって
ないんでしょうか

0234名前は開発中のものです。2006/02/05(日) 19:44:36ID:8ByMu9YS
アルファブレンドでしきつめたらそれくらいにはなりそうだが
通常転送ならそこまで遅くなることはあるまい

使い方がおかしいかと
0235名前は開発中のものです。2006/02/05(日) 19:48:54ID:XoC15JKP

>>234

アルファブレンドで描画したときです。
正直なきたくなりました。
同様の処理でDirectXの場合は余裕を持たせてもFPS500ぐらいでした。
0236名前は開発中のものです。2006/02/05(日) 20:03:06ID:8ByMu9YS
デフォはDirectDrawベースだから当たり前
PureJavaベースのゲームなら少し前のコンシューマの2Dベースにしておくべき

アルファブレンドが多い場合は自前のエンジンを使ったほうがいい
Java2Dのアルファブレンドは機能が多すぎて高級すぎる
回転とかも同様

あとメモリアクセスを減らすために解像度を下げるとか
今後を考えてレンダリングエンジンはマルチコアに対応させる

現状を考えると320*240-16bppが2DでJavaでの安定動作の限界だと思うよ
それを2倍拡大して描画するのがベストか

Sunはデスクトップ部分に5.0は力を入れるといいつつ
1.4.2とほとんど変わらなかった前科があるから6にも期待薄だな
0237名前は開発中のものです。2006/02/05(日) 20:25:57ID:15xceU0H
-serverを指定するだけ多少は速くなるし、メモリ次第かなぁ
0238名前は開発中のものです。2006/02/05(日) 21:05:19ID:8ByMu9YS
serverはゲームではオススメしない
強度の最適化のために滑らかに動かない
0239名前は開発中のものです。2006/03/01(水) 00:33:42ID:LBMCdldE
BufferStrategyとpaintComponentを切り替えられるようにすれば
RPGツクールでキーボード名前入力を可能にした感じのゲームも可能なのかな。
でもそんなことしてたらMMORPGなんて作れない気もする。
-serverの件もそうだけど、なんかもどかしい
0240名前は開発中のものです。2006/03/01(水) 00:53:30ID:iPnrcY6D
一応BufferStrategyはCanvasでも使える
AWTなのであまり込み入った使い方しないように
0241名前は開発中のものです。2006/03/01(水) 01:34:48ID:LBMCdldE
おお、ホントだ。BufferStrategyは埋め込み可能だったのか。
ゲーム画面上に透明チャット窓とかしようとするのも可能そうだね。
BufferStrategyならAWTとSwingの差分なんてあってないようなものだろうし。
ちょっと希望が湧いてきました。
0242名前は開発中のものです。2006/03/01(水) 02:35:02ID:LBMCdldE
5.0からAWTにZOrderが追加される。かゆいところに手が届いてら。
0243名前は開発中のものです。2006/03/04(土) 19:59:23ID:+Bxv4duP
Swingでrepaintをした場合ってイベントキューで処理されるの?
Timerのタイミングできちんと描画スレッドに渡せますか?
0244名前は開発中のものです。2006/03/04(土) 23:22:41ID:EEF7QBKs
何を言いたいのかわからんがSwingは普通のSUIのイベント処理だぞ

リペイントわたしてもリペイント範囲のaddされるだけ

連続でrepaint複数渡しても1回しかリペイントされないとかよくあること

これはSwingに限ったことではない
Windowシステムは全部そう

だからTimerでrepaintわたしたからすぐに描画されるわけではない

正確なタイミングでやるならAWTイベントでのリペイントは辞めるべき
BufferStrategyを使うのが正しい
これは内部でDirectXとか使われてるイベントモデルではなく、いわゆる直書きだ
0245名前は開発中のものです。2006/03/05(日) 13:59:16ID:R322THrX
>>244 どうもです。
FPS管理するからrepaintのままでやります。
描画に失敗したら致命的というわけでもありませんし。
0246名前は開発中のものです。2006/03/05(日) 14:46:49ID:o20ilzio
FPS管理って普通にみんなBufferStrategyでしてると思うぞ
なんか勘違いしてないか?
0247名前は開発中のものです。2006/03/05(日) 15:12:44ID:R322THrX
いやJComponentもバリバリ使いたいので。
0248名前は開発中のものです。2006/03/05(日) 16:46:58ID:o20ilzio
Swingコンポーネントベースのゲームってめずらしいな
ダブルバッファリングをライブラリに任せるのは割ときついからな
0249名前は開発中のものです。2006/03/15(水) 01:15:11ID:cXOEjtfT
保守
0250名前は開発中のものです。2006/03/18(土) 15:46:10ID:bpOUjL+k

良スレですね。


6年ぶりぐらいにJava触って驚いた〜。
趣味の遊びには最適ですね。

0251名前は開発中のものです。2006/03/18(土) 23:01:07ID:ATXsVevn
exewrapがJavaゲームの必須アイテムになるのかな?
ヒープサイズをjrockitと同じ物理メモリの75%とかに指定したいんだけど
exewrapにはそういう指定は出来ないんだろうか

128m版と256m版の2つ用意したほうがいいかな・・・うーむ
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+
ゴリゴリ書いてる・・
とりあえず組んでみようとは思ったがマジで勉強が足りんらしい
チラ裏スマソでした
■ このスレッドは過去ログ倉庫に格納されています