トップページ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あたりを参照
07527382007/01/28(日) 03:54:34ID:rcpB4oX3
public Skills getSkill(String jobName,int No){
 return (Skills)Class.forName("skills."+jobName+"$skill"+No).newInstance();
}
try~catch文は省略していますが
この様にして内部クラスをオブジェクトとして得ました。
例としてSoldierクラスの内部クラスです。
public static class skill1 extends Soldier{
 public skill1(){
  skillName="剣士1";
 }
}
JVMがstaticに関してどのタイミングでメソッドをロード?するのかは
分かりませんが 上述の通り、「上手いやり方」が見つかるまでこれで行こうと思います

初心者なのに、dojaはきついなぁ…
String.splitもStringTokenizerも無いので自分で作ってます…
0753名前は開発中のものです。2007/01/28(日) 12:06:30ID:caDqapim
dojaって最初にいってくれ
そういうスレがあるはずだから

また、容量が少なかったり速度が出なかったりするような環境の場合、
本来あるべきアルゴリズムを端折ることが多いから勉強にはむかんね
0754名前は開発中のものです。2007/01/28(日) 20:06:02ID:ItnxVFSk
>>752
Skill を扱いたいのか Skills を扱いたいのかよくわからんが
int でナンバー振ってサブクラスがガチガチに定義するんなら
Skill の配列かリストで済むんじゃないのか

public abstract class AbstractJob implements Job {
 protected Skill[] skills;
 // ジョブのスキルを返す
 public Skill getSkill(int no) {
  return skills[no];
 }
}

というかリフレクションの使いどころを完全に間違えてる
あれはいざという時に使う伝家の宝刀みたいなものだ
0755名前は開発中のものです。2007/01/28(日) 23:07:22ID:caDqapim
こまめにさしかえるような汎用的なフレームワークつくりたいのならインスタンスの生成の仕方それでもいいけど
dojaとかいってることからしてそういう目的ではないだろうしな

RPG用フレームワーク作るんです!とかいうのならなおさら

基本的にメソッド先で生成したオブジェクトを返すって使い方はしないよ
自前で登録してコンテナへ登録、もしくはコンテナが自動的に生成のどちらかかと
そしてコンテナからインスタンスを取得する。場合にっては使いまわしたり
07567382007/01/29(月) 00:36:23ID:X8Jeor0A
>>754-755
お二方とも有難うございます
稚拙なコードを晒すのは恥ずかしいですが、本当に勉強になります。
生成時にコンテナに追加という形でやってみたいと思います。
754さんの意見も大変参考になります。感謝しています。
0757名前は開発中のものです。2007/02/17(土) 08:06:32ID:L15CXcqa
■いきなりびっくり Java 攻撃
古い記事だけど起動が遅いのは今も変わらないよな
ttp://www2.plala.or.jp/Cool/okite/red02.html

■Flashで動作する3Dエンジン「Papervision3D」
ActionScriptに浮気したくなる今日この頃
ttp://gigazine.net/index.php?/news/comments/20070212_papervision3d/
0758名前は開発中のものです。2007/02/17(土) 15:10:04ID:5v908nqH
>>757
アプレットがすさまじかったのは原因はネスケで使ってたシマンテックJITの出来の悪さだろ
あれ起動中にネイティブに全部変換してる

おかげで1.3から標準でHOTSPOTVM搭載されるようになってVMのサイズが何倍にも膨れ上がったわりに
起動時間は何分の一にもなった

その後VMの起動速度はゆるやかに改善されていくことになるがJavaSE6は起動が急にはやくなったのは確か

適当なWEBに置くコンテンツとしてはFlashなりなんなりでいいだろう

ただ、規模がある程度大きくなり本格的なアプリとなれば別
0759名前は開発中のものです。2007/02/24(土) 22:19:26ID:/rYZcxU7
Arkanae
http://edony.tuxfamily.net/~grad/arkanae.tuxfamily.org/en/index.html
ソースコードもあり
こんなのがあったとは知らなかった
0760名前は開発中のものです。2007/02/25(日) 00:29:28ID:PImIuZ8L
>>757
プログラミングを行う観点で見れば、
「開発環境死亡・ライブラリ設計死亡・Flash9でもJITの性能しょぼい」
と選択肢にも挙がらないぞ。

アニメーション作成ツールとして見れば素晴らしいが、
残念ながらアプリ開発には使い物にならない。
0761名前は開発中のものです。2007/02/25(日) 12:31:39ID:6L67UnbH
age
0762名前は開発中のものです。2007/02/25(日) 19:01:35ID:LGf8AXIi
>>760
「使い物にならない」のがFLASHなのか、おまいのプログラム開発力なのか、世の中の「FLASHアプリケーション」でも見ながらもう一度考えてみるんだなw
0763名前は開発中のものです。2007/02/25(日) 21:47:35ID:o7vkhh81
>>762
出来ることできないことがあってFlashはまだまだ制限は多い
アプリの種類によってはFlashでもいいこともあるが、開発コストとかそういうのもみてからな
0764名前は開発中のものです。2007/02/26(月) 03:01:50ID:3IqZBjOx
この本はコードサンプルがJava
Physics For Games Programmers
http://www.amazon.co.jp/exec/obidos/ASIN/159059472X/
0765名前は開発中のものです。2007/02/26(月) 21:37:19ID:g0XTbe0A
good job!
0766名前は開発中のものです。2007/02/26(月) 22:47:55ID:YymhnNUL
いただきました!
ttp://www.apress.com/book/supplementDownload.html?bID=418&sID=2642
0767名前は開発中のものです。2007/02/27(火) 17:21:30ID:ZjZJQFQd
http://woomy.dip.jp/hiyoriyama/index.html
初心者なのですが、こういう感じのはFlashで作った方が簡単なのですか?
0768名前は開発中のものです。2007/02/27(火) 17:56:16ID:B4ufeums
楽なのはJavaのほうかと
0769名前は開発中のものです。2007/02/27(火) 18:54:43ID:ZjZJQFQd
そうなんですか! ありがとうございます ┌●ペコ
本屋行ってJavaの参考書を見てきます。
0770名前は開発中のものです。2007/02/27(火) 19:00:07ID:B4ufeums
Javaのゲームの本たくさんあるけど、比較的まともなのは14歳からとかいうやつだけだったような
比較的新しい書籍でもなぜか10年前のJavaの環境用につくっていたりするし

>>11のところにあるライブラリやゲーム、過去の日記がわりと参考になる
0771名前は開発中のものです。2007/02/27(火) 19:02:10ID:OwhxanSJ
java は覚えなきゃいけないことが多い。
もちろん java で覚えた事は他の言語でも役に立つけど。

つまり初心者が目的の作品を完成させるまで、
という意味では flash の方が簡単。

プログラミングそのものに興味があるなら java
それらしいものを作りたいだけなら flash でいいとおもう
0772名前は開発中のものです。2007/02/27(火) 19:10:29ID:IkeFh1JT
RADで言語が隠ぺいされてるflashと言語そのものjavaを比べて覚えること沢山てw

保守性考えたらjavaだよな。
javaゲームはハードウェアアクセラレータ効かんとバリバリの3Dとか無理だが。
0773名前は開発中のものです。2007/02/27(火) 19:12:53ID:B4ufeums
プログラミング自体がはじめてで本当の取っ掛かりがほしいなら昔のBASIC感覚で使えるHSPあたりだろうな
だが、flashは開発環境がお粗末なのでお世辞にも初心者が作りやすいとはいえないのが癌

JavaSE6ならJavaスクリプト+Javaのライブラリという使い方も出来るがIDEのお世話になることも出来ないので
ある程度の規模になるときつい
0774名前は開発中のものです。2007/02/27(火) 19:50:28ID:3CmlaFoI
Flashは仕様外の動作をすることがあるから
それを避けるためのオマジナイが多いとか聞いたけどこれは本当?

あとは>>771に同意。
0775名前は開発中のものです。2007/02/27(火) 20:47:13ID:IkeFh1JT
そう言う場合は他人が作ったフレームワークのバグリスク担いでフィードバックしてやるのが
バザールモデルの基本・・・

とか言ってみる。
結局間接的にOSSなライセンスされてんだし。
0776名前は開発中のものです。2007/02/27(火) 21:20:09ID:1qONjX2a
>>767
ずいぶん長い間いじってる割に画面が小さくて見づらい、flashの方が簡単に作れるんじゃないの?音もかなり悪いし
0777名前は開発中のものです。2007/03/01(木) 11:25:25ID:Q/MrFJlJ
上のページ見てたらjavaだけでBGMとか効果音出るんですね
けっこうゲームらしくみえる
0778名前は開発中のものです。2007/03/01(木) 12:14:46ID:ycm+eBTU
音は普通にネイティブと変わらんよ
むしろFlashのほうが制限が大きすぎる
0779名前は開発中のものです。2007/03/01(木) 21:03:18ID:8CEVVUMC
midiとかwavファイルはJava1.4以降だったかも・・・
アプレットからの利用では制限があったような気がする。

ひょっとしてJava1.1辺りでも波形を生成して発音可能?
0780名前は開発中のものです。2007/03/01(木) 21:26:44ID:J8EC7Q4J
>>762
AS2で3000行以上のコーディングが必要なもの書いてみろ。
開発環境は酷い、ランタイムエラーを吐かないで正直死ねるぞ。
0781名前は開発中のものです。2007/03/01(木) 21:28:47ID:BnQANlH3
いまActionScript語るならFlashよかFlexの方がこのスレ的だろな

それでもアポロ登場まではアプレット比較前提だが
0782名前は開発中のものです。2007/03/01(木) 22:56:33ID:J3C3KVJN
>>779
JavaSoundは1.3以上

>>781
ゲーム用途ならWebStartのほうがいいんじゃね?
0783名前は開発中のものです。2007/03/02(金) 04:04:27ID:Isc+NXUT
外国じゃけっこうwebstart見るけど日本じゃ見ないな。

開発者がwebstartに対して無知だから使いこなせてないんじゃね?

鯖丸ごと立てるかホスティングしちゃう他国と違ってレンタルスペース主体の日本じゃwebstart置けないしね。

クリック一つで必要なもん全部落としてキャッシュして後は差分だけネット越し・・・他はスタンドアローンと同じってのは使う側から見れば楽で良い。

同じ事はMEのAMSで出来るけどあっちは実装依存ヒドスw
0784名前は開発中のものです。2007/03/02(金) 12:01:55ID:AlxNYkg4
差分ダウンロードがつかえるかどうかはたしかに鯖次第だが、配置だけならApacheとかなら大丈夫だぞ
0785名前は開発中のものです。2007/03/02(金) 22:28:33ID:e7ng/jU4
レンタル鯖でもいけるってこと?
0786名前は開発中のものです。2007/03/03(土) 00:52:32ID:LWiJuDbd
JNLPファイルのMIMEタイプの設定が出来る or 既にされている所だったら
0787名前は開発中のものです。2007/03/03(土) 07:49:54ID:94HMLa1l
でもレンタルにwebstart置いたら鯖に負荷掛けそうで気が引ける・・・
0788名前は開発中のものです。2007/03/03(土) 09:09:45ID:Lb6a9eHr
そんなに人気出るのかお前のゲームは
0789名前は開発中のものです。2007/03/03(土) 09:10:53ID:vVu9iFKK
webstartはアプレットより負担かからんだろ
0790名前は開発中のものです。2007/03/03(土) 12:49:41ID:e8MDKGEx
同じだろ
0791名前は開発中のものです。2007/03/03(土) 14:05:57ID:YkFSkvir
WebStartはバージョンチェックやオフラインモードがある時点でアプレットやFlashより負担は少ない
0792名前は開発中のものです。2007/03/03(土) 14:54:27ID:S2NfJpKC
アプレットが常に鯖と通信してる訳じゃないだろ?
0793名前は開発中のものです。2007/03/03(土) 16:27:50ID:cZ+W9Vw8
なるほど、クライアント側でJ2REをインストールして、
更にJava Web Startもインストールしないと動かないんですね。
ttp://sdc.sun.co.jp/java/docs/products/javawebstart/ja/download-windows_ja.html

helloサンプルがダウンロードになるので、混乱してしまった。
今のところJava Web StartはWindows版だけ?
0794名前は開発中のものです。2007/03/03(土) 17:03:50ID:nfMBIjTB
Macもあるお
0795名前は開発中のものです。2007/03/03(土) 17:31:56ID:cZ+W9Vw8
おお!Macでも!

夢のJava Web Startのデモが動いた〜
ttp://java.sun.com/products/javawebstart/demos.html

もう少しアクションするゲームが見たかったなあ
なぜか日本語サイト行くと動かないです。
0796名前は開発中のものです。2007/03/03(土) 17:40:52ID:6WDz0MUg
jreにjws付いてなかったけ。
jdkだけだった?
0797名前は開発中のものです。2007/03/03(土) 17:51:56ID:lyCQr1W4
JREについてるよ。

ttp://www.java.com/ja/download/faq/java_webstart.xml
>Java Web Start ソフトウェアの入手
>Java Web Start ソフトウェアは、Java Runtime Environment (JRE) のコンポーネントで、JRE と一緒にインストールされます。
0798名前は開発中のものです。2007/03/03(土) 18:13:05ID:xt9rX0Kw
>>792
ブラウザ閉じればまたダウンロードが入ってしまう
あとは署名関係が5.0から柔軟になったのでライブラリが使いやすくなったというのは大きい
0799名前は開発中のものです。2007/03/03(土) 21:37:25ID:4m5N8dVe
AppleはSunに金払ってJavaの正式版を出してもらえよ
0800名前は開発中のものです。2007/03/03(土) 23:59:20ID:sBNSOExJ
MacOSXのJVMは、SunのJVMを元にAppleが手を加えたバージョン
だったと思うのだけど...
0801名前は開発中のものです。2007/03/04(日) 00:33:57ID:u4tLbN0a
>>798
ブラウザのディスクキャッシュがある

>>800
sunがハードウェアアクセラレータ利かす前にcocoaと統合してOpenGL使っちゃったから描画周りが違ってたり、5.0の途中までしか出てない。
0802名前は開発中のものです。2007/03/04(日) 01:51:19ID:KQd1C5T2
アプレットだとオフラインモードやデスクトップ統合がないからダメすぎ
0803名前は開発中のものです。2007/03/05(月) 22:47:43ID:b9ULYpEb
Andrew Davison's Home Page at PSU
http://fivedots.coe.psu.ac.th/~ad/
http://fivedots.coe.psu.ac.th/~ad/jg/
http://fivedots.coe.psu.ac.th/~ad/jg2/
0804名前は開発中のものです。2007/03/06(火) 14:55:45ID:VaqQcumj
コメント書き忘れたけど、下の本のPDFが読めるよ。
Pro Java 6 3D Game Development(発売予定)
Killer Game Programming in Java
0805名前は開発中のものです。2007/03/07(水) 04:01:52ID:uOMRHvf+
win2k と me でデュアルブートしてるんだけど (つまり、完全に同一マシン)
同じ Java5 SDK、同じ DirectX8(笑) を入れたはずなのに
2k で普通にサクサク動く画面が me ではものすごく重くて意外。

ウィンドウモードでのゲームを作りたくて、
あらかじめ BufferedImage から int[] を取得しておいて
そいつに描画して JFrame に貼り付ける、という処理を
wait() と Timer、notify() を組み合わせる常套手段で回してるんだけど
このどこかで 9x系 = 本質的に 16bit てのが足かせになってるのかな。。。
タイマの精度か、synchronized のコストか。。。

今まで C++ で書いてた時は、ここまでの差は見た事なかったんで
ちょとショックですた。。。
0806名前は開発中のものです。2007/03/07(水) 11:55:36ID:zPOySlRd
画面の色深度が違うとか

ソフトウェア描画は60fpsやるなら320*240くらいが限界だね
0807名前は開発中のものです。2007/03/08(木) 06:19:38ID:K32nYRwN
DirectX8ならVGAカードとドライバは?
directX9以降のカード+ドライバだとdx8の対応がいい加減になって来てる。

まあ、javaが5.0ならハードウェアはあんま期待出来んが・・・
0808名前は開発中のものです。2007/03/09(金) 02:15:59ID:De8bQ7Op
レスがついてるとはおもわなかた。サンクシコ。
色深度は両方とも32bit。
カードは6年前のDX8全盛期のもの。
だからおいらなかなかDX9に手出しにくいのですよ。

そんなわけで今プロファイラ勉強中。楽しくて萌え。いや萌えとかないけど。
0809名前は開発中のものです。2007/03/09(金) 02:36:59ID:uJO/ivat
タイマー周りはNTカーネルと9xカーネルとでまったく違うから
組み方によっては差が出るだろうね

プロファイルとればどこが遅いのかすぐにわかるはず
勉強することもないのでは?
IDEが一発で円グラフや棒グラフでビジュアル化してくれるし
0810名前は開発中のものです。2007/03/09(金) 04:25:06ID:dk7DCFkt
タイマーの差異でfps固定にミスってるとか描画性能が出てない上にディスプレイが32bitだからとかか・・・どっちかてとCPU性能かな?

こりゃベンチマークでマシン側の2Dと3D性能調べた方が良いね。javaの問題じゃなさそう。FF11がDX8世代だからちょうど良いと思うよ?

後はまあ、メモリの転送速度とか?java自身は十年前でも徹底的に叩きあげればそれなりに出たからね。
下手するとDX8末期に出た
イリュージョンのエロゲすら危ういかもしれんし・・javaで演算量を馬鹿みたいに増やしたベンチ組むと顔出すかも。

5.0だと初めから性能が大方バランス良く出てるから叩き甲斐の無いイケナイ子になってしまって残念。

6.0なんてそりゃあもう・・・再コンパイルなしであの速度はビビった。調教師いらねぇ。
けどサポートがxp sp2以降なんだよね。
vistのドライバが出そろってから乗り換えようと思ってる奴には正式サポートはなしですか?
0811名前は開発中のものです。2007/03/09(金) 10:54:20ID:pyER6LIF
>>810
6.0っつーのはJava SE 6のことか?

どうでもいいことかもしれんが、Java SE 6のサポートはWindows2000以降
(厳密にはWindows2000以降とは書かれてないが面倒なので他バージョンは省略)。
XP SP2以降でなければならないとはどこにも書かれていない。
ていうかすでにSunは6.0といった名称は使っていない。Java SE 6。

こういうことは調べてから書いてくれよな。
そういう俺はWindows2000ユーザー。
サポートがXP SP2以降とか書いてあったので焦ったぜ。
0812名前は開発中のものです。2007/03/09(金) 12:18:07ID:e7LFbbBG
xp sp1にjdk6入れたときテストしてないって出たよ。
動くがsp2移行にしろインストール続けるか?って聞かれた。

システム要件の所にはサービスパックの事までは書いてないはずだし。

書いてあるのは98,MEはサポート外ってだけ
0813名前は開発中のものです。2007/03/09(金) 21:59:28ID:9+hAo8dr
>>770
> Javaのゲームの本たくさんあるけど、比較的まともなのは14歳からとかいうやつだけだったような

そう、15歳からはじめる Javaゲームプログラミングとかいう題名の本、結構良いよね。
とにかく、読みやすいし、アクションゲームの基礎をきっちり学べる。
画像、MIDI,、wav、地形スクロール、タイマー とか。


ただし、この本を買うのは恥ずかしい。
あと、はがきを送ると、オマケPDFがもらえるとあるのだが、まったく返事なかった。
サポート宛にメール送っても返事も返さない出版社である。
0814名前は開発中のものです。2007/03/09(金) 23:51:00ID:QfQeHSSr
おいおいサポートめちゃくちゃだな
0815名前は開発中のものです。2007/03/10(土) 08:06:06ID:5n5eAt21
ラトルズか、あそこはHSPシリーズとか(吉里吉里で)同人ゲーの作り方の本とか一見厨臭いけど
15歳からはじめるjava〜は当たりだった。

pdfはこれか
ttp://www.rutles.net/books/134.html

だれかこれ読んだ事ない?
ttp://www.amazon.co.jp/Javaゲームプログラミング-アルゴリズムとフレームワーク-長久-勝/dp/4797318422/ref=pd_sim_b_3/250-1688549-7177063
0816名前は開発中のものです。2007/03/10(土) 09:32:39ID:4+e7EI8M
18歳から始める・・・が必要だな
0817名前は開発中のものです。2007/03/10(土) 11:21:26ID:+DX9YtFE
ゲーム作りが初めてなら悪くないとおもうんだけど
古いJavaで動くように書かれてるんだよね。

新しいJavaを使いたかった俺としては少し物足りなかった。
0818名前は開発中のものです。2007/03/10(土) 12:10:01ID:xgekqMww
>>816
エロゲでも作る?

>>817
1.4.2,5.0,6と全部別モンだから新しいっても書く方はバージョン毎に出せるよね。
何処ぞのeclipse本の様に
0819名前は開発中のものです。2007/03/10(土) 12:30:12ID:/HVMBhqB
>>817
どの本について?

>>818
最新版対応とかかかれていて1.1時代のコードの本大量にあるから困る
音を出すにはauファイルにコンバートしましょうとかみると泣けてくる
なんで10年前のままなんじゃぁと
0820名前は開発中のものです。2007/03/16(金) 02:12:26ID:xob5GmNS
>>819
やさしいJava第二版なんて5.0対応とか言って触れてる言語仕様は前版(1.4.2)のままで5.0仕様には一切触れずにコードもなく加筆しただけだった気ガス・・・
ただ単にこの本のサンプルコードがそのまま5.0のコンパイラ通るだけ。

当たり前だのくryと言いたい所だが小一時間・・・
0821名前は開発中のものです。2007/03/21(水) 20:05:26ID:PxlWoCAm
ちょっと質問があります。

[Javaでゲーム作りますが何か?]ttp://javagame.main.jp/
を見ながらコーディングしています。
[ボールを動かす]http://javagame.main.jp/index.php?%A5%DC%A1%BC%A5%EB%A4%F2%C6%B0%A4%AB%A4%B9
で挙動が理解できないことがあります。
サンプルどおりうつと、おもったどおりなんですが、クラス構成を変更すると、移動元のボールが削除されず、棒状態で描画されてしまいます。
ソースをミテモ理由が分からなかったのでコメントをもらえないでしょうか?

・変更後クラス構成
Sample.class
MoveBall.class
MainPanel.class

・実装
Sample -> main()があり、main()内ではMoveBallインスタンス、MoveBall.work()呼び出し の2つ
MoveBall -> サンプルとほぼ同じ、main()内のインスタンス化を削除、main()内の処理をwork()に変更
MainPanel -> サンプルと同じ

・環境
JDK1.5.0_11
Window Vista
0822名前は開発中のものです。2007/03/21(水) 20:14:18ID:p5zCnQO1
ほぼおなじとかじゃわからん
ソースあっぷしてもらわんと
08238212007/03/21(水) 21:52:26ID:PxlWoCAm
ふじこ
自己解決しますた。
>>822スマソ、おっしゃるとおりでした。クラス構造はまったく関係ない箇所でした。

何がおこったのか簡単に書いておきます。

MainPanel(JPanelのサブクラス)内に、コンポーネントを描画するメソッドとしてpaintComponent()があるのですが、その中で
paintComponent(Grahics g) {
 super.paintComponent(g);
 //以下青いボールの描写が続く
}
と書く箇所で、以下のミスをしていました。
super.paintComponents(g);

本来JComponent.paintComponent()を呼び出すのを、Container.paintComponents()を呼び出してしまったのが原因でした。

#JComponent.paintComponent()とContainer.paintComponents()の違いは良く分からず
ttp://java.sun.com/j2se/1.5.0/ja/docs/ja/api/javax/swing/JPanel.html
0824名前は開発中のものです。2007/03/21(水) 22:02:54ID:p5zCnQO1
つーか、親のpaintComponent呼び出す必要はないと思うぞ
普通にfillしたらええ
08258212007/03/21(水) 23:10:05ID:PxlWoCAm
>>824わざわざ補足までありがとう。
しかし現状ではなぜ必要/不必要なのか、分かりません。
Java Tutorialに引き篭もってきます。λ............
ttp://java.sun.com/docs/books/tutorial/ui/index.html
0826名前は開発中のものです。2007/03/22(木) 00:48:34ID://UyzQId
Swingのソースコード読んで実装が何やってるか見た方が理解が早いと思うよ
0827名前は開発中のものです。2007/03/29(木) 03:53:53ID:V9bhDi93
Java で高速(fps で管理される)ゲームを作ってますが、フルスクリーンを使うと速度が激遅になってしまいました。
自分で調べてもこれ以上わからなかったので、お力を貸して頂けないでしょうか?

単純に、Sun のチュートリアルのとおりに排他的にフルスクリーン化しました。
↓のようにゲームループを作って、アクティブレンダリングを行い、
もちろん bufferStrategy を使ってページフリッピングを行っています。

↓のを1秒間に実行できる回数が、ウィンドウモードに比べて
フルスクリーンだと激減します。(→800x600x32xUNKNOWN)

do {
update();
Graphics2D g = (Graphics2D)bs.getDrawGraphics();
rendering(g);
g.dispose();
if(!bs.contentsLost()) bs.show();
}

これが、αを使ったりすると、ウィンドウモードでは 40fps 出るのに対してフルスクリーンでは 3fps。
明らかにお前のやり方間違ってるということですよね。
rendering(g) をコメントアウトしたときでも、ウィンドウモードは 1000fps、
フルスクリーンで 60fps でした。この60という数字を見るとふと505さんの発言に関係している気がしたんですが、
調べてもわかりませんでした。ここを見れば?でも結構ですんで、よろしくお願いします。
0828名前は開発中のものです。2007/03/29(木) 09:34:49ID:DOhi2zRK
そういえばフルスクリーンの時にDirectXかOpenGL使う指定したら描画速度上がるんだろうか?
0829名前は開発中のものです。2007/03/29(木) 16:17:47ID:TdF2VMR1
まず前提条件としてウインドウモード時の色深度

あとJava2Dのアルファブレンドはソフトウェア描画なのでネイティブなVRAMにバッファが置かれると大幅に遅くなる

そもそもフルスクリーン時で、というか高FPS時にイベントベースでの描画はつかうものではないぞと
0830名前は開発中のものです。2007/03/29(木) 17:47:03ID:QM1oZ8YS
javaのDirectX/OpenGLの使用はどちらかというとDesktop Javaの一環でフォントや図形の描画品質を上げる為に
それを使ってて描画速度を上げる為のものじゃないってイメージだったけど
それで合ってるって事かな?
08318272007/03/29(木) 18:09:59ID:V9bhDi93
ウィンドウモードは解像度 1024x768x32 の画面上に
800x600 のウィンドウを作ってます。フルスクリーンでは 800x600x32 にしました。
ウィンドウの初期化時にフラグでフルスクリーンとウィンドウモードを場合分けしてます。
要するに描画ルーチンはウィンドウモードでもフルスクリーンでも
同じゲームループ(上に描いたやつ)を使ってます。
αを使ったら激遅になるのはわかってますが、αを使ったときに
フルスクリーンでここまで遅いというのが納得いかなかっただけです。
このやり方ってイベントベースっていうんですかね…。
フルスクリーンにすると処理範囲も狭くなるし、排他的に画面全体を使うとなると
う〜む、どう考えてもフルスクリーンの方が速いはずではないんですかね…。

一応、大枠はここのやり方を真似てるつもりです。
ttp://fivedots.coe.psu.ac.th/~ad/jg/ch03/index.html
0832名前は開発中のものです。2007/03/29(木) 20:38:15ID:TdF2VMR1
>>830
あってない
0833名前は開発中のものです。2007/03/29(木) 20:42:13ID:TdF2VMR1
>>831
フルスクリーン時描画してるのはVRAM
ウインドウ時描画しているのはメモリ内ビットマップ
あわせるのならまずメモリ内のバッファで描画をしてそれをVRAMへ転送とする

描画の仕方が大幅に違うのだから速度も大幅に違うのは当たり前

イベントベースってのはみまちがいだったようだ
updateというメソッドがあったのでな
0834名前は開発中のものです。2007/03/30(金) 10:14:03ID:CxiJR9tX
単純な質問ですいません。

RPGを作っていて、
マップと自キャラを表示するところまでは
作ったのですが、NPCを表示させる
いい方法が思いつきません。

背景画像のように、固定ならいいのですが、
動き回るNPCをうまく表示できません。

効率のいい表示方法があれば教えてください。

いまは、

1.背景描画
2.自キャラ描画
3.表示範囲内にいるNPCを探し、描画

今は、この3の処理が無駄な動きになっている
気がします。
0835名前は開発中のものです。2007/03/30(金) 14:54:44ID:QwdAmNT9
3. の処理を行ったとしても動きとは無関係だと思うけど。
とりあえず MVC でやってみると単純になるよ。

1. モデルを次の時間に進める (キャラ座標の計算など)

2. ビューがモデルの内容をまとめて描画 (キャラの座標は 1. で計算済み)

あと表示範囲内の判定はJVMも勝手にやってくれるので、必要になったら実装でいい。
0836名前は開発中のものです。2007/03/31(土) 14:47:41ID:aOuaJNjw
そういうのって描画範囲に入ってないキャラも描画しちゃっていいんじゃない?
画面に表示されないから無駄かもしれないけど、マップのキャラクターが多くなってもそんなに重くはないんじゃ・・・
0837名前は開発中のものです。2007/03/31(土) 15:21:06ID:bPcXSKJZ
実装依存だな

クリップ外に描画すること自体は重くはないのだが、
その前にテクスチャ座標とか計算して渡す処理だけははいるから
重くはならないというのは間違い

画面外かどうかの判定なんてスプライト描画処理で一括して扱うだろうからいれとけ
最初はまったく処理をしないラッパでいいから
0838名前は開発中のものです。2007/04/02(月) 00:03:15ID:0q+4yudy
AGE
0839名前は開発中のものです。2007/04/02(月) 11:01:35ID:M2CzSpdn
ありがとうございました。

画面外のキャラも、さほどの数にはならないので、
描画する方向で作成してみます。

08408312007/04/03(火) 01:04:07ID:Wawfbgtr
遅れながらレスくれた方ありがとうございます。
う〜む、色々試してますがウィンドウで BufferStrategy 使った場合も
VRAM直…ではないんですかね…

505さんの
>フルスクリーン時は垂直同期取るのに対してウインドウモードは取らない
って何か関係してませんかね?そもそも垂直同期って言葉自体なじみがなかったんですが、
垂直同期を取ってるのでいくら処理が速くても bs.show でリフレッシュレート以上に
ならないようになってる、と考えるのは間違いですか?
それだとしてもα使って 3fps って明らかな処理落ちか…う〜む…
0841名前は開発中のものです。2007/04/03(火) 02:08:11ID:tJ3eBjgj
BufferStrategyでの同一API使ったアクセスが可能というだけで
VRAM直になるかはVM実装(つまり環境)依存

でも問題はなかろう?
Windowモードと同じようにいったんメモリ内で作ればいい
どういうゲーム作ろうとしているのかにもよるけど

あとは逆に積極的にハードウェアアクセラレーションを使うという方法もある
>>11のところでOpenGL対応してJava2D以上の表現が可能になったようだ
Java2Dはゲームで多用する加算合成がないしね
0842名前は開発中のものです。2007/04/03(火) 11:37:06ID:QAPO4Fq8
>>11
これスゲーな
0843名前は開発中のものです。2007/04/03(火) 16:29:50ID:Js4qFq6o
手軽そうだね
前見たときあまり内容無かった気がしたが地味に進めてるのね
今後に期待しとこ
0844名前は開発中のものです。2007/04/04(水) 12:34:42ID:xNft8wzX
>>840
確かに遅すぎるようにも思うが、それだけの情報じゃ何とも言えない。
α使わないようにしてみたり、rendering(g)の中身を1行ずつコメントアウトしてみたりして原因をもっと追求してみたら?
フルスクリーン時にのみ毎回妙な処理してたりしないかい(毎回DisplayMode変更してたり…さすがにそれは無いか)
ともかく・どの部分で遅くなっているか・現象を再現できる最小限のコードはどんなか をもっと追求した方がいいと思うよ。
0845名前は開発中のものです。2007/04/05(木) 23:12:06ID:IyGK/jzk
GTGEの日本語資料は"Javaでゲーム作りますが何か?"以外無いかのぉ。

使ってる奴居る?
0846名前は開発中のものです。2007/04/06(金) 00:02:37ID:xOHyAwJg
Javaの場合あんまり泥臭いコード必要としてないので必要性が薄いだけでは?
08478402007/04/06(金) 21:28:03ID:/J9SjvCf
レス下さった方ありがとうございます。

rendering(g)の中身を1行ずつコメントアウトしてみたりってのは
やってるんですが、rendering の中身を空にすると今度は bs.show で
時間かかってたりして、どうにも思うように動いてくれないんですよね。
つまり、プログラムの動作速度をはかって原因を探るだけでは解決できず
そこで、ここで皆様の力を借りようという経緯です。
コードはどうあがいても結局 60fps になってるんですよね…。

BufferStrategy は実装依存、なんですね。
15歳から始めるJava〜ではウィンドウのみのサンプルがあって
そこで「BufferStrategy はビデオメモリに直接書き込むので高速」と
断言してあったような気がしてそこは疑ってませんでしたが。
実装依存としてウィンドウモードと同じ方法を用いる、という方法は
そういえばまだ試してませんでしたね。一度試してみます。
0848名前は開発中のものです。2007/04/07(土) 02:14:29ID:2RXqF7NF
847
だからメインメモリでの描画はどうなんだと
0849名前は開発中のものです。2007/04/07(土) 07:28:23ID:Y1V3BpGY
BufferStrategyがVRAM使うのってsunの実装だと、DirectXかOpenGL使うときだけじゃなかったけ?

0850名前は開発中のものです。2007/04/07(土) 08:23:33ID:2RXqF7NF
何のオプションも指定していないデフォがDirectXなんだが
0851名前は開発中のものです。2007/04/07(土) 11:27:10ID:GIyVfDKh
DirectXはDirectXでも指定なしはDirectDraw。
指定するとD3D。javaでのOpenGLとD3Dの基本的な使い方は同じで
どっちも極力VRAMに置こうとする。

けどだからと言って早くなるわけじゃない。
■ このスレッドは過去ログ倉庫に格納されています