トップページgamedev
984コメント340KB

JAVAでゲーム作成

■ このスレッドは過去ログ倉庫に格納されています
0001JAVA初心者・・・04/01/17 22:47ID:eiE+Mw3o
はじめまして!!
今年に入ってからJAVAでゲームを作ってみようと勉強しています。
どなたか宝さがしゲームを作るうえで参考になるゲームとツール知りませんか??
知っていたら教えてください。<(_ _)>ぺこり
0408名前は開発中のものです。04/12/30 11:40:00ID:App8tdOx
>>407
WebStartは別途インストールですよね・・・JRE入れてる人よりすくなさそうなんですが。
>>JREをゲームに同梱
これよく聞くんですが、C:\Program Files\Java\jre1.5.0にJREが入っているとするとこのディレクトリ丸ごとゲームのディレクトリに保存するってことですか?
ゲーム起動するときはこのディレクトリにパスはってjavawであってますか?
0409名前は開発中のものです。04/12/30 12:29:57ID:cd4ekPU/
jarならオプションをつけて

javaw -jar hogehoge.jar
(または java -jar hogehoge.jar)

でいいみたい
0410名前は開発中のものです。05/01/01 23:49:17ID:m62MX/c0
JREのディレクトリ構成そのままでJava.exeとか起動するとそこからの相対アドレスでバイナリが使われる
一部のソフトは環境設定使うけど、それは起動時のスクリプト等での設定の問題だから
まったく問題なし

JREが入ってないマシンでJREを自動でダウンロードってのは無理だし、
複数バージョンでのプラグインの動作保障はSUNはしないしね
0411名前は開発中のものです。05/01/02 11:07:19ID:xWBHNcVz
新年明けましておめでとうございます。

みなさんはどうやって自分の作ったゲーム(など)の
fpsや1ループの処理時間を調べているのでしょうか?
System.currentTimeMillis()を使っているのでしょうか?
これだとどうもアバウトな気がして。。。

何か良い方法があればご教授いただければ幸いです。
0412名前は開発中のものです。05/01/02 12:31:26ID:GInEeMeX
>>411
Java API 仕様より
>public static long currentTimeMillis()
>現在の時間をミリ秒で返します。
>戻り値の時間単位はミリ秒ですが、
>値の粒度は基本となるオペレーティングシステムによって異なり、
>単位がより大きくなる場合があります。
>たとえば、多くのオペレーティングシステムでは、
>時間を 10 ミリ秒の単位で計測します。

> これだとどうもアバウトな気がして。。。
その気持ちはわからなくもないし、実際に精度はあんまりよくない。
が、まさか1ループ毎に時間を計ったりしてる?
fpsのような重要でない値なら1〜2秒間隔で平均取れば十分だと思うよ。
0413名前は開発中のものです。05/01/02 13:20:08ID:fLfuGW+L
JDK5.0のSystem.nanoTime();に逃げてみるとか
0414名前は開発中のものです。05/01/02 16:47:18ID:cbIeu/vz
1ループの処理時間は、ループ処理をTimerTask.run()に記述すれば
TimerTask.scheduledExecutionTime() で取れるかな

fpsの値はSystem.currentTimeMillis を使って
一秒ごとのアバウトな値を出すようにしてる
0415名前は開発中のものです。05/01/02 18:25:28ID:VyyXW717
>>411
私の読んだ本だとJava3DのJ3DTimer使ってたよ。ナノ秒精度だそうです。
そこまでFPSにこだわらなくてもいいと思うけど。
0416名前は開発中のものです。05/01/02 18:57:07ID:mXMLbmld
最近のJavaはC/C++に匹敵するほどの実行速度らしいけど、
やっぱ描画が遅くてアクションゲームにはツラい。
標準でOpenGL使えればいいのになあ。
041741105/01/02 20:05:56ID:xWBHNcVz
>>412〜414
どうもありがとうございます。参考にさせていただきます。
0418名前は開発中のものです。05/01/03 00:31:42ID:GrQ8y1aA
>>416
2Dならばアクセラレーション聞く描画もそれなりにあるし
問題ないけど2Dだとたしかにきついね
Java3Dが標準APIになってくればちがうのかな
0419名前は開発中のものです。05/01/03 01:49:26ID:X1uO84GX
環境によってアンチエイリアスが勝手にかかったりして
drawLineとかで絵を描いてると致命的に困ることがある。
0420名前は開発中のものです。05/01/03 20:09:56ID:12h/3iua
PureJavaを捨てて、WindowsやLinux限定にすれば、便利なネイティブ3D
ライブラリが使えるのになぁ。
0421名前は開発中のものです。05/01/05 03:56:17ID:ty7rjUGs
それじゃあJavaの利点が・・・
0422名前は開発中のものです。05/01/05 07:28:33ID:LPCOCD8C
ゲームの場合なら、そのライブラリがWindows,Mac,Linuxに対応していれば
それで十分でしょ。
0423名前は開発中のものです。05/01/05 08:11:18ID:J41LgYHD
>>421
Javaでゲームを作る利点と欠点ってなんだろ
利点
・ネットワークゲームとかだとアプレットやWeb Startでクライアントのバージョンを統一できる
・Web StartならJava3D等のライブラリとかを自動で拾ってくれる
・Web Startならインストール、アンインストールがプラットフォームに依存せず使える。
・Write once run anywhere(でも携帯のアプリだと変換が必要、また制約が多い)
・フリーで使える開発ツールが優秀(?)
・メモリリーク等の心配がない
欠点
・一概には言えないが一般にネイティブコードに比べメモリを食う、速度が遅い
・ネイティブコードが使用できない
・AWTを使用した場合は描画が遅い
・どんな場合であれJREはクライアント側で手動でインストールしなくてはならない

と、適当に考えたけどこのくらいか?
042442305/01/05 08:14:00ID:J41LgYHD
あ、欠点の「ネイティブコードは使用できない」は本当に使えない訳じゃなくて
使ったらJavaの意味がほとんど無くなるって意味ね
0425名前は開発中のものです。05/01/05 09:57:02ID:TbvmjmSc
JavaVMをCPUやビデオカードに合わせて最適化するだけで
その上で動くアプリケーション性能はすべて向上する
という記事を読んだ事があります。
アプリケーションごとに最適化するよりも
プログラマの負担が少なくていいですね。
0426名前は開発中のものです。05/01/05 16:36:42ID:rWkXigbI
>>425
建前はそうなんだけどねぇ。
いつになったら、実行時コンパイル>>>>>事前コンパイルになるのやら。
0427名前は開発中のものです。05/01/05 16:57:40ID:ty7rjUGs
実際には>でなくて≠になれば十分。
そして実行速度に関して言えばかなり≠に近づいている(らしい。
0428名前は開発中のものです。05/01/05 19:17:23ID:KkI3Wysq
Javaの最大の欠点はJREの手動インストールだと思われる。
0429名前は開発中のものです。05/01/05 23:27:34ID:A13razjY
>>425
まぁほぼ現状ではイコールに近いのがサーバーVM
ただし、コンパイル速度が結構かかることやHotSpotの仕組みわかっていないと
どのタイミングでコンパイルされるかわからずにがたがたになる

javaコマンドのオプションいじれば大概問題ないけどね

>>423
.NETとJavaとC/C++でゲームそれぞれ作ってるけど、
.NETやJavaはゲームの処理だけに集中して作れる(フレームワーク等が作りやすく、
コンパイルチェックが強力なためにバグも少ない)のが利点だよ

開発効率がゲーム開発で求められる分野で対象がPCならすでに十分置き換え可能
ただ、Javaにくらべて.NETのほうが最適化とか(情報が少ないためか)癖とかつかみにくくて
パフォーマンスチューニングとか多少しにくいかな
1GHz以下のマシンや3DバリバリならCのほうで組んだほうがいいかもしれないけど
開発効率は間違いなくこれらダイナミックコンパイラ技術つかったやつらは
2倍程度の差はある

でも、実際ゲーム開発で負担が大きいのは作り終わった後のバランスとりとか
チューニングや絵や音楽の用意だったりするからさほど大きくないかもしれない

Cなどにこだわってバグ大量に抱え込むプログラマなら言語環境かえたほうがいいかもしれないけどね

>>428
まずJRE同梱でネイティブバイナリとばれないよ
0430名前は開発中のものです。05/01/06 19:57:24ID:VyA8RYB6
JRE同梱の方法教えておくれ。ググっっても見つからないorz
0431名前は開発中のものです。05/01/06 23:46:39ID:YpjyvAnc
JREディレクトリそのままこぴ
そしてそのjavaw.exeを使うように相対パスでbatかexeつくるだけ
JREは相対パスで各種ライブラリを使うから
ちなみになにをはずして追加できるなどはドキュメントに書いてあるからそれを参考に
わからないのならそのまま、せいぜいWebStartをはずすくらいかと

Win以外でJavaつかってるならJREがたんなるファイルの集まりに過ぎないことを
知ってると思うけどね

.NETのほうもおなじようにできればいいのだけれども、いまのところ無理
0432名前は開発中のものです。05/01/07 03:10:22ID:YVGNxSl6
>>430
余談だけどWeb StartだとJREのバージョン指定してやるだけで
そのバージョンのJREを取得してくれるよ
↓関連スレ
ttp://pc5.2ch.net/test/read.cgi/tech/1096379038/l50
0433名前は開発中のものです。05/01/07 05:45:18ID:YVGNxSl6
プログラマがわざわざ最適化したプログラムを書かなくても
JITコンパイラ側で最適化してくれるから
わかりやすいコーディングで開発効率があがるというのもあるね
↓詳細
ttp://logic.is.tsukuba.ac.jp/%7Ekam/ppl_ss04/ishizaki.pdf
0434名前は開発中のものです。05/01/07 13:22:31ID:7AB0ceh6
>>431
d試してみます。
>>432
Web Startもインストールしないと使えないんですよね。JREさえいれてない人がインストールしてるとは思えないんだけど・・・
0435名前は開発中のものです。05/01/07 13:29:31ID:7AB0ceh6
>>431
+ test
- jre1.5.0 (コピーしたフォルダ)
- test.jar (実行型JAR)
- test.bat

という構成にしてtest.batに
jre1.5.0\bin\javaw -jar test.jar
って書いてbatをダブルクリックすれば実行できました。ただJREって70MBもあるんですね・・・
アプリは30KBしかないのにorz
0436名前は開発中のものです。05/01/07 15:32:48ID:as1e6wHf
>>435
JREの中でも省ける場所もある
ドキュメント嫁

あと圧縮するならDGCAおすすめ
JRE同根でアプリにもよるが10Mくらいになるから
0437名前は開発中のものです。05/01/07 15:34:45ID:as1e6wHf
ちなみにDGCA+JREをみかけたのはここね
http://shin.cside.com/product/pw/index.htm
Oggストリーム再生のBGMとか
JNIでDirectInputのパッド入力もやってるもよう
043843205/01/07 15:37:31ID:XcvBhScQ
>>434
Web Startは普通にJRE入れたら付いてくる。
WindowsならJREは↓のアドレスからIE上からインストールも可能。
http://jdl.sun.com/webapps/getjava/BrowserRedirect?locale=ja&host=www.java.com:80

特定バージョンのJREがいるのかと思ってたけど違うのね。
(そもそもその必要があるのかという疑問もあるけど)
たしかに初心者相手の場合この手の手順が煩わしいのはわかるけど
漏れはすなおにJREインストールさせるのを進める。
0439名前は開発中のものです。05/01/07 16:24:37ID:as1e6wHf
>>438
JREが入ってないのが前提での話をしていると思われ
だからインストーラを使わずに使える同根の話かと
0440名前は開発中のものです。05/01/08 00:21:59ID:KZPOhWIL
 Javaでゲームを作る際の最大の欠点は、ガベージコレクションが
いつ始まるかプログラマーが規定できないから、変なところで
処理落ちしたりするって事じゃなかったっけ?

 今どうなんだろう。公開されてるシューティングゲームを
試してみたいけど、平均的に30fps出ていたような…。
0441名前は開発中のものです。05/01/08 00:32:28ID:hrqfE2sK
見してー
044244005/01/08 08:35:32ID:KZPOhWIL
>441
 書き方悪かった。「Web上で公開されてるシューティングゲームを
(自分の環境で)動かしてみたら、特に問題はなさそうだった」という
意味です。
 >437で公開されている、ボールが150個動くデモではときどき
重くなりますが、この原因がガベージコレクションかどうかは
分かりません。
0443名前は開発中のものです。05/01/09 13:44:39ID:XCFumA9W
>>442
サンプルソース見ればわかるけど、それスプライト500こな

batやshのオプション見ればGCとかのチューニングしてないわけだし、
そもそもノーウエイトだとC++ネイティブでもそういう現象おこるね
まぁ細かいことを言えばリアルタイムOSでないかぎりどうしようもないさ
0444名前は開発中のものです。05/01/26 17:51:20ID:4izTLXPu
Javaとかそういう範囲での話じゃないと思うけど…

いま、マリオのような横スクロールアクションゲーム作っているわけだが
坂道がどうすればいいかわからんのよ。
仕組みでいいから教えてくれないか?
0445名前は開発中のものです。05/01/26 20:54:31ID:eUy03UH4
坂道の角度からxに加速する量とyに加速する量を求める。
0446名前は開発中のものです。05/01/27 00:19:32ID:dod+XOt2
???
0447名前は開発中のものです。05/01/27 11:51:21ID:ct8f1gXr
高校物理で「重力加速度」ってのを習うんだけど、空中だったり平らな場所だと真下に力がかかるってことなのね。
それが坂道に立っている状態だと、横方向と下方向に分かれるのさ。
角度が急になればなるほど横方向への力が強くなる。
分ける比は坂の角度を使って三角関数でうまいこと計算してやればいい。
そんなに厳密に計算する必要がないんだったら、
坂の下方向に向かって滑らせるだけでそれっぽい動きになる。
スーパーマリオもそんなに厳密な計算してないように見える。
0448名前は開発中のものです。05/01/27 13:28:22ID:gq9PJyGn
重力加速度より垂直抗力の話じゃ?

それ以前に、具体的に坂道のどういう処理に困っているのかが気になる。
445と447は『坂道で滑る』処理だよな?
0449名前は開発中のものです。05/01/27 14:16:27ID:nqWT3l26
>>444
単純に思いつくのは
1、地形の形状データをすべてベクトルデータで表現する。
2、角度ごとのブロックを沢山用意する。
3、ブロックの基本の大きさを小さくしてキャラクターがそこを通るときに線形近似をする。
くらいか。
1はそれなりの数学と物理の知識が必要になるし
無駄に厳密になりすぎると思う。
詳しくは考えてないけど2と3の複合になるんじゃないかな。
そういやソニックの坂道の処理ってどうやってたんだろうな。
0450名前は開発中のものです。05/01/27 15:01:48ID:ZTZ4mfiF
ベクトルとかそんな面倒な処理はいらねーよ
0451名前は開発中のものです。05/01/28 18:30:54ID:PN7DKgHv
X座標に比例してY座標も変える的な感じで作ったら、
坂道とブロックの繋ぎ目で問題出た
0452名前は開発中のものです。05/01/29 23:09:00ID:tWobEU3H
http://goldenstudios.or.id/products/GTGE/index.php
Java用のゲームエンジンだそうだ。

サンプルゲーム集
http://goldenstudios.or.id/products/games/index.php
0453名前は開発中のものです。05/01/30 15:35:17ID:QKwWKWHj
>>452
 面白そう。早速いじってみます。情報ありがとう!
0454名前は開発中のものです。05/01/30 18:46:50ID:v9G0bOl5
>452
HPを翻訳で訳して読んだのですが、ライセンスは本当のところ
どうなってるでしょう。フリーとなっていますが、
登録が必要とかありそうでしょうか。
0455名前は開発中のものです。05/01/30 18:50:20ID:lHJNRcHb
>>454
リンクの一番下にcreative commons licenseと書いてあったよ。
日本語で読める。
原著作者のクレジットを示せば、商用利用も無料で可能らしい。
http://creativecommons.org/licenses/by/2.0/
0456 ◆pKT/RyrDCw 05/01/30 20:13:10ID:YRl+Z4ci
別スレだけど作ったので報告
http://cattaka.jfast.net/index.php?BakuO
スレ
http://localhost:7524/j2ch/thread/gamedev.pc5/1023007103/?time=1107083332&ls=50
0457 ◆pKT/RyrDCw 05/01/30 20:13:51ID:YRl+Z4ci
↑間違えた
http://pc5.2ch.net/test/read.cgi/gamedev/1023007103/l50
0458名前は開発中のものです。05/01/31 15:54:15ID:V1XG9IBr
ロープレのマップに使おうと思っているんだけど、画像の一部を表示させるのはどうすればいいんだ


32×32の画像の(5,7)〜(20,30)の部分を表示する
0459名前は開発中のものです。05/01/31 16:14:46ID:WXjgRLAL
APIよんだか?
0460名前は開発中のものです。05/01/31 18:49:45ID:HVtl3ei2
>>456
壁にめりこんでるのがちょっとあれだけど面白いな〜
Java Web Startけっこういいな
0461名前は開発中のものです。05/01/31 18:51:06ID:HVtl3ei2
>>458
g.drawImageの
drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer)
のバージョンを使う
0462名前は開発中のものです。05/01/31 21:17:28ID:bPE1/uAo
>>456
動きが途切れ途切れでゲームにならん。
ウチの回線が細すぎるのか?
0463名前は開発中のものです。05/01/31 21:20:58ID:+V/3Dkj9
つ―か、iアプリのFFTって何であんなにたくさん画像使っているのに、100kbに納められるんだよ

オレなんか画像50個くらいで50kbもいっちゃうよ

0464456 ◆pKT/RyrDCw 05/01/31 22:09:50ID:/B7Ofg2g
>>462
たしかにログインするとまともにゲームできる人と
できないくらい途切れ途切れになっている人がいるようです。
アフォなことどのくらいの転送レートが必要なのかまだ測定してなかったりします。
多くても1kByte/secは越さないとは思うのですが・・・
0465名前は開発中のものです。05/01/31 22:43:52ID:WXjgRLAL
>>463
100KBって800Kビットだろ?
それにjarはZip圧縮だし、Javaのバイナリは最初から小さく作ることを考えている
あのサイズは別に不思議ではないぞ
0466名前は開発中のものです。05/01/31 22:51:26ID:WXjgRLAL
あとスクラッチパッドにロードしてるんじゃないかな
0467名前は開発中のものです。05/02/01 04:50:32ID:ijJ+D9OG
iアプリは800kbも作れるのか
0468名前は開発中のものです。05/02/01 09:15:57ID:vceSWe7w
Vodaって256KBじゃなかったっけ?
1.5Mbitじゃん。すげー。
0469名前は開発中のものです。05/02/01 12:28:40ID:YL5pzwam
あと仕様公開されてないがVoda冬3Gは1M(メガアプリ)だからな
jarやJavaの構造的に2HD2枚位の容量あるとおもえばいい

わかりやすく言えば昔のX68のソフトがほぼすっぽりおさまるというわけだ
0470リルム05/02/01 14:48:04ID:/sjbLrZF
友人にもらったこのファイル。
感動した。
魔法も増やしたいし、敵も増やしたい
戦闘中の音楽も鳴らしたい。

しかし、俺は、全くプログラム経験が無い!
誰か俺の続きをお願いします・・・
ttp://fft-up.hp.infoseek.co.jp/cgi-bin/FF5_up/img-box/img20050201144402.lzh
0471名前は開発中のものです。05/02/01 23:01:38ID:fqA4mNtG
>>469
そんな大規模なものを作るわけだから、当然、有料アプリだろうな。
1Mアプリの麻雀ファイト倶楽部なんか半荘一回につき100円いるからなぁ。
0472名前は開発中のものです。05/02/03 00:14:28ID:J3eLPxj0
http://shin.cside.com/product/shingl2/index.htm
上に出ていたところのだけど
今じゃこんなソフトウェア描画やっとるんか・・・
0473456 ◆pKT/RyrDCw 05/02/03 19:56:30ID:4qv8h6Hq
>>462
転送量計ると
送信が瞬間最大1kByte/sec、受信が瞬間最大2kByte/secくらいでした。
普通くらいと思える動きで
送信が300Byte/sec、受信が800Byte/secくらいでした。

これだとモデムとかだと辛そうです。
とりあえず通信を圧縮してみたら30%くらいまで圧縮できました。
0474名前は開発中のものです。05/02/13 17:00:37ID:OLDws8+S
★俺ノート

Javaによるゲーム解説
http://www012.upp.so-net.ne.jp/flab/javatuto/javatuto.html

Javaでゲーム作りますが何か?
http://f57.aaa.livedoor.jp/~javagame/index.html
0475名前は開発中のものです。05/02/15 14:38:23ID:6fYiWk+0
そらみのJ2MEゲームプログラミング
http://www.saturn.dti.ne.jp/~npaka/sorami/index.html
0476名前は開発中のものです。05/02/21 02:55:12ID:SgKJcldM
質問です。
JNIで作成したDLLファイルはアプレット上では機能するのでしょうか?
MacやUnix上では動作できないような気がするんですが・・・。
0477名前は開発中のものです。05/02/21 10:35:44ID:SRUiupZK
固有の部分は各機種ごとに用意する
だからネイティブライブラリのロード命令は抽象的になっている
0478名前は開発中のものです。05/03/05 14:28:03ID:RgI1qaiB
>>477
じゃあ、MacやLinux、Winはそれぞれネイティブコードのモジュールを
用意しておき、プログラム上ではシステムクラスでOSを区別させ、
ロードするライブラリをそれぞれのOSに合わせるようにすればよいのか?
0479名前は開発中のものです。05/03/05 14:50:03ID:98yvfBCO
ロードするところのコードは同一でいい
ライブラリをロードできる場所はOSごとに違うからそのセットアップをするだけで
プログラムは一切変える必要はないよ

たとえば
System.loadLibrary("abc");
ってやるとWindowsなら abc.dllを探すし、Linuxならabc.soを探すといった具合にね
0480名前は開発中のものです。05/03/06 21:58:56ID:liOrnQvP
なるほど。ロードするべきモジュールが
soかdllかは自動で判別してくれるということか。
macのネイティブモジュールはなんだ?
拡張子ないんだっけ?
0481名前は開発中のものです。05/03/06 22:10:47ID:Chzsuhrw
MACはFreeBSD5系統
0482名前は開発中のものです。05/03/06 23:00:47ID:JntwbsaK
Mac は .jnilib

http://developer.apple.com/documentation/Java/Conceptual/Java14Development/Core_APIs/chapter_6_section_4.html
048348005/03/12 23:27:34ID:av7rObsw
>>482
サンクス

Javaゲーム作成した事ある方知ってる方教えてください。
マップスクロール関係の描画処理になんとか完成までこぎつけたのですが、重たい。
チップ画像ファイルって1枚で用意するのと複数枚用意するのとでは
処理速度が変わるのかな?
1チップあたり32*32ドットで、10*10個分のチップ画像をImageクラスに
10個分格納するのと、
1チップあたり32*32ドットで、100*10個分のチップ画像をImageクラスに
1個分格納するのとでは、どっちが重たい?
重たいというか処理に時間がかかるのはどっち?
0484名前は開発中のものです。05/03/12 23:38:43ID:jjOR1CG8
実際に試せばいいと思うよ
048548005/03/12 23:52:43ID:av7rObsw
>>484
まあ、そうなんだけどね(^^;)
ちょっと明白な答えが返ってきたら、検証しなくてすむかなー
とたくらんでました。
何も今作っているゲームで試さなくても簡単なアプリ作って
試せばよいか。
0486名前は開発中のものです。05/03/13 00:03:52ID:DujXAwCE
高速なマップスクロールについてはやねうら本に書いてあったような。

ハードウェアアクセラレーションが効いていない場合が考えられるので、
しんさんの出張所(日記) とか読んでチェック汁

あと、VMのご機嫌とるのマンドクセな場合は、↓を使うとか...
Java Binding for SDL
http://sourceforge.net/projects/sdljava
0487名前は開発中のものです。05/03/13 00:11:42ID:QIp5KnB9
マップ描画はアクセラレーションがきけば
オンボードのUMAのチップでも60fpsで
CPU使用率5%以下ですむね
048848305/03/13 12:02:23ID:nyqjREnh
>>486
>>487
アドバイスありがとうございます。
このスレに今まで記載された技法はすべて試すつもりです。
基本的なマップ描画に関する知識を深めてからそちらの処理も考えようとしています。
今、ハードウェア系の制御に手を出すと、無駄な処理を行っている部分
を探すのが面倒になるので・・。

>>483
試してみたら、前者のほうが、処理に時間がかかりました。
詳しく計っていませんが、その差は歴然でした。
メモリ上同じサイズのイメージ情報を格納しているはずですが、
配列で持たせるのは、極力さけるべきなのでしょう。
DirectXも確か、DirectDrawで一度にbmpファイル読み込んだ方が
処理が速かったっけ。

・・そうなるとテキストデータもコレクションAPIやString配列で
データテーブルを構成するより冗長性をもたせた1つのString変数で・・。
いやな結果が出そうだから、考えるのやめよう。
0489名前は開発中のものです。05/03/13 13:39:56ID:QIp5KnB9
>>488
正直質問の意味がわからない
049048805/03/13 13:49:30ID:nyqjREnh
>>489
ImageクラスとImageクラス配列とでは同じサイズの画像ファイルを読み込んでも
処理に差異があるかという事を質問してみたんですが、
文章がまわりくどかったですね。
0491名前は開発中のものです。05/03/13 13:52:00ID:QIp5KnB9
配列と配列なしでのロード時間に差はとくにないぞ
049248805/03/13 14:02:57ID:nyqjREnh
>>491
失礼しました。
ロードしたあとの画像描画処理の事です。
getImage()で画像ファイルをロードするのは差は見られませんでした。
drawImage()で描画処理を終えるまでの時間は極端に差が出ました。
0493名前は開発中のものです。05/03/13 14:32:10ID:QIp5KnB9
それ作り方が悪いんじゃないのか?
まった差はでないと思うのだけれども
部分的でいいのでコードだしてもらわんとなんとも
049448805/03/13 14:54:48ID:nyqjREnh
>>493
では一部だけ。ここ以外は同じソースをりゅうようしましたので、問題
ないと思いますが。。出かけますので、18:00頃またきます。
配列あり
private void MapDraw( Graphics g ) {
int imgno = 0;
int chipno = 0;
int widthno = 0;
int heightno = 0;
for( int j=0; j<10; j++ ) {
for( int k=0; k<10; k++ ) {
imgno = intBuf[j*10+k]/100;
chipno = intBuf[j*10+k]%100;
widthno = chipno/10;
heightno = chipno%10;
g.drawImage( imgBuf[imgno], 4+k*32, 30+j*32, 4+k*32+32, 30+j*32+32, widthno*32, heightno*32, widthno*32+32, heightno*32+32, this );
}
}
}
049548805/03/13 14:55:12ID:nyqjREnh
配列なし
private void MapDraw( Graphics g ) {
int imgno = 0;
int chipno = 0;
int widthno = 0;
int heightno = 0;
for( int j=0; j<10; j++ ) {
for( int k=0; k<10; k++ ) {
imgno = intBuf[j*10+k]/100;
chipno = intBuf[j*10+k]%100;
widthno = chipno/10;
heightno = chipno%10;
g.drawImage( img, 4+k*32, 30+j*32, 4+k*32+32, 30+j*32+32, imgno*320+widthno*32, heightno*32, imgno*320+widthno*32+32, heightno*32+32, this );
}
}
}
※intBuf配列には数値が0から999までの乱数が100個格納されています。
0496名前は開発中のものです。05/03/14 07:54:09ID:dUlYR5qE
どっちのコードも部分切り出しの描画だな
これらは遅い描画だったはず

場合によってはソフトウェア描画になってるだろうからキャッシュにおさまってるとかそんなことじゃないの?

まぁ使うときは切り出しなしでつかえ
0497名前は開発中のものです。05/03/14 07:57:52ID:dUlYR5qE
つーか、よくみるとImage以外の引数のところがちがうな
で、どっちが何msで遅いほうは何msなんだ?

この程度の描画どっちも5ms以下だろうし
0498名前は開発中のものです。05/03/14 14:51:58ID:g8fcKLDU
作ったゲームをjarで固めて配布したいのですが
それでも結局VMの入ったPCでしか動きませんか?
jarにVM一式入れないと駄目?

それと、インストーラーもsetup.exeとかそういうファイルにしたいのですが。
0499名前は開発中のものです。05/03/14 17:15:59ID:dUlYR5qE
インストーラにVMいれてしまえばいいじゃない
0500名前は開発中のものです。05/03/14 18:11:18ID:g8fcKLDU
なるほど、自動的にJRE1.4がインすとされるようにして
ゲーム起動時にはjarを叩くようなbatかexeを作ればいいのか。
さんくすこ
0501名前は開発中のものです。05/03/14 18:28:54ID:dUlYR5qE
JREはJREのディレクトリ構造そのままコピーしてそのbinの中にあるjavaw.exeから起動するようにするといい
そうすればユーザーにはJavaを使ってることすらわからない
0502名前は開発中のものです。05/03/14 18:35:57ID:CEe6heNH
聞きたいのですが、JREの中のrt.jarの中の使って
いない機能とかは削除してもいいのでしょうか。
なんせこれだけで13メガバイトもあるので。

そもそもrt.jarからファイルを取り出すのは
SUNが禁止してないかも分からず…
自分が使っていない機能を特定する方法もわからず…

0503名前は開発中のものです。05/03/14 18:44:49ID:dUlYR5qE
READMEみればどれをはずして追加してもいいとか書いてある
0504名前は開発中のものです。05/03/14 19:00:13ID:zNQXpyRE
話題がループしすぎ
050548805/03/14 21:57:24ID:kZ32SfVH
>>496
レスありがとうございます

>まぁ使うときは切り出しなしでつかえ
詳しく教えてください。
チップ画像をすべて1つづつファイルに分けて用意するわけではないですよね?
>どっちが何msで遅いほうは何msなんだ?
↓こんなんで正確な処理速度が計れないかもしれませんが、、、
public void paint( Graphics g ) {
long l = System.currentTimeMillis();
MapDraw( g );
long l2 = System.currentTimeMillis();
System.out.println( (l2-l) );
}
結果です。
・スリープなし
配列あり 平均 63ms 最低 0ms 最高156ms
配列なし 平均 64ms 最低 0ms 最高156ms

・スリープ100ms
配列あり 平均217ms 最低 0ms 最高281ms
配列なし 平均120ms 最低31ms 最高188ms

・スリープ5000ms
配列あり 平均188ms 最低 0ms 最高18.8ms
配列なし 平均 62ms 最低 0ms 最高 6.2ms

※スリープを5000msにしたら、初回だけ最高値が計測でき、
2回目以降は配列有り無しに限らず0msでした。
ソフトウェア描画によるキャッシュ?っていうやつが原因なのでしょうか?
050648805/03/14 21:59:34ID:kZ32SfVH
↑まちがいでした。
・スリープ5000ms
配列あり 平均18.8ms 最低 0ms 最高188ms
配列なし 平均 6.2ms 最低 0ms 最高 62ms

0507名前は開発中のものです。05/03/14 22:40:12ID:dUlYR5qE
Javaは動的コンパイルするのとメモリ設定してないとFULLGCでヒープ拡張が多発
このへんのうごきがわかればその最低値という部分だけがほぼ出るようになる

あとマップチップが32*32のようだけれども、これは某所の日記によれば60fpsで
3000個くらいは出るようだ
■ このスレッドは過去ログ倉庫に格納されています