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

JAVAでゲーム作成

■ このスレッドは過去ログ倉庫に格納されています
0001JAVA初心者・・・04/01/17 22:47ID:eiE+Mw3o
はじめまして!!
今年に入ってからJAVAでゲームを作ってみようと勉強しています。
どなたか宝さがしゲームを作るうえで参考になるゲームとツール知りませんか??
知っていたら教えてください。<(_ _)>ぺこり
0705名前は開発中のものです。2005/06/26(日) 12:31:22ID:5IDbwQfw
クラス構造は人によって設計違うけど
多態を使うのとコレクションを使えるようになればいいんじゃないか
0706名前は開発中のものです。2005/06/26(日) 20:51:40ID:R9cNrqzH
>>704
私もそこらへんすごく悩んだ。結局、キャラクターに描画機能もたせて、キャンバスへの参照はキャラクターのコンストラクタに引数で渡してます。
0707初期不良2005/06/27(月) 09:20:24ID:sjyCFv/3
>>706
それで悩むなら Visitor パターンいいんじゃない?
いい具合に整理できるかも。自己満足レベルかも知れんが。
0708名前は開発中のものです。2005/06/27(月) 09:57:33ID:5sMCnoiV
コンストラクタで渡すよりメソッドの引数でわたせばいいっしょ
paintとかdrawとかってメソッドでGraphicsを引数に取ればいい

そして呼び出し元がそれら描画オブジェクトをリストから取り出して順に描画させる
プライオリティもここできめれるし
0709名前は開発中のものです。2005/06/29(水) 16:20:38ID:sZiDzWut
画像読み込みもタスクのクラスに実装すると
メディアトラッカーに渡すモノが必要ですね。
他の人のソースを見ると、Appletで渡したり、Containerで渡したりしてる。
このへん意味も分からず人まねしてる。
クラスが一つしかない簡単なアプレットなら
g.drawImage(.....,this);で済むのに。
0710名前は開発中のものです。2005/06/29(水) 19:06:02ID:Jz57RSZi
つーかImageIO使ってるし

5.0ならアクセラレーション聞きやすい環境ではあるけどコンパチブルなVolatileImageを
意識的に作る場合もある
イメージのロード命令ひとつでおわることはねぇな、ゲーム目的ならね
0711名前は開発中のものです。2005/06/29(水) 19:32:24ID:tkZA2RNq
>>709
クラスわけするとそこらへんが結構無駄に複雑になる気がする
0712名前は開発中のものです。2005/07/17(日) 13:46:28ID:Cex8NEqA
↓既出かもしれんが、この人のJAVAゲームってすごくない?
どういうテクニックを使えば、こういうなめらかな動きのアクションゲームをjavaで
できるのだろう??

--------
http://www.geocities.co.jp/SiliconValley-Sunnyvale/6003/ura/sisters2/
ちょいあシスターズ
アクションゲーム「ちょいあシスターズ」を公開しています。マ○オブラザーズをアレンジ
したもので、マウスとキーボードを使うことで2人同時プレイも可能です。


0713名前は開発中のものです。2005/07/17(日) 14:57:55ID:TVccPhIn
テクニックも何もJavaは普通になめらかにうごかせるものだが
0714名前は開発中のものです。2005/07/17(日) 21:51:17ID:IN1Lw/+s
>>712
やってみた。
至って普通だな
0715名前は開発中のものです。2005/07/17(日) 21:54:17ID:Cex8NEqA
>>713
> テクニックも何もJavaは普通になめらかにうごかせるものだが

ええーッ、僕が知っているjavaゲームは、敵の数に反比例して速度が低下するのが
多いのだが。
普通だったのか?
0716名前は開発中のものです。2005/07/17(日) 22:08:22ID:TVccPhIn
>>715
なんだよそれは
作り方が悪いだけだろ
60fpsで垂直同期取ったり滑らかに動いてるJavaのソフトだってあるぜ
0717名前は開発中のものです。2005/07/17(日) 22:25:38ID:DvhZ5Df9
正直 Java でフルスクリーンはぬるぽ
0718初期不良2005/07/18(月) 06:27:33ID:pZiMlJXx
>>717
このゲームをぬるぽしてください

Tribal Trouble(リアルタイム3Dストラテジー)体験版
http://oddlabs.com/download.php
0719名前は開発中のものです。2005/07/18(月) 13:03:07ID:uZqED97p
別にフルスクリーンでなくても滑らかにうごくっしょ
0720名前は開発中のものです。2005/07/21(木) 02:18:18ID:R+w7QC9R
なんでAlphaCompositeには加算合成がないのよ!!
0721名前は開発中のものです。2005/07/21(木) 02:35:11ID:R+w7QC9R
あ、正確には「なんで AdditiveComposite クラスがないのよ!」か
0722名前は開発中のものです。2005/07/21(木) 05:05:07ID:ttEileue
PixelGrabberを使うと加算合成できる?
0723名前は開発中のものです。2005/07/21(木) 10:50:10ID:0da8GUHY
JAVAを使って、ブラウザ上で自動的に画面が切り替わって行く、
サウンドノベルのような物を作るスクリプトは、
どこかで配布されていないのかな?
前に使っているサイトを見かけたんだけれども……。
0724名前は開発中のものです。2005/07/21(木) 11:42:34ID:PX1CM5dL
>>723
おれも昔あったような気がする。
Javaでわざわざやる必要が無いから無いんだろうね。
Flashのほうがそういう用途では作りやすいし使いやすい。
気力さえあればHTML+JavaScriptだけで行けるし。
0725名前は開発中のものです。2005/07/21(木) 13:49:56ID:52Yxwi4f
PixelGrabberって使う理由あるのか?
0726名前は開発中のものです。2005/07/22(金) 01:15:00ID:34bxPQ7x
どなたか Graphics を透明色でクリアする方法を教えてください、お願いします。

2枚の Image から getGraphics() でグラフィクスを取得し、
それぞれに別の描画をしてから重ねることでいわゆるレイヤーみたいのを実装してみたんですが、
上に重ねるほうの Image のグラフィクスを
まっさらに戻す方法がわからず行き詰まってしまいました。

単純に上に重ねるほうの描画の最初で clearRect() を呼ぶと、
下のグラフィクスまでクリアされてしまいます。

描画内容が変わるたびに新しくグラフィクスを取得しなおすのは
パフォーマンス的にかなりデンジャラスでした(ゲームには致命的なほど)。
0727名前は開発中のものです。2005/07/22(金) 01:31:17ID:34bxPQ7x
細かい訂正。Image でなく VoratileImage ですた。
0728名前は開発中のものです。2005/07/22(金) 06:52:53ID:2/g0amAL
あるVolatileImageをrgba(0,0,0,0)でクリアしたいってこと?

描画元がVolatileImageを使うということはJ2SE5.0だと思うけど
まずピクセルフォーマットをコンパチブルで作っているのが条件

さらにアルファ0のピクセルを強制描画となるとアルファブレンドの設定をsrcに変える必要あり

この辺分かってないのならスプライトはBufferedImageで作るのがいいよ
速度的にクリティカルでないのならね
5.0なら体外アクセラレーションがきくので描画先だけVolatileImageでよい
0729名前は開発中のものです。2005/07/22(金) 18:23:30ID:nqdltgNj
どうでもいいけど、VolatileImageは1.4からあって、このおかげでSwingが速くなった。
0730名前は開発中のものです。2005/07/22(金) 22:28:19ID:2/g0amAL
VolatileImageのコンパチブルイメージ作成は1.4では無理
スプライトには使えないのだよ
0731名前は開発中のものです。2005/07/23(土) 21:03:39ID:yrG67FHD
むう・・・グラフィックス関連は難しいのう
0732名前は開発中のものです。2005/07/24(日) 00:35:26ID:XT5QSyzV
Javaの場合基本はImageで極度に抽象化されてはいるのだが、
アクセラレーションがきく描画とアクセラレーションがきかない描画とで
APIがわかれていないからノウハウが必要。

速度を無視さえすれば一応どうとでも動くけどね。
DirectXを使って描画されたときとソフトウェア描画になったときとの差はさすがに激しい。

分からないときは描画先はVolatileImageで描画元はBufferedImageのBITMASK指定
にしておけば基本的に問題はない。

ただ、アルファブレンドとか考えるとソフトウェア描画具合によって描画先もBufferedImageに
おいたほうがいい場合もある。

など>>218の過去の日記とか参考になる。
1.4.2と5.0とは基本的には速度は変わってないそうだね。
0733名前は開発中のものです。2005/07/27(水) 13:20:35ID:ix/c6kOA
・・・
何の事だかさっぱり分かんねー
0734名前は開発中のものです。2005/07/27(水) 13:44:30ID:MUqN45X5
Imageの既知のサブクラスくらいちゃんとみよう
0735名前は開発中のものです。2005/08/06(土) 22:11:52ID:pinomsPp
処理を詰めるコレクションはどれを使えば
いいのですか?
シューティングを作っているのですが。
0736名前は開発中のものです。2005/08/07(日) 01:41:13ID:7DUHzpYT
最近の若いもんはデータ構造の勉強も使用としないのか
0737名前は開発中のものです。2005/08/07(日) 02:59:33ID:70Sdbjq9
しかも質問が曖昧すぎて何をやりたいのか分からない、ときたもんだ。
0738名前は開発中のものです。2005/08/07(日) 04:57:27ID:4HgBgmKI
「処理を詰めるコレクション」って何だ?
データ構造に関する事なのか?

07397352005/08/07(日) 07:23:54ID:YgzkFRJY
すみません。勉強不足でした。
出なおして来ます。
0740名前は開発中のものです。2005/08/07(日) 14:33:14ID:yCvqVkAo
勉強不足じゃなくて日本語の意味がわからないといっておる
0741名前は開発中のものです。2005/08/07(日) 16:09:28ID:gU2cgAEa
いや日本語の勉強不足なんだろ
彼は留学生なんだよ
0742名前は開発中のものです。2005/08/07(日) 17:38:19ID:ORJAOx8r
在日だろ
0743名前は開発中のものです。2005/08/07(日) 18:29:55ID:JLSTZtKF
関数ポインタの配列みたいなものを求めてるんだろ
0744名前は開発中のものです。2005/08/07(日) 18:49:39ID:yCvqVkAo
>>743
すごい理解力だな

だとしても難しく考えず多態がわかればそれでOK
JavaだけでなくC++でもオブジェクト指向言語ならね

C++でも関数ポインタ使うようではお話になりませぬ
0745名前は開発中のものです。2005/08/07(日) 19:23:38ID:4HgBgmKI
commandSeq.add(commandA);
commandSeq.add(commandB);
...
Command command = commandIter.next();
command.do();

みたいにして敵を動かしたいけど List とか Set とか Map とか色々あって
どれ使ったらいいか分らんって話かな?
0746名前は開発中のものです。2005/08/09(火) 17:21:29ID:kPu+8l2o
リストとセットとマップの使い分けができない人間に
コマンドをオブジェクトにするなんて高級な発想ができるとは思えん・・・
0747名前は開発中のものです。2005/08/12(金) 17:22:56ID:4rKVi55E
これって読んだ人いない?
Javaコレクションフレームワーク
ttp://www.amazon.co.jp/exec/obidos/ASIN/4797327057/250-0127530-6112251
0748名前は開発中のものです。2005/08/12(金) 18:01:22ID:JHIWdaT4
1.5対応なのかな、その本
0749名前は開発中のものです。2005/08/15(月) 00:53:42ID:kKlH8Vdw
>>744
C++でもゲームだと普通にコールバック登録とかに使ってるね、関数ポインタ。
べつのスマートで高速な方法があるなら知りたいや。
0750名前は開発中のものです。2005/08/15(月) 01:03:30ID:ESVCg1zy
C++ならポリモーフィズムでしょ。
関数ポインタ使うなとは言わないけど。
0751名前は開発中のものです。2005/08/15(月) 01:50:33ID:qn8FJw6T
ただC++でおき楽にやるとキャッシュヒットが上手くいかないかな。
保守性と速度とでどっちをとるかなんだけど。
0752名前は開発中のものです。2005/08/15(月) 16:02:35ID:UyuTTffG
過去レス読んでたんですがBufferedStrategyとかVolatileImageってJDK1.5のSwingで描画すれば何もしなくても実装されてます?
0753名前は開発中のものです。2005/08/15(月) 18:16:25ID:C+etuN6I
Javaインストールさえ出来ない私です(・∀・`)
DLのページって英語ばかりで良く分からないし安全かどうかも分かりませんよね(汗;
0754名前は開発中のものです。2005/08/15(月) 18:53:34ID:limOG/LR
>>753
インストールできないってことは、まだ落としてないの?
JDK ダウンロード でぐぐって最初のページである下記サイトに行き、
ttp://java.sun.com/j2se/1.4.2/ja/download.html
・適当にドキュメントを読んでから「J2SE SDK のダウンロード」を選択
・Accept にチェックを入れて Continue
・自分の使用しているOSのインストーラをクリック(Windowsなら Windows Offline Installation, Multi-language)
で、あとはインストーラを実行するといいよ。

5.0が必要な場合も同様
ttp://java.sun.com/j2se/1.5.0/ja/download.html
0755名前は開発中のものです。2005/08/16(火) 19:46:04ID:m8tb6mCH
ゲームとは無関係ですけど
static Game gam;
と、宣言したもののメソッドを
使おうとしたらNullPointerException
が発生してしまうのですが
どうしたらよいのですか?
staticで宣言したら
newとかやらなくても使えるんですよね?
もしかして自分間違ってます?
0756名前は開発中のものです。2005/08/16(火) 19:57:51ID:r7PJkQoA
>>755 うん。
0757名前は開発中のものです。2005/08/16(火) 19:59:31ID:BK5WFM6G
>>755
メソッドの宣言ではないなその書き方は。

フィールドの宣言だとしたら

それを宣言したクラスをHogeってすると
Hoge.gam
でアクセスできる。

ただ、staticにする必要があるかどうかをまず考えた方がいいよ。
07587552005/08/16(火) 20:56:19ID:m8tb6mCH
キャラクラスを作ったんですけど
そのクラスを呼び出すコンポーネントをHogeとして
static Hoge hoge;
と、キャラクラスでフィールド宣言して
そのHogeのメソッドを使おうとしてNullが
出てしまうんです。
こんな風にやってるのを参考にしてみたのですが、
キャラを呼び出すクラスをキャラの方で呼び出さないようにします。
0759名前は開発中のものです。2005/08/16(火) 21:06:10ID:BK5WFM6G
>>755,758
おまいはすごい変な勘違いをしてる。

public class Test() {
 static Hoge hoge;
 ..................
}
ってなクラスだったとすると、
hogeへのアクセスは
Test.hoge
になる。

でやりたいことは、Hogeのメソッドを使うことだとおもうんだが
その使いたいメソッドはStaticなのか?
たとえばキャラクラスが
public class Hoge() {
 private int charPosX;
 public int getCharPosX() {
 ....
}
とかだとすると
必ずhogeにはインスタンスを代入してあげないといけない。
hoge = new Hoge();

さっきのキャラクラスのメソッドが
public static int getCharPostX();
とかならメソッドにはアクセスできるはず。

ただ、Staicだからちゃんと考えて使わないと意図してないことになるぞ。
07607552005/08/16(火) 22:31:39ID:m8tb6mCH
自分の極僅かな理解力に依ると
staticな参照型のフィールドの持つ
メソッドを使うには、そのメソッドは
staticである必要があるということですか?
0761名前は開発中のものです。2005/08/16(火) 23:13:00ID:BK5WFM6G
>>755,760
違う。
staticについてかなり勘違いしてるな。
俺の書き方も悪かったかも知れない。

staticなフィールドへのアクセス方法 と
staticなフィールドのメソッドへのアクセス方法 とは別物。

方法は二つあるってこと。
hoge = new Hoge();
としてインスタンス化するか
アクセスしたいメソッドをstaticにするか。
このどちらか。

staticにするって事は、どの他のクラスからのアクセスでも、
参照できる値が同じであって欲しいって事だと思うのだけど、
そういうときはstaticを使わなくても実現できる。
Singletonパターンでググってみなさい。
0762名前は開発中のものです。2005/08/16(火) 23:21:32ID:BK5WFM6G
ちょっと訂正
シングルトンでも内部ではStatic使ってます。
0763名前は開発中のものです。2005/08/16(火) 23:54:56ID:6Nhea8Nr
優しいやつがいるな

いや、いいことだが
0764名前は開発中のものです。2005/08/17(水) 00:44:12ID:K4BMijBi
ふつうは初心者質問スレに行けって一蹴されるもんね。
0765名前は開発中のものです。2005/08/17(水) 01:02:01ID:CDbJt1VR
自分も理解したばっかりだから、教えたかったんだよ!(w
0766名前は開発中のものです。2005/08/17(水) 07:52:32ID:aplD8U3k
staticにするのは基本型ばっかりだったから勉強になったよ
0767755,758,760 2005/08/17(水) 21:06:34ID:9iZ8I7A5
>>761
丁寧親切にありがとうございます。
実は初心者スレに最初に行ったのですが
上記の通り下手な質問だったので
まともに相手をされなかったのです。

初心者スレで聞けと思った方すみません。
答えて下さった方重ね重ねありがとうございました。
0768名前は開発中のものです。2005/08/17(水) 21:33:35ID:CDbJt1VR
>>767
staticなメソッドってあまり使わない方がいいよ。
使うパターンは決まってて、
(static) finalな変数と引数だけしか内部で使わないような場合。
ユーティリティクラスとかでは多用する事になるかも。
そうじゃない場合は
volatileとかsynchronizedとかを使うことを念頭に置かないとまずい。
どういうときにこれを使うかがわからないなら
インスタンスを使う方法に統一するほうが変なエラーでなくて楽。

まぁスレッドとか使い始めたら嫌でも覚えるだろうけどね。


ところでうちのVSSサーバが飛んじゃってるんですが・・・・。
どうするんだろう・・・・。
0769名前は開発中のものです。2005/08/17(水) 23:53:07ID:U8H63nuI
でもゲームだといっそすべて static にしてやろうかと思うことが多々ある・・・
0770名前は開発中のものです。2005/08/18(木) 08:52:11ID:pZp+Mec7
>>755
メソッドもstaticにして、
Game.メソッド
で、エラーが取れるような・・・
0771名前は開発中のものです。2005/08/19(金) 10:03:13ID:ZksL5yDP
>>770
論点がずれているぞ。
0772名前は開発中のものです。2005/08/19(金) 22:28:56ID:T1nvulFd
がーん
シンプルな解決法かと思ったのですが・・^^;
0773名前は開発中のものです。2005/08/20(土) 03:20:02ID:QiGA0Fi6
ここは親切なインターネットですね

なんか嬉しくなったので記念パピコ
今日、JAVAでゲーム作っていく上で頼もしいサイトが
2,3見つかって気分が良いってのもある
0774名前は開発中のものです。2005/08/20(土) 06:18:08ID:JTmhmGeR
その頼もしいサイト、教えてもらえませんか?
0775名前は開発中のものです。2005/08/20(土) 13:33:03ID:/rW9FaDr
完全にGUIクラス独立させてゲーム作りたいんだけど
VolatileImageでバッファ処理しようとしたらpaint(g)内で作る分には問題ないんだけど
外で色々しようとするとバグるんだけど、なんで?
他のImage使えばいいんだろうけど、なんだか悔しくて。。。
0776名前は開発中のものです。2005/08/20(土) 13:53:31ID:TyoHBn43
そのバグったコードと結果かいてもらわんとなんともいえんだろうが
0777名前は開発中のものです。2005/08/20(土) 14:36:40ID:ZZP3lZ0w
JREがせめてVectorに置いてあればなぁ・・・
JREの開発元がそもそも一般レベルに普及させる気がないみたいだし
0778名前は開発中のものです。2005/08/20(土) 14:43:16ID:B9VT1PVY
http://java.comでいいじゃん
0779名前は開発中のものです。2005/08/20(土) 15:05:36ID:ZZP3lZ0w
>>778
Vectorにソフトを置くとして
そのためのプラットフォームをVector以外に置くというのは・・・
0780名前は開発中のものです。2005/08/20(土) 15:14:02ID:TyoHBn43
JREはアプリにつけれるんだが
単体での配布はJavaのサイトからのみ許されるが

VBのランタイムも同じだべ
0781名前は開発中のものです。2005/08/20(土) 15:22:26ID:ZZP3lZ0w
ん?VBは普通にVectorにあるじゃない。
PrivateJREって無駄が多くていまいち好きになれないし。
Java版RPGツクールでも作ってJavaそのものを普及させるしかないかな。
0782名前は開発中のものです。2005/08/20(土) 16:54:09ID:TyoHBn43
まぁprivateJREでなくてもJREは添付できるが
Privateは細かいリビジョンで動作が変わる可能性があることを考えると
別に悪い選択肢ではない

特にゲームなら細かい動きに依存するしなおさら
public使ってWebStartなら多少細かい設定が可能だけどサンドボックスだと
厄介なことになる場合もあるしな

同人ソフトとか数百Mとかわりとみるし、あまり気にならないかと
0783名前は開発中のものです。2005/08/20(土) 17:51:35ID:ZZP3lZ0w
>>782
> まぁprivateJREでなくてもJREは添付できるが
マジすか。こりゃ要らぬ心配をしてまった。

> 同人ソフトとか数百Mとかわりとみるし、あまり気にならないかと
まあ置くのはVectorだから紹介サイトに負担はないよね(w

てかJavaのゲームオーサリングソフト開発したいな。
・PropertiesとClass#forNameを使い、画面制御クラスが拡張可能
・クラス、ECMAScript(Rhino)、XML SAXそれぞれでシナリオをスクリプト可能
・クラス、Rhinoのどちらかで機能をカスタマイズ可能
・HypersonicSQLとBase64によるリソースDBMS搭載

※画面制御クラス 戦闘ビュー、フィールドビュー、ノベルビュー、会話ビュー、ステータスビューなど
0784名前は開発中のものです。2005/08/20(土) 19:06:09ID:TyoHBn43
Javaはダイナミッククラスロードが容易(だからフレームワークが流行り)なために
RPGとかSTGとかAVGとかのフレームワーク作るのはいいと思うよ
特定のディレクトリにjar放り込んでURLClassLoaderでロードしてくるだけだし

まずはそれらのさらに下で動く描画とか音楽とかの薄い汎用のフレームワークを作ったほうがいいかも

本当に自由なスクリプトに関しては次バージョンでECMAscriptが実装されるからそれをまてばいいね

HSQLDBはゲームに組み込むのには一番楽なサイズかな
たぶんRPGやAVGあたりだとデバッグが容易になるかも
他の環境だとXMLでいいかな
HSQLDBはJDBC2の構文が通らないからちとアレかもしれんがサブクエリーは便利

SAXに関しては勘違いしてないかい?
0785名前は開発中のものです。2005/08/20(土) 20:20:42ID:ZZP3lZ0w
>>784
いろいろ有益な情報thx
共同開発者集められるくらいの基盤は作ってみるよ。

> SAXに関しては勘違いしてないかい?
タグ開始とテキストとタグ終了でXMLを解析するAPIだよね?
調べなおしてパースを一時停止出来なさそうなのには面食らったけど
それでも街やシナリオのインスタンスをレンダリングするには便利だと思う。

デバッグ中は逐次レンダリングして、リリースはレンダリング済みのをDBへ。
エンドユーザが情報交換しやすいフォーマットが他に思いつかない・・・
0786名前は開発中のものです。2005/08/20(土) 21:14:34ID:hX3UwIsl
すごく初歩的な質問かもしれませんが、今、携帯のアプリを作ろうと思っています、、
携帯会社(NTT DoCoMo)のサイトを見ると何かソフトがいるようなコトがかいてあります、
JAVAだけで作ることは可能でしょうか??。。
0787名前は開発中のものです。2005/08/20(土) 21:35:49ID:TyoHBn43
確かに携帯のアプリもJavaだ
だがそれはJ2MEといってPC用のJ2SEから機能を省いたサブセット
ライブラリや使える機能を抑えたコンパイルをして吐き出させるもの

追加で必要なのはライブラリとシミュレーション、ドキュメントだが、これらもちゃんと用意されている

プログラム板にいけばiアプリのスレがあるのでそちらでどうぞ
0788786です、、2005/08/20(土) 21:53:20ID:hX3UwIsl
787>ありがとうございました。。
なにしろ、0から始めることなので、、
0789名前は開発中のものです。2005/08/22(月) 19:15:47ID:B8i8MdrO
JPanelのFPSを保つまた表示するにはどうすればいいでしょうか。
0790名前は開発中のものです。2005/08/22(月) 19:16:32ID:B8i8MdrO
すいません。Javaスレと誤爆しました。
0791名前は開発中のものです。2005/08/26(金) 22:24:25ID:OqoSkLef
VolatileImageってスプライト用途では使えないってことですか?
0792名前は開発中のものです。2005/08/26(金) 23:45:41ID:aHJYtl1C
分からない人は描画先にだけVolatileImage使えばいいよ
スプライトはBufferedImageでもJ2SE5.0からはかなりの場合アクセラレーションがきくようになってる

1.4時代は100%スプライトに使えないと思っていい
5.0はコツがいる
0793名前は開発中のものです。2005/08/27(土) 22:47:55ID:KDG2Ln8Y
>>792
あ、5.0ならできないこともないんですね。
それはシューティングに手を出しても高FPSが実現できるのでしょうか?
FPSが格段に向上するなら教えて頂きたいです。

無茶をしなければBufferStrategy&VolatileImage(offscreen)で十分なのでしょうが。
0794名前は開発中のものです。2005/08/27(土) 23:03:58ID:owlm3iow
BufferedImage>VolatileImageでも秒間1万スプライトとかでるよ

VolatileImage>VolatileImageをやるためにはピクセルフォーマットをあわせて転送元にBITMASK指定

逆にDirect3DでのアクセラレーションはVolatileImage同士かつOPAQUE指定のみ+オプション指定
Direct3Dはレンダリング品質に問題があるために現状では使い物にならないからやらなくていいよ
クリッピング処理に問題があるけどこれは1.4からかわってない
1.4では透過がまったく出来なかったけどね

分かりやすくまとめると
通常のDirectDrawによるアクセラレーションはカラーキーだが
Direct3DではAlpha値を使う、というのがわかれば自然とどういう指定が有効かわかるだろう

5.0ではOpenGLアクセラレーションができるようだが、ハイエンドのチップじゃないと動かないので
現状まったく意味を成さない
WindowsでのOpenGLのようにアクセラレーションが聞かない部分はソフトウェア描画とかやってくれない模様
0795名前は開発中のものです。2005/08/27(土) 23:40:49ID:KDG2Ln8Y
>>794
貴重な情報ありがとうございます。
環境依存に陥るのは勿体無いですね。
知識としてはしっかり抑えておこうと思います。
0796名前は開発中のものです。2005/08/28(日) 06:46:22ID:NGj/fFgW
敵をベジエ曲線で移動させようと思ったのですが
敵の位置があらぬ値を示すのです。
計算式間違ってますか?

int p0x=0,p1x=0,p2x=800,p3x=800;
int p0y=600,p1y=0,p2y=0,p3y=600;
//制御点四つ。数値は画面サイズ縦六百横八百
float move;//t:1-tのtに位置する。
0797名前は開発中のものです。2005/08/28(日) 06:47:42ID:NGj/fFgW
public void move(){
int p4x,p5x,p6x;
int p4y,p5y,p6y;

p4x = (int)((p1x-p0x)*(move/100));
p5x = (int)((p2x-p1x)*(move/100));
p6x = (int)((p3x-p2x)*(move/100));
p4x = (int)((p5x-p4x)*(move/100));
p5x = (int)((p6x-p5x)*(move/100));
glx = (int)((p5x-p4x)*(move/100));
p4y = (int)((p1y-p0y)*(move/100));
p5y = (int)((p2y-p1y)*(move/100));
p6y = (int)((p3y-p2y)*(move/100));
p4y = (int)((p5y-p4y)*(move/100));
p5y = (int)((p6y-p5y)*(move/100));
gly = (int)((p5y-p4y)*(move/100));
//glxglyは画像の左上隅
move++;
movehp();
hami();
System.out.println(glx);
}
0798名前は開発中のものです。2005/08/28(日) 13:16:50ID:UnhERhE7
ベジェ曲線は三次式になるはずなんだけど、一次式だけでプログラム書いてない?
下記ページにベジェ曲線に関して式まで載っていたよ。
http://musashi.or.tv/fontguide_doc3.htm
0799名前は開発中のものです。2005/08/28(日) 13:49:17ID:KSVPBhMr
最近、Javaを勉強し始めたものです。
便乗ですみませんが、>>797のコードでは
(move/100)を各行で計算していますが、
これを
float pos;
pos = move/100;
p4x = (int)((p1x-p0x)*pos);
p5x = (int)((p2x-p1x)*pos);.
.
.
.
とした場合では実行速度に差が出るのでしょうか?

よろしくお願いいたします。
0800名前は開発中のものです。2005/08/28(日) 13:54:28ID:eP1c+99S
ローカルでの計算なら最適化の過程で綺麗になるけど
場合によってはメソッド呼び出しの速度がネックになる場合もわりとでるよ

所詮は頻度だけど
1フレーム内に100万回以上呼び出すかどうかが境目かな
それ以下ならさほど気にならないかな
08017992005/08/28(日) 14:10:11ID:KSVPBhMr
>>800
やはりこの程度ならコンパイラ側で
対処してくれるのですね。
ありがとうございます。
0802名前は開発中のものです。2005/08/28(日) 15:40:48ID:eP1c+99S
Javaの場合コンパイル時と実行時で最適化が入るから
単純にこううごくとは言い切れない部分はあるけど、Cのように静的なだけだと
GCやらなんやらが派手に動いてこの速度はでなかっただろうね
0803名前は開発中のものです。2005/08/28(日) 22:11:59ID:UnhERhE7
>>799
あとでコードを書き直すときに(たとえばmove/200に変更したいとか)
一カ所だけを変更すればいいから、開発がラクになる。
個人的には何度も使う変数は明示的に一カ所だけで計算しておくのが好み。
0804名前は開発中のものです。2005/08/29(月) 21:51:16ID:SWKvmGPJ
NetBeansで作ってたけどJFrame使う意味ってあんまりないって気づいた。
使うコンポーネントはひとつしかないんだもん。当然か^^;
■ このスレッドは過去ログ倉庫に格納されています