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

JAVAでゲーム作成

■ このスレッドは過去ログ倉庫に格納されています
0001JAVA初心者・・・04/01/17 22:47ID:eiE+Mw3o
はじめまして!!
今年に入ってからJAVAでゲームを作ってみようと勉強しています。
どなたか宝さがしゲームを作るうえで参考になるゲームとツール知りませんか??
知っていたら教えてください。<(_ _)>ぺこり
0009JAVA初心者・・・04/01/19 04:18ID:7ZOz3AkQ
まずは基本からということで・・・
といってもJAVAの初心者っぷりもさることながら他の言語はもっと初心者なんですよ・・・
0010名前は開発中のものです。04/01/19 04:27ID:8nvGc2op
初心者というのは免罪符みたいなもんだよな
0011名前は開発中のものです。04/01/19 06:29ID:Ad+eoa4O
なにはともあれ、頑張れ>>1
0012名前は開発中のものです。04/01/19 13:33ID:qF6v1RAu
{
{{
}
}
}
0013名前は開発中のものです。04/01/19 16:03ID:PrE1yRFQ
>12はコンパイルとおるのか知らないが
Javaだと逆コンパイルされるから
困るのだが
0014名前は開発中のものです。04/01/19 16:09ID:p6Sy815k
>>8
javaよりゲーム製作に適した言語て何? C? LGP?

教えてエロイ人。
0015名前は開発中のものです。04/01/19 16:24ID:PrE1yRFQ
>8
のわざわざの意味がよくわからん
0016名前は開発中のものです。04/01/19 17:33ID:OR3w5krE
>>14
シーピッピッ
まぁ俺も初めはJAVAでもいいと思うよ。

>>13
見られて困るようなコード書くことあるんか? JAVAで。
0017名前は開発中のものです。04/01/19 18:23ID:KiZt+2Kr
javaは遅いからでしょう。>わざわざ
しかしハードウエアが十分高速になっているいま、
小手先の高速化の意味もなくなり、JAVAでファミコン程度の
ゲームが作れるのではないかと。
>1さん
はどんなゲームが作りたいの?
00181304/01/19 18:32ID:PrE1yRFQ
>16
謎解きのような要素があるゲームの場合、
見られたくないと思う。
曖昧化で読みに<<なるとは思うのだが。
gcjに期待している。
しかし、本気でやろうとするなら、
C++かとも思う。
00191404/01/19 19:51ID:zdd2LOg2
本気ならC++か・・・
漏れにはムリポ。
0020名前は開発中のものです。04/01/19 20:13ID:iJxq6NbL
C++が一番ゲームを作るのに適した言語というのは禿げしく同意だが
ホンキでと言うのはまた意味合いが違うんじゃないかなぁ?
言語とゲームの質は必ずしも比例しないし。
以前は市販のゲームでもVBが使われたりしてたし。
今のよりも面白いのも多い。
まぁグラフィック重視なら言語の質が大きくゲームの質に左右されるが。
0021JAVA初心者・・・04/01/19 22:11ID:7IYz/cdm
>17
ぼくは宝探しのゲームを作ってみようと思ってます。
FF9に「ここほれ!チョコボ」ってあったじゃないですか。
あんなかんじの仕様にしたいんですけど初心者にもできますかね?
0022名前は開発中のものです。04/01/19 23:01ID:PrE1yRFQ
FF9は知らないが
わたしが考えるほとんどの面白いゲームは
JavaでもVBでも十分実装できると考える。
Javaを勉強してからなら
C++に移行することも容易だろう。
FF9を知っている人、Javaでもできそうですか?
0023名前は開発中のものです。04/01/19 23:09ID:2e5dYW17
>あんなかんじの仕様
ここがさっぱり分からねえ
0024名前は開発中のものです。04/01/20 00:01ID:G0/Tg/e/
1.4をベースにやれば、
Javaでもそれなりの物は作れるよ。
ただWeb上には、1.4やJava2D,3Dに
関する情報は少ないね。
0025名前は開発中のものです。04/01/20 00:01ID:sm0AsaXz
>>21
あーもう、作ってから言えよ。
0026名前は開発中のものです。04/01/21 01:20ID:bCirSG3a
Java Games Forums
ttp://www.javagaming.org/cgi-bin/JGNetForums/YaBB.cgi

のYour Games Hereあたりを見るとJavaでどの程度のことができるかわかると思われ。
0027名前は開発中のものです。04/01/22 20:59ID:0mnJ/A1K
おら、はJavaでとりあえず動く見た目貧弱Verを作ってから
C++で本格的に作ってる
0028名前は開発中のものです。04/01/23 20:21ID:Dv25JVg6
よ〜し、Javaで作ってみるか。
0029名前は開発中のものです。04/01/24 01:24ID:xJ1RLhst
ところで、1はどこ行ったんだ?
まさか、この程度で挫折したりしないよな?
まだいるなら、ちょっとなら教えてやってもいいぞ。
0030名前は開発中のものです。04/01/25 03:06ID:dBW/oKY7
1じゃないけど参考になった。
ただ参考書見ながらやってるけど結構ムズイ。
0031JAVA初心者・・・04/01/25 23:03ID:ZzuGhGCl
風邪ひいてダウンしてました。皆さんも風邪には気をつけてください。
ゲーム作成のほうは全くもって進んでいません。
もう少しがんばってみようと思います。
あきらめるのはまだ早いですよね☆
0032名前は開発中のものです。04/01/26 09:11ID:reTPUXlQ
どうやって配布するか悩むね
やっぱりappletが気軽でいいかな
0033名前は開発中のものです。04/01/27 01:32ID:sQv8HBub
Javaで作るメリットは実行するプラットフォームを選ばないこと。
(Microsoft J#.NETは別物だが)
VM上だったら、WinでもMacでもLinuxでも動くから、大勢の人に
見て貰える。
0034名前は開発中のものです。04/01/27 01:38ID:sibdAbiu
シェア的にはWinで見れれば充分すぎるほど大勢だと思うけどね
0035名無しさんは14才04/01/27 17:40ID:cLPNkE7t
わーい。Javaスレだ−。

もう一年も放置しちゃった作りかけのゲーム、再開しようかなあ。
初期1.4で作り始めてたけど、しらんまにJava3Dリリースされちゃってるし、
1.5とか出てきちゃったあたりが悲しいけど。
でも一から作り直そうとすると、またきっとどこかで挫折するし(根性なし)。
0036デフォルトの名無しさん04/01/27 21:07ID:pftlihys
>>33 さいしょっから JRE入ってればそうね。
0037名前は開発中のものです。04/01/27 21:07ID:H0qZbH7/
マ板の14才か?
0038名前は開発中のものです。04/01/28 00:35ID:pX/OL80S
WindowsでコンパイルしたものもMacで動かせるんだっけ?
0039名前は開発中のものです。04/01/28 08:18ID:AkBX6X9I
>>35
なんか作ってみれ。
好きなもの作れるのは今だけだぞ。
0040名無しさんは14才04/01/28 11:17ID:WHT4gwoV
やってみます。まったりと。
古いソース引っ張り出してきました。
懐かしいなあと思いつつ、内容忘れまくり。
たいした量書いてたわけじゃないけど。

ついでに、ツクール2000の支援ツールがまるごと消滅しているのに気づいた。
いつ消えたんだろ。……スレ違いだけどショック。
0041名無しさんは14才04/01/28 11:22ID:WHT4gwoV
>38
できますよん
0042名無しさんは14才04/01/29 10:45ID:PBoapCYE
いまいち盛り上がらないね。
あんまりJavaでゲーム作ろうと思う人いないのかなあ。
私はマカーだから、いろんな人にやってもらおうとか思うと自動的にJavaになるんだけど。
Winの人は環境いっぱいあるし、やっぱ興味ないのかな。

>37
そうですよ。最近あんまり行ってないけど。
すっ飛ばしててごめん。
0043名無しさんは14才04/01/30 16:10ID:0UGkyqKs
お休みだ−。やたー。
この週末にメイン関数かけるようにがんばろ。
0044名前は開発中のものです。04/01/30 20:58ID:ycVqZs1N
がんばれー
0045名前は開発中のものです。04/01/31 01:01ID:fqyHycYw
>>42
私はWinですがSDL,OpenGLのJavaラッパーを使って何かゲームを作ってみようと計画中ですyo!
0046名前は開発中のものです。04/01/31 01:34ID:ig+JRzZI
>>42
Javaでゲーム作ろうと思う人は
あんまりいないだろうな。
俺は、作ってるけどな。
0047名前は開発中のものです。04/01/31 10:17ID:w5l48wti
>>46
公開しよーぜ
0048名無しさんは14才04/01/31 22:12ID:hh2D93X9
なかなかメインにたどりつかない……。
モノ作るのって大変だね。わかってはいたけど。

最低スペックの目標はセレロン400MHzくらい……にしたいなあ。
挫折したらG4-700MHzくらいの予定。
0049名前は開発中のものです。04/02/01 15:08ID:MnR+Lyp0
私も久しぶりに何か作ってみようかな…
いつも悩むのは、速度調整をどうするかってところ。
ミリ秒単位で確実に時間を計る方法が見つからなくて、
30FPSとかで安定して動作させられないんです。
0050名無しさんは14才04/02/01 21:08ID:fOPkl1f+
ああ、今日もメインにたどりつかず……。

>49
普通はTimerでだいたい10msecくらいまでは測れるんじゃないかな。
それ以下は物理的に無理なハードが多い気がする。
安定動作は、う〜ん。
遅延時間が大きくなったらFPSを落とすとかはダメかしら?
0051名前は開発中のものです。04/02/01 21:14ID:BE2pVZMt
仮にアプレットなどで公開をするつもりなら、
初めから10〜15FPSで遊べるように作ればいい。
2Dでムリに30、60FPSと出す必要なし。
0052名前は開発中のものです。04/02/01 21:17ID:lw1srjwx
>>49
ハードウェア依存なので不可能
FPSに依存しないように作るべし
0053名無しさんは14才04/02/03 00:05ID:6rtDLibz
たしかBio100%の人が「マリオは偉大だ」って言ってたけど、
今、わたしはツクールも偉大だと思っていたりして。
……来年の夏ごろの公開を目指そう。
0054名前は開発中のものです。04/02/03 15:55ID:5vbFE2g9
普通、ゲーム開発するなら、まずツール類を作るものだ。
というわけで、ツクール程度が作れなければ話にならんよ。
0055名無しさんは14才04/02/03 19:01ID:6rtDLibz
そうだよねぇ。
先は長そうだし、まったりまったり。
ツクールはDelphiだよね。
あのデータファイルの圧縮は単純だけど意表をついていて、チョット感動した。
0056名無しさんは14才04/02/03 22:42ID:6rtDLibz
がーん!
Javaを1.4.1から1.4.2にアップデートしたら、ゲーム中で描画される文字の色が変わった!
どこかで初期化忘れてるんかなあ。あうあう。
0057名無しさんは14才04/02/04 00:06ID:LWgzCY+W
配列作ったくせに、要素newするの忘れてた。超おバカ。
でもついでに文字色変更のエスケープシーケンスのバグ退治完了♪
00584904/02/04 21:07ID:6w0e1fuL
ちなみに過去に作ったプログラムではこうしていたよ。
メイン処理を半無限ループでぶん回す昔ながらのやりかた。
その1は実行環境によって極端な誤差が出でしまうんだ。

その1
 スレッド1 while(終了条件){メイン処理;wait();}
 スレッド2 while(終了条件){wait(33);notify();}

その2
 while(終了条件){
  メイン処理;
  sleep(待ち時間);
  if(1秒に1回){
   直前の1秒間の描画回数をチェックして待ち時間を調整;
  }
0059名無しさんは14才04/02/05 00:00ID:3xSHt1O0
>49サンのやりたいことはTimer#scheduleAtFixedRate()でできると思うんだけどどうかな。
わたしは画面の描画これでやってます。
アクションとかじゃないから正確である必要とかゼンゼンないんだけどね。
00604904/02/05 21:29ID:Qsr/iS2M
ありがとう。早速Timer、TimerTaskクラスをチェック、
どれくらいの精度が出るかテストプログラムを組もうと
した矢先、気が付くと
> 導入されたバージョン:
>    1.3

_l ̄l○ アプレットで作ってるんだった…
exception: java.lang.ClassNotFoundException: java.util.TimerTask
※IE6.0 + MicrosoftVM で実行
0061名無しさんは14才04/02/05 22:59ID:3xSHt1O0
そっか。アプレットじゃ使えないんだ。
知らなかった。ごめんね。
0062名前は開発中のものです。04/02/05 23:55ID:DW9dyzsn
>>60
appletを動作させるためのHTMLタグで
sunのVMを使うように指定すれば使えます

ツールを利用すれば特に悩まないと思います
appletでTimerTask等が使えることは確認しときました

http://java.sun.com/j2se/1.4/ja/docs/ja/guide/plugin/developer_guide/html_converter.html
00634904/02/07 00:08ID:UiLI4Lv9
重ねてありがとう。
ヘタレな自分には即実装というわけにはいかないけど、TimerTask自体の
性質についてテストしてみます。
スレッドの作成を乱発しているせいか、「動きがカクる」頻度が>>58の2よりも
高いような気がします。
ドキュメントに「固定頻度実行」と書いてあるとおり、処理落ちが発生した
直後は遅れを取り戻すために速い回転でrun()が呼ばれるようです。
006449 テスト04/02/07 00:12ID:UiLI4Lv9
import java.applet.*;
import java.awt.*;
class TimerTaskA extends java.util.TimerTask
{
 public Component compenent;
 public int count;
 public void run(){
  Graphics gr = compenent.getGraphics();
  if(gr != null){
   gr.clearRect(0, 0, 100, 16);
   gr.drawString(count/100+"."+count%100, 4, 14);
   gr.drawRect(count%100, count/100+20, 1, 1);
   count++;
   gr.dispose();
}}}
public class TimerTestApplet1 extends Applet
{
 java.util.Timer timer;
 TimerTaskA timerTask;
 public void init(){
  timer = new java.util.Timer();
  timerTask = new TimerTaskA();
  timerTask.compenent = this;
  timer.scheduleAtFixedRate(timerTask, 0, 10);
 }
 public void destroy(){
  timer.cancel();
}}
0065名無しさんは14才04/02/07 12:53ID:fA3+Cn/e
さあ気をとりなおして、今日こそメイン!
0066名前は開発中のものです。04/02/08 20:53ID:P+SbX93B
Javaで作る2Dゲーで床とか壁の判定する時って、やっぱしifの類で
「自キャラ座標が壁の座標と一致したら、ボタン操作無効」
として一個一個地道にやってくしかないんでしょうか?
質問系スレが無いんでここで・・・。意見聞かせて下さい。
0067名前は開発中のものです。04/02/08 21:24ID:gFVP5jpw
答えはYES。ただ、どれだけ簡単にできるかはその人しだい。
0068名前は開発中のものです。04/02/08 21:37ID:bR1dx6jB
>>49

ゲーム処理用のスレッド内で、System.currentTimeMillis()を監視する、とか。
0069名無しさんは14才04/02/08 21:42ID:jDa33yn9
うーん。歩くのって意外と難しい。
どうしてもスケートやってるみたいになってしまう。
0070名無しさんは14才04/02/09 02:46ID:VUMO8CDO
ようやく自然に歩くようになったけど……重い。
10キャラを10fpsで歩かせると、すでに800M〜1GHzクラスのハードがいるなあ。
やっぱりJava3Dやらないと厳しいかしら。
0071名無しさんは14才04/02/09 02:47ID:VUMO8CDO
うう、夜更かししすぎた。今日はもう寝よ。
0072名無しさんは14才04/02/09 14:11ID:+ZIoUGKf
MacとWinでCPU利用率が倍くらい違うなあ。Winで実行するなら1.8GHzくらい必要っぽい。
何でこんなに違うのかしら……?
0073名前は開発中のものです。04/02/09 14:54ID:4GHKSFKN
sleepを上げれば改善される可能性がある
00744904/02/09 22:57ID:/GqD/yBB
>>66
ボンバーマンのように壁の大きさが全部同じなら、
2次元配列に壁データを入れておくことになるね。
進行方向の要素を数点調べて、全部空なら移動
できると。

ドンキーコングの1面のような面構成だったり、
動く床がメインの構成なら、66のように総当りで
調べていくのが良いと思います。

>>68 System.currentTimeMillis()
ミリ秒単位の時間をきっちり返す実装には
なっていないようです。
0075名前は開発中のものです。04/02/10 01:33ID:ttbTnUhw
>>64
スケジュールやるときfixedはやめとけ
スワップ入ったときいっきにはやまわしになるから

1.4でいいのならTimerTask+フリップやればほぼ垂直同期とった綺麗なの動いてるよ
垂直同期はビデオの設定によるけどね

俺作るとjavaのゲーム(1.4.2なら)全然おもくないんだけど
500MHzもあれば大概40fps以上はいける
0076名無しさんは14才04/02/10 13:08ID:xCsQuF6a
あ、スワップのことぜんぜん考えてなかった。
固定遅延で、自動調整しよっと。

でも40fpsってすごい……というか、わたしがオバカなコード書いてるだけか。
0077名前は開発中のものです。04/02/10 13:29ID:ttbTnUhw
どういったゲームかにもよるね

ゲーム自体の処理が重いのならそれの改善は厳しいかもしれないけど
描画自体は思ったよりネックにならない
2Dゲームの場合はね

600MHzあれば60fpsもだいたいCPU使用率70%以下で回る

ポイントはVolatileImageつかわないことか
あれは透過関連うまく動かないはずだからスプライト量増えれば増えるほど厳しい
メモリの中で処理して結果をバックバッファに書き込み、フリップとすればいい
そしてそのメモリの中で作るバッファの作成は
Image work = gf.getGraphicsConfiguration().createCompatibleImage(320,240,Transparency.OPAQUE);
って感じで作ればいい

速度を重視するなら16bppあたりのフルスクリーンモードに切り替えてこの320*240のバッファを
2倍にして書き込むだけ
640*480のソフト描画はDirectXでも厳しいのでやめるがよろし

フルスクリーンモードとウインドウモードの2つ用意した方がいいよ
0078名無しさんは14才04/02/10 14:01ID:xCsQuF6a
VolatileImage、こんな便利なImageがあったなんて!
……存在知らずに、自分で作っちゃったよ。すごいマヌケ。

重たいのは多分透過色を含む大きなImageをガンガン重ねて合成してるからだと思います。
きちんとクリップして無駄な描画省けば、少しは軽くなるかも。
640x480はDirectXでも重いのかぁ。困ったな。ていうか、見透かされてる……。

助言ありがとうございます。
画面サイズだけは絵描きさんの要望で削れないのですが、がんばって工夫してみますね。
0079名前は開発中のものです。04/02/10 14:31ID:ttbTnUhw
2DSTGじゃないのなら30fpsでもいいんじゃないかな
2DSTGだけは最低限40fpsってところ

640*480の描画は1GHzくらいを対象にしているのなら問題ない
たぶん開発中にまた世の中のマシンの平均スペック上がっていく
1年後には1GHzを要求スペックにしても問題ないような気がする

VolatileImageしらないってことはフリップとかやってなかったのか・・・
んじゃ、ここおしえておくか
http://www5.airnet.ne.jp/sakuraba/java/laboratory/JDK1.4/contents.html
いっておくけどこれ結構前の文章
べつに最近高速化された訳じゃないのだ
みんなjavaのグラフィックスまわりには注目してないのかねぇ
0080名無しさんは14才04/02/10 15:45ID:xCsQuF6a
作っちゃったよ、とか言って、大嘘でした。
説明よく読んだら、VariousImageは作ってたものとはぜんぜん違うものだった。ふう。

直描画できたんですね。URLありがとうございます。勉強しなきゃ。
ぜんぜん知らなかったです……って、SDKドキュメントの新機能の章にもしっかり書いてあるなあ。
読んでないのバレバレじゃん。
明日一日かけて、画像周りのクラス書きなおそっと。

わたしが作ってるのは2DRPGです。一応ツクール+αレベルが目標。
とりあえず、Javaだから遅い、とか言われないようにがんばるつもり。
0081名無しさんは14才04/02/10 15:47ID:xCsQuF6a
×VariousImage
○VolatileImage

Variousは自分で作ってた方だった。うー、ボケすぎ。
0082名前は開発中のものです。04/02/10 18:36ID:ttbTnUhw
2DRPGなら30fpsでもいいし
むしろ戦闘エフェクトあたりは重い方が溜があるかんじでいいかも
バテンカイトスは絵は綺麗でもそのへんがイマイチなのが大杉なんだよね

Java2Dのαブレンドは通常合成はあっても加算合成はないようなので
自分で実装することになるかもしれない
00834904/02/10 20:23ID:anba1aLx
イメージが湧かないのでサンプルを作ってみました。アプレットです。
http://www.geocities.co.jp/SiliconValley-Sunnyvale/6003/sample/wall1/
描画周りは最も単純な手法で、アプレットのgetImageで読み取ったGIFファイルを、
同じくcreateImage(width,height)で作成したバッファに描画しています。

私は「フラっとページを訪れた人が軽く遊んでいくゲーム」を目指しているため、
初心者がオールインワン型のWindowsパソコンを買って何も設定を変えていない
状態で、追加プラグインをダウンロードせずに動かなければならないという
条件を自分につけています。
そこで、描画効率、動作速度の安定、効果音・BGMの再生、セーブデータの保存方法
にはいつも悩まされます。

みなさんが想定しているターゲットユーザ・配布方法はどんな感じですか?
0084名前は開発中のものです。04/02/10 20:37ID:eScm2IF2
>>83
Pen3 1GHzでもJ2SDK1.4.2だとFPS=32, INTERVAL=24出たよ。
あと、隊列を組むのは正面衝突したときに先に処理した方だけが反転するからでは。
↓な感じ。
衝突前:人→←人
衝突後:人→人→
0085名前は開発中のものです。04/02/10 21:37ID:ttbTnUhw
超低電圧版PentiumM1GHzで
J2SE1.4.2
fps32/interval29
CPU使用率10%くらい

軽いやね
00864904/02/10 23:14ID:anba1aLx
調子良く動いているみたいですね。名無しさんは14才さんのように
ある程度大きな画像を扱うとなると、この方法ではきつそうです。

話は飛びますが、音の再生のサンプルを作ってみました。
http://www.geocities.co.jp/SiliconValley-Sunnyvale/6003/sample/sound1/
データの通信量を極力少なくし、かつ多くの環境で再生させる方法って無いでしょうか?
0087名前は開発中のものです。04/02/10 23:23ID:ttbTnUhw
画像はごまかしごまかしでも1.1で扱えるからいいけど
サウンド周りがまともになったのは1.3からだしなぁ
きびしいやね
00884904/02/10 23:24ID:anba1aLx
>>84
なるほど、二人とも振り返るようにまじめに処理しないと、
自然に動き回ってるようには見えないわけだ。
00894904/02/10 23:30ID:anba1aLx
>>87
周波数も8000Hz固定だし、なんだかブツブツ音が途切れる感じ。
短い音を連続再生すると遅延も発生します。
ミニゲームを作る分には、それでも十分なんですけどね。
実行環境がヘタレな方がライトクリエイター(?)には有利というし。
0090名前は開発中のものです。04/02/10 23:48ID:ttbTnUhw
今だとランタイムのインストール簡単にさせることできるから
俺は苦労したくないな
http://www.java.com/ja/download/windows_automatic.jsp

サウンドだけはどうしようもなくてJava2に逃げたへっぽこの話なんで
我が道突き進んでくれぃ

ほんと全く解決不可能だった
効果音だけならまだいいけどねぇ
0091名無しさんは14才04/02/11 00:38ID:UcjbfHdV
FPS 28 INTERVAL 1くらいでした。

で、描画周りを全部書き直して、かなりの高速化に成功。
というか、元のが無駄が多かったんですけど。
400MHzくらいあれば10〜20FPSで普通に動きそうな感じ。
これから処理増やしていくとどうなるかわからないけど。

VolatileImageでもう少し早くなりそうなんですが、
わたしのところではcreateCompatibleVolatileImageの中でなぜか
しばらくするとOutOfMemoryErrorが出ます。
他のパソコンで試したらエラーは出なかったので、とりあえず相性かなぁ
とあきらめました。
BufferStrategyも試してみたけど、かえって遅くなっちゃったので保留です。
0092名前は開発中のものです。04/02/11 01:17ID:OWgEanPU
ループの中ででかいVolatileImageガンガン生成してるとか?
その変数のスコープをみてみるべし

BufferStrategyはバッファサイズを2にしてフリップ処理をしてますよね?
これ、DirectX・・・というかビデオまあ割の知識あるならわかるけど
ほとんどの環境で垂直同期とります
単純にベンチとるとマシンパワーが低い場合fpsは少し落ちますが
ティアリングのない綺麗な描画になります

0093名無しさんは14才04/02/11 13:04ID:UcjbfHdV
最初はでっかいVolatileImage作りすぎたせいだと思っていろいろ変えてみたんだけど、
どうやらそうじゃないみたい。
最終的には640x480を毎秒10回だけ生成して、古いのはすぐにflush&null代入
としてみたんだけど、やっぱりおんなじエラーになりました。
描画方法変えてBufferStrategyを使えばVolatileImageは使わないですむようにしたので、
とりあえず問題解消です。解消というか、逃げただけだけど。

話し変わりますけど、MacのVMはダブルバッファリングとかしなくても
画面がちらつかないんですよ。
パフォーマンス調べようと思ってバッファリングしない版を試しにWinに持って
いったら、画面ちらちらでひどかったのでびっくりして元に戻しました。
0094名前は開発中のものです。04/02/11 13:52ID:OWgEanPU
VolatileImageでの不具合がでた環境って具体的にはなんだ?
ビデオチップあたりが聞きたい

MacってMacOSXか?
あれはOS自体がウインドウバッファをちらつかせないように描画しているから
Windowsみたいなのとだいぶ違う

OSXのほうがシンプルでいいけどね
つーか、今GUI新設計したらだれでもそう作ると思う
0095%96%bc%96%b3%82%b5%82%b3%82%f1%82?P%82S%8d%cb04/02/11 14:04ID:UcjbfHdV
カードはGeForce FX 5200です。32MB。
やっぱりMacOSXのVMの問題なのかなあ。WinのSunVMでは問題でませんでした。
0096名無しさんは14才04/02/11 14:05ID:UcjbfHdV
がーん!名前が化けた。
0097名前は開発中のものです。04/02/11 14:14ID:OWgEanPU
基本的にヒープメモリが不足してなければ大丈夫
VolatileImageはVRAM足りないとヒープメモリ使うから

vi.getCapabilities().isAccelerated()

って感じで調べてみるといい

MacOSはその辺の実装が違うのか、デフォルトのメモリMAXサイズが小さいのか
MacOSの起動時のオプション違うかもしれないからわからないけど
ヒープサイズの可能性も高そうだから
-Xmx128M
とヒープメモリの設定してみては?
0098名無しさんは14才04/02/11 14:22ID:UcjbfHdV
ヒープの方は大丈夫だと思います。
Runtime.freeMemoryの戻り値は、OutOfMemory出るときも十分あったし。
なんでエラーになっちゃうのがわたし的には不可解。
isAcceleratedとかヒープの設定は後で試してみますね。
0099名無しさんは14才04/02/11 14:54ID:UcjbfHdV
isAcceleratedを試してみました。
残念?ながら常にtrueで、OutOfMemoryが出るときもfalseにはなりませんでした。

貼ってもしょうがないけど、こんな感じ。
java.lang.OutOfMemoryError
at java.nio.Bits.reserveMemory(Bits.java:619)
at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:95)
at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:285)
at apple.awt.DataBufferNIOInt.getBufferOfSize(DataBufferNIOInt.java:135)
at apple.awt.DataBufferNIOInt.<init>(DataBufferNIOInt.java:31)
at apple.awt.IntegerNIORaster.createNIORaster(IntegerNIORaster.java:26)
at apple.awt.CGraphicsConfig.createCompatibleImage(CGraphicsConfig.java:54)
at apple.awt.OSXOffScreenSurfaceData.createData(OSXOffScreenSurfaceData.java:33)
at apple.awt.OSXVolatileImage.createHWData(OSXVolatileImage.java:77)
at apple.awt.OSXVolatileImage.initAcceleratedBackground(OSXVolatileImage.java:87)
at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:98)
at apple.awt.OSXVolatileImage.<init>(OSXVolatileImage.java:70)
at apple.awt.CGraphicsConfig.createCompatibleVolatileImage(CGraphicsConfig.java:48)
at jp.gr.java_conf.nocon.reday.base.UserInterface.paint(UserInterface.java:116) //JFrame.paintをオーバーライド
at javax.swing.JFrame.update(JFrame.java:392)
まだ続くけど以下略。
これはバグパレード行きかも。
0100名前は開発中のものです。04/02/11 15:11ID:OWgEanPU
paintってもしかして毎フレームVolatileImage確保してるの?
それは問題ある希ガス
0101名無しさんは14才04/02/11 15:20ID:UcjbfHdV
がーん!毎フレーム確保しちゃいけないの?
……使い回しやってみます。
0102名無しさんは14才04/02/11 15:28ID:UcjbfHdV
同じVolatileImage使い続けるようにしたら怒られなくなりました。
ああ、ぜいたくは敵だったのね……。

エラーも出ないし、処理も速くなりました。
本当にありがとうございます。
がんばって完成めざしますね。
0103名無しさんは14才04/02/12 17:30ID:7aKkxoTY
日記を書いているような気がする今日この頃。

今日は画面のスクロールに挑戦中♪
あっさりできるかと思ってたら、意外と強敵。
画面更新通知のイベントがループしてハングしてるし……困った。
0104名前は開発中のものです。04/02/12 17:50ID:b4hZT/7C
イベントって自分のフレームワーク内のことだよね?
Swingの描画イベントは無視していいよ
0105名無しさんは14才04/02/12 19:30ID:7aKkxoTY
あ、そうです。自前のイベントです。
Swingのイベントはぜんぜん見てなかったり。

スクロールの契機に「絵が移動しました」イベント流用してるからいけないんだなあ。
「わたしを見て!」イベントを新設しよっと。
0106名無しさんは14才04/02/13 18:10ID:hMwbcsup
イベントはいまいちイメージがわかなかったので、
Cameramanインターフェース作成ちゅう。
我ながら安直なネーミングだなぁ。
そんな感じで、明日くらいにはぐりぐりスクロールできる予定。

……進みが悪い日はいまいち書くことがないね。
0107名無しさんは14才04/02/14 15:14ID:/FZU4ECn
スクロール完成♪

今気づいたけど、topを見てるとメモリ消費量が毎秒40kB位ずつ増えていくのが危険な予感。
0108名前は開発中のものです。04/02/14 16:36ID:AfuYsNqY
メモリーリークじゃなければメモリ使用量は気にしなくていいと思う
RuntimeのFreeMemoryあたりでGC動いてるか監視するのがいいね
■ このスレッドは過去ログ倉庫に格納されています