1 :
ヤンス :
04/09/08 09:17 ID:Qk2n0ep6 JAVAアプレットでファミコンのゲームにありそうな2Dアクション物を作ろうと思い 二ヶ月くらい前から勉強を始めて最近やっと、ショボイながらも記念すべき 人生初の自作ゲームを作って今、第二作目を作っている所なのですが、やり方の 分からない処理が多すぎて困っております。 勿論ネットや本等で調べまわった上でスレを立てました、何でこんな処理が 分からないんだよと思われるでしょうけれど指導の方お願いします。 上級者の方達と質問のやり取りをしたいのです。 当面の目標は倉庫番、ロードランナー、ドンキーコング等の1画面固定タイプの やつを作ろうと思います、とりあえず現段階で二次元配列を使っての マップと自機の表示まで出来てます、二次元配列を使って表示した マップの壁などに、どうやって当たり判定を付けるかで躓いてます 当たり判定の付け方の考え方など教えて貰えたら、ありがたいです。 ちょっと爪垢が溜まってきたので、また後ほど書きたいと思います。
>>1 から単発質問の上、関連リンクも張らない、テンプレートとして成り立っていない。
よって糞スレ。
3 :
関連スレ :04/09/08 11:02 ID:HRipED+T
>>1 おまえていどのやつはいくらでもいるんだよクズが
8 :
ヤンス :04/09/08 15:24 ID:Qk2n0ep6
>>7 まだチェックしていないスレッドがありました
早速読みに行ってきます、有り難う御座います!
まあ、実際問題クズなんで、これからも宜しく。
ありきたりだが、誰でも最初は何も知らないクズだったんだ。 これがきっかけで業界に入って、自信をつけて、ガンガンコード書いて そのうち仕様とか決めれる立場になって、残業とかで1週間家に帰れなかったりして、 株で儲けて退職して行く同僚を羨ましげに眺めたりして、 気づけば30過ぎてそれでも嫁さん居なかったりして、 いままでPCにつぎ込んだ金額を計算して愕然となったりして、 親の言う通りに公務員になっておけばよかったなとか思うかも知れないけど、 今はガンバレ! 俺は応援してるよ。 あとHRipED+Tには礼を言っておけよ。
10 :
ヤンス :04/09/09 01:46 ID:arw9tEgy
>>HRipED+T氏
どうも有り難う御座いました!
おかげさまで引っ掛かっていた問題が解けそうな気配です。
間違えて
>>7 にお礼を言ってしまっていた・・・
>>9 どうもです!
何気にプログラムやグラフィック等は趣味で留めて置くのが楽しいかなと
思いました、なので小さな頃ファミコンで遊んでた時
なんでこうゆうゲーム(まだアイデア等固まって無いので仕様とかは書けないですが)が
無いのかなと思ったやつを
自分で作れればいいかなあと。
まだまだ未熟者の上、髪型もオカシイですが頑張ります!
11 :
名前は開発中のものです。 :04/09/12 09:03:06 ID:89in4wvs
応援するぞ。 自分はアクションよりRPG(DQみたいなの)好きなのでJavaで書く練習してる。 あげ
Javaアプレットは簡単なゲームのデモをサイト上に載せるのに便利だけど、 いつも悩むのが速度調整なんだ。 現在時刻の取得、インターバルタイマ、sleepやwaitメソッド、どれをとっても 20ミリ秒程度の精度しかない。 どうやったらどのマシンでも同じ速度で動かせる?
16 :
12 :04/09/14 18:19:59 ID:o257G0XK
レスありがとうございます
>>14 実際のスリープ時間が20ミリ秒だったのか25ミリ秒だったのか取得できません…
また、演算や描画に何ミリ秒かかったのかの計測もできてません。
>>13 手持ちのOSはWindows98SEとXPです。
知り合いもWindowsしか持っていません。サイトの来訪者もWindows系がほとんどです。
Javaアプレットで作成する以上MacやUNIX系でも検証しておきたいとは思っています。
一時期こんな方法をとっていました。
while(終了条件)
{
count = 0;
while(1秒間)
{
処理();// 常にほぼ一定処理時間となるよう期待してダミー処理を含めてある
Thread.sleep(ウェイト値)
count++;
}
if(count<目標FPS値)ウェイト値--;
if(count>目標FPS値+2)ウェイト値++;
}
Javaでの時間管理の話はいろいろでてるが TimerTaskとObject.waitが最有力
19 :
12 :04/09/14 21:46:30 ID:ckBU9Z+e
20 :
17 :04/09/14 23:18:31 ID:OuV1fMqk
まぁあのスレでTimerTask+waitを提唱したの俺だがな Linux等Win以外での動作安定度もこの方法が一番よかったのが決定だかな ポーリングはJavaの仕組みを考えれば効率悪いのはあきらかだしね hotspotはプログラムが動いている間にバックグラウンドでコンパイルが進んでいるわけだし コレが阻害されるというのは結果としてよくない -XX:+PrintCompilationとかつけて実行してみなされ
サンプルを用意しました。
ものすごく短くて単調なので期待しないでください。
http://gamdev.org/up/img/1234.zip 私は「フラっとサイトを訪れた一般ユーザが何の抵抗もなくサンプルを閲覧できる可能性が高い」ことを
最優先事項にアプレットを作っているので、まじめにゲームを開発するこの板は趣旨が合わないのかも
しれません。
おー、すばらしいです! 帰ってきてから見せてもらいます。 サンクス!
先生! わざわざ圧縮しないでください!
24 :
12=21 :04/09/21 07:25:09 ID:RcSzxkaT
こんな方法を取っていた時もありました スレッド1 while(終了条件){処理();wait();} スレッド2 while(終了条件){wait(33);notify();} 一部の環境ではうまくいきましたが、別の環境ではnotify()実行直後に処理()が開始しされてしまい、 それが終わってからwait(33)で待ちが始まるため全く調整の意味がありませんでした。 でも良く考えたら、 スレッド1 while(終了条件){処理();wait();wait(1);} スレッド2 while(終了条件){wait(33);notify();} とすればスレッド2だけがbusy扱いになって先にwait(33)が実行されるのでは? 朝の寝ぼけた頭で考えてるので、落ち着いてからまたサンプルを作ってみます。
25 :
ヤンス :04/09/23 21:20:06 ID:FBDpqX5t
あああ、自機の方向に弾を撃たせる処理で躓いた・・・ 右向いて撃った後、左を向くと弾まで一緒に左を向きやがる・・・
ヤムチャかよ!
面白いからそれでいいじゃん。
斬新なアイデアだ
え?Thread.sleep(16)で出来てなかったの? これは出来てないの?
30 :
12 :04/10/02 12:36:34 ID:jCcM5OdI
速度調整に関する検証結果です。 WindowsXP上のVMでwaitメソッドを実行した場合の精度は15msのようです。 確実に指定した期間以上スレッドを停止させるため、端数は繰り上げになります。 つまり、30FPSを実現しようとしてwait(33)を実行すると、実際にはwait(45)を 実行したのと同じになり、期待した速度調整がまったくできなくなります。 Windowsネイティブアプリケーションの場合、APIのtimeBeginPeriodを呼び出す ことでタイムスライシング全体の精度を上げるようになっているようです。 実際に別タスクでtimeBeginPeriodを呼び出すアプリケーションを実行している間は、 JavaVMのwaitメソッドの精度も向上しています。終了させた途端に精度は落ちます。 この現象は、SunのVMでもIEに付属のMicrosoftVMでも再現するようです。 今のところjavaのプログラムから明示的にwaitの精度を上げる方法がみつかりません。 とりあえず、 スレッド1 while(終了条件){処理();wait();} スレッド2 while(終了条件){notify();wait(30);} としておくのがWin95系でもNT系でも一番安定するようですが、他のOSでどんな挙動を するかはまったく調査していませんし、好ましい記述とはかけ離れています。
31 :
12 :04/10/02 12:37:54 ID:jCcM5OdI
上記書き込みで使用したWindowsネイティブアプリケーションのリスト ※VC6.0のコンソールアプリケーションで作成し、winmm.lib等をリンクする #include <windows.h> #include <mmsystem.h> #include <conio.h> int main( int argc , char *argv[]) { timeBeginPeriod(1); getch(); timeEndPeriod(1); return 0; }
e
Javaの時間管理は最善はTimerTaskとの組み合わせな
・ガベージコレクションが動作するとフレーム数が変わってしまう ・ガベージコレクションが動作するタイミングを制御できない これがゲームにおける時間管理のネックになっとるわけだが、 Sunはガベコレの禁止と強制のAPIは作ってくれないのだろうか。
GCがネックになるゲームのほうが少ないと思うが・・・ もしねっくになってるならメモリ管理やばいかもね メモリの使用量を把握してnew領域でのGCだけに専念させるだけ
>GCがネックになるゲームのほうが少ないと思うが・・・ ( ゚д゚) ポカーン
いまどきJavaでGCがネックになるプログラムかけるやつのほうがおかしい Windowsでたまに垂直同期取りこぼすとかその程度と同じ話だし 完璧もとめるならRTOSいけ
GCうんぬん言ってる香具師は最近のJavaVMに実装されているGCについて調べて見れ。 まずはそれからだ。
GCがそれほど致命的だとは思わんが、それよりもVM自体の実装が(ry
まーまー、CとJava両方で自力でMD5を求めるコードでも書いて実行してみよう。
Javaの欠点はMSがVMを最初から入れないこと
それはJavaでなくてMSの欠点だ
アップスキャンコンバータ
保守
何かネタをくれ〜
2Dアクションといえばパックマンかマリオだろ
47 :
名前は開発中のものです。 :2006/03/15(水) 08:46:55 ID:916ZRAwJ
誰か夢をくれ〜〜
>>48 ,,..,,...,,
〃´, 〜〜ヽ
| | iイノリ从)〉
ゝ|リ|!.゚ ヮ゚ノi
Ci}~レπv{~つ[ 夢 ]
ノ!( ,i , )
~し'ノ~
age
>>48 あの……落としものですよ?
.∧__,,∧
(´・ω・`)
(つ夢と)
`u―u´
あなたのすぐ後ろに落ちていましたよ?
たとえあなたの夢が叶わなかったとしても…
.∧__,,∧
(´・ω・`)
(つ夢と)
`u―u´
叶えようとしたあなたの心を捨てないで下さいね…
52 :
名前は開発中のものです。 :2006/11/24(金) 01:07:03 ID:HeoETDlJ
俺も頑張るよ!
誰か金をくれ〜〜
54 :
名前は開発中のものです。 :2006/11/26(日) 19:26:37 ID:8IgW2e6l
Javaの開発は金かかんなくて助かるわ〜
55 :
名前は開発中のものです。 :2006/12/01(金) 11:09:36 ID:LC+/aYM5
56 :
名前は開発中のものです。 :2006/12/01(金) 18:01:06 ID:y3AgeiUV
57 :
名前は開発中のものです。 :2006/12/01(金) 18:23:44 ID:LC+/aYM5
>>56 ありがとうございます〜。
スレッドを一通り読んでみたら、告知してみますね♪
58 :
名前は開発中のものです。 :2007/02/27(火) 00:27:51 ID:aBqJ/Obc
ゲーム製作でJavaってあまり聞かないけど どこがゲーム製作に向いてないのでしょう
別に向いてないわけではない 海外では普通に3Dもバリバリ使われてるし 日本でのJava使い=業務用というイメージかね そのうちでてくるでしょ 去年JOGL1.0になったばかりだし
処理速度的にまだ弱い あとはゲーム作成のノウハウがまだ整っていないところかな まあ速度はハードやAPIが速くなってきてるし 時間の問題かも なんでもタダで環境揃うし俺みたいな貧乏人にはいい環境なんですがね JAVAは
61 :
名前は開発中のものです。 :2007/02/27(火) 10:52:16 ID:no4sgWaC
おおむねC言語の9割程度の速度が出ている状況で 2Dアクションゲームで処理速度が足りないなんてあまりなさそうだが
winのネイティブゲーの方がよっぽどランタイムに頼ってるこの矛盾・・・問題は初めから入ってるかどうかだな。 速度も描画作法無視した描画やらない限り十分過ぎる。 javaが遅いとか今時言ってる連中は頭が1.3の暗黒時代で止まってる。 3Dの方ならそもそも高級すぎるんでゲーム向きじゃない。JOGLも1.0出したからこれから。
java web start が普及してほしい。 というか自分のサイトではjava web start使うようにするわ。
>>63 まぁ、それも後数年だよ。
そのうちパソコンはみんなJavaベースのOSで動いてJavaアプリを動かすための環境になる。
WindowsやらMacといった旧型OSの方が、JavaベースOS上のランタイム(エミュレータ)で動くようになるだろうね。
組み込みの世界ならそれもありかも
仮にそのJavaベースのOS上で動くWinエミュやMacエミュが完璧だとして、 そのエミュ上にさらにJavaランタイムが必要になりそうな
長時間起動したままの場合GCがメモリの断片化を考えると有利だよな 実際ルータとかレコーダとかそういうのでも起こってるし 組み込みのプログラムの規模の肥大化にあわせてアプリ側もヒープの動的確保使わないとやっていられなくなってるし
んでそういう組み込まれた機器がPCなんて触った事ありませんって連中の所にあってUIがグラフィックスバリバリとかね。 Flashのメニューみたいな。携帯化するよw エージェントの様なシステムと組み合わせる時にJavaOS使えるかもね。 カーナビにタチコマ、そこからネットワーク介して思考戦車に移動、電脳に移動とか下にあるモン意識せず共通に仮想化出来て。 まあスレチだが
>>70 これからのゲームはMIDP2.0が標準になるだろうね。
携帯ではすでに当たり前の存在になりつつあるし、パソコンでも利用可能。
機能も本格的なフレームバッファや標準的なサウンド機能とゲーム開発には十分だし。
MIDPで開発すれば「一度書けばどこでも動く」Java本来の世界に逝くことができる。
JavaMEじゃちと無理だろ JavaSE以上にヒープや使えるマシンパワー、メモリ速度が違いすぎてそれがネックになりやすい あくまでも同一言語で開発が出来て移植が容易という程度だな 同じキャリア内でもゲームとかが個別に対応してる現状を考えるとなおさら
73 :
C使い :2007/03/17(土) 20:31:37 ID:e0pLCHEg
eclipseちょっと見たけど これからはJAVAの時代がくるかもって本気で思った。 eclipseほどのソフトが無料だったら インディアやチャイニーズのJAVA人口増えそう。 もちろんジャパニーズも
そのEclipseはオライリーに去年負け組みの烙印押されてネットで反感かって修整させたようだが Googleも基幹システム実はJavaつかってましたというのもわかっちまったしなぁ
久しぶりにJOGLのサイトに行ったら、大分バージョンアップしていたな。
1.0が去年でて安定してるんで2DゲームでもJOGLは悪くはないだろうね ただ少し古めの統合ビデオだときつい 915GM以降がターゲットならまったく問題はないが
915GMってそんなに良いチップなの? 具体的にGF4程度の性能はある? 915GM以降ってよく聞くんだけど偶然かな・・・
915GM以降がIntelのビデオとして3世代目あたりか 855GMEなど世代目まではDirectXは6くらいまでしかサポートしておらず3Dはおまけ程度 それでFF11が動かなかったが915以降はDirectX9対応して動くようになった 3Dの速度も一気に3倍くらい速くなってる感じ さすがにGF4までの速度はいってないよ 統合チップとしては3Dもかなりのものになったのが915GM GeForce4 MX クラスになったと思えば近いかも ただ、当時より圧倒的にCPUやらメモリの量やらバス帯域やらよくなってるので実現できるものが違いすぎる 915GMなら比較的新しいから性能が低すぎることもなくサポートしやすいってのも大きいね ちなみにMがつくとノート用なのでノート用としてみるとUMAビデオとしてはかなり高性能に見えると思う 915GMの後継が945GMでクロック向上とサポートしてる命令が増えてるとかの差がある あと超低電圧版や低価格機だと945GMSとかになってメモリの速度とかいろいろと遅くなってるので 855GME並みに遅い場合もある
まあ俺はNetBeans派だけどね。 モジュールの作り方覚えたら組み込んでいきたい。 やっぱJDKと一緒にDLできるってのは初心者に勧めやすい。
NetBeansは5.0だったかあたりからアプリケーションで使うライブラリを 自動的にlibフォルダにコピーしてマニフェストファイルでリンクしてくれるのが便利だよな クラスパスをちゃんと知ってる人は別に問題ないけど、知らない人でも扱えるその手間のなさはいい
FlashとApolloに完全に食われつつある昨今、皆様いかがお過ごしでしょうか。
最近ApolloApolloと連呼して荒らしまわってるのはお前か 会社名とか聞くと面白そうだな
仮想マシン語(中間言語)走らせるタイプだと表面的な言語はシンタックスの違いですらなく、 プラットフォームなんてVMだから関係なく、そこまで行くと 開発の容易さと保守性と開発環境の充実の方が重要だろうなぁ。 JavaのEoDは中途半端で、ActionScriptなんてEcma-262だから保守性なんてあったモンじゃないし、 どっちもどっちだろ。 javaベースはプログラマ、Flashベースはデザイナで済み分けられてる現状、お互い平行線だと思うんだが。
AS/Apollo系のスレではJava厨が跋扈してるのね 正直どういう基準で同列に語ってるのかが理解できない
まー、適材適所がわからん馬鹿なんだろ。
86 :
名前は開発中のものです。 :2007/04/12(木) 19:15:04 ID:e/3TFgB5
これもひどい
87 :
名前は開発中のものです。 :2007/04/13(金) 00:59:09 ID:uMYzPjGT
JAVAってJITなの?
HotSpot
JITは8年くらい前に卒業 Hotspotというレスポンスとスループットを両立するものになっておる
12fpsくらいのアクションゲームがあるとしたら、おまえらがっかり? フレームワーク的なものの推奨fpsを模索してるんだが、ラインを知りたい。
別におもしろければなんでもいいよ ただ、60fpsが余裕で出ると思うのでマシンスペックで300MHzとかを対象にしているのであればそれでもいいけど 最低30fpsはほしい希ガス
Javaで30fpsって迷うよね。TimerTaskかポーリングか。 低負荷なポーリングとかあるんだろうか。
精度重視ならある程度のsleep等+ポーリング 実際はフルスクリーンならタイマー+垂直同期のみでいける ウインドウ時で垂直同期を取るにはJOGL+UMA以外のビデオ搭載のやつが必要 どっちにしろ60fpsは余裕
>>90 12fpsでも遊べなくないからがっかりはしない。
GUIツールキットと描画に何を使うかでもfpsは差があるからそれ次第でもある。
AWT + JOGLで最近の性能ならjake2で300fps位、JOGLのデモでもそれ以上出る。
描画が何にしてもSwingだとSwingのバッファに書いてからパイプラインに渡す分遅いがそれでも、
60fpsは出る。今時javaで速度気にすんのは知らん人間だけだよ。
それより、俺としてはデカイGCがドカっと来て明らかにもたついてんのは気になるかな。小さいCGがチマチマ来るのは気にならない。
今からフレームワーク作るならアプレットよりJWSを視野に入れた方が良いよ。
と、AWT+JOGL+JMF(+JOAL)+viajeで作ってる最中の俺が言ってみる。
AWT使うならインストール型標準拡張のJNIくらいpure Javaと差はないと思ってる。
・・・と、俺の考え。
>>94 JOGLはGLJPanel使うと60fpsでないな
その改善をJavaSE6でやるはずだったが、ベータ版は有効だったのに正式版で無効になった
JavaSE7でちゃんとOpenGLパイプラインが動けばGLCanvas捨てることが出来るんだけどね
GLCanvasはフルスクリーン時描画が出来ないバグもちだから実は使いたくないと思ったり
そのかわりビデオチップによってはウインドウモードで垂直同期が効くというすぐれものだったりもするが
パイプラインの変更は既に実装済みでも有効にするとVGAドライバのバグ誘発してOSと無理心中だから仕方ない。 しかも有効にした途端に必ず落ちるという訳でもないみたい。やっかいだねぇ。 java側の問題ではないからSEのバージョンは関係ないよ。 ゲームならGUIは自前だからAWTの見た目なんて関係なし、フルスクリーンはどうだろう、やる人間の好みかな?エロゲだと居るだろうねw けど、アプリ実行中にころころウィンドウとフルスクリーン切り替えれるのってwinくらいなんじゃなかったっけ? JOGLが実際に使える段階まで来たのは良い事だよ。しかも、最近やたら更新早い。 java.netでホストされてる標準ライブラリに取り込まれてない 公式プロジェクトは頻繁にクラス・パッケージ構成が変わるからフレームワーク組むとき困るよ・・・。
フルスクリーンはアクション系こそ必要 そしてここはアクション系のスレ パイプライン有効にするとすべての環境で不具合が出るんだけれども特定のドライバの問題ってわけではないようだ J2SE5.0からSwing描画にOpenGl使えるようになってるんだけれども、有効にするとリペイントマネージャまわりがおかしいのかめちゃくちゃになる 標準でOpenGL使えるようになるには遠すぎ
-Dsun.java2d.opengl=true -Dsun.java2d.opengl.fbobject=false 付けて暫く動かしてみそ、ドライバによってはドライバのバグを再現する。必ずなる訳ではない。
UMAビデオでもGeForceでもだめだが?
12fpsでアクションゲームってwww 今時、Flashでも30fpsは出るぞ
あおり方間違ってるぞ Javaでは垂直同期を取って60fpsが可能。これはflashには不可能。 上の12fpsというのは作者が12fpsでつくってもいいか?といってるだけかと。 そもそも4月の書き込みに今頃つっこむなぞ・・・
102 :
名前は開発中のものです。 :2007/09/08(土) 04:36:01 ID:sP8eKrEk
Java(アプリケーション)のスレッドがないのでここで 質問させてもらいますが、インスタンスのプールってどのように 実装していますか? あと、画像の透過はどうしていますか?gifやpngだとジャギーがでてくる ので画像を二枚用意して比較させて1ドットづつアルファ値を設定して いますがいい方法があったら教えてもらえませんか?
インスタンスプールの実装がわからないのならそれはまだ使うタイミングではないと思われ 必要な場合ってのは限られるからね 画像に関してはJava2Dでアンチエイリアスをかけるようにする もしくはpngでαつきで作成しておく
ggsdg dfhhf fdgg sdgsd sdgsd
105 :
名前は開発中のものです。 :2007/12/31(月) 06:06:31 ID:nIWs4m/L
晒しあげ
あげ
Javaゲーム作成の総合スレみたいなスレが無いのですが、 どなたかたてていただけないでしょうか?
前立ったのはすぐ落ちたからな・・・
もう落ちたスレばっかりだけれども過去に語りつくしたというのが正しいかと 基本的に1.4.1の時点でアクセラレーションがきいてきたりしてるし1.5、1.6とあまりパワーアップはしていない あ、でもJavaSoundは使いやすくなってると思う 凝ったことをしたりアクセラレーションを最大限にしたいのならJOGLを使う ジョイパッドを使いたいのならJNIは必須になるのがちょっと厄介かな ほとんどの場合Windowsさえ対応していればいいのだろうけど
基本的にJava自体の機能・性能向上と1GHzを超えた今のマシンの性能では大概なんでもできるよ 60fpsでアルファブレンディングばりばりでOgg Vorbisでサウンドもならしたりするのもね ゲーム自体の作成が初めてなのか、Javaでの作法がわからないのかというところだが、 前者なら今はゲーム開発がわかる雑誌がほぼ全滅してるのでちょっとつらいかもしれない 15年前は大量にあったのにねぇ 後者ならば「15歳からはじめる〜」というのが一番の解かな ゲームをとにかくすぐに作りたいのならば「ShinGL3」 そこにある2面まであるサンプルSTGがShinGL3つかってるから機能は分かりやすいはず
そもそもVMが糞だから Sunの技術者って底辺ドカタみたいなのしか居ないんだろうか
118 :
名前は開発中のものです。 :2008/09/08(月) 11:12:42 ID:xrQK/F8B
4年目にしてやっと118レスおめ
記念パピコ
120 :
名前は開発中のものです。 :2008/09/21(日) 18:46:00 ID:OsH1BNzp
Javaでアクションゲームつくっても、コントローラーが使えないから遊べないんだよな・・・・
JNIで実装汁
JoyToKeyみたいなのをユーザ側で用意してもらうとか
jmonkeyengine
124 :
名前は開発中のものです。 :2008/10/03(金) 00:20:58 ID:+ke5of9f
javaで画面を揺らすにはどうしたらいい? ドラクエでダメージうけたときみたいに
Javaだろうがそうでなかろうが、変わらんと思うけど
仮にJavaAppletで作っているとしたら、JavaScript側にアクセスして ウィンドウ全体を揺らすとかいうネタを仕込むのも面白いかもね 雑魚戦じゃなくイベント限定にしないとウザイが
127 :
名前は開発中のものです。 :2008/10/04(土) 04:59:23 ID:wlsIJF4e
オート戦闘でメッセージ作成と表示の同期をとるにはどうしたらいい?
Javaだろうがそうでなかろうが、変わらんと思うけど
なんかJavaとまったく関係のない質問ばかりくるのはなんでだろう
つまりJavaでのゲーム制作も一般的になったと言うことですね、分かります
確かにそういう面はあるのかもしれないな
132 :
名前は開発中のものです。 :2008/10/04(土) 14:12:05 ID:wlsIJF4e
お前らスキルがないなら黙ってろよ
質問するスレまちがえてるのになんだこいつは ああ、釣られてしまったか
134 :
名前は開発中のものです。 :2008/10/04(土) 18:12:06 ID:wlsIJF4e
アクションゲームでもこういう要素はあると思うんだけどな ああ、ここは「初級」者しかいないのか・・・・
そりゃ上級者さんたちはこんなところに頼らなくても自力で解決なさいますから・・・
アクションゲームでもない質問だったのかいw
まあ、1フレーム中でのエフェクトやメッセージ表示や音再生を保持するクラスを作って、 listに突っ込んでいけばいいんでないかい? んで、frontから再生していく。 1フレーム区切りだとデータ量が多くなると思うなら、もっと長く区切ってもいいし。 その場合、コードが煩雑になるけどね。
スレ間違えて自分で解決も出来ないくせに初級者しかいないとか わめきちらすID:wlsIJF4eがいるスレはここですか?
JMonkeyEngineの解説してください よろしくお願いいたします JMonkeyEngineは3Dのエンジンみたいですが、2Dもつくれますよね? ゲームループとかも管理してくれるみたいだから知りたいです よろしくお願いいたします
140 :
名前は開発中のものです。 :2008/10/05(日) 14:46:42 ID:vHSrsShI
動作上2次元かもしれないけど 内訳では4次元配列くらいが必要では?
アプレットとかJWSとかでJOGLやるやつってdll類はどうしてんの? 全部署名つけてオレオレ証明書でダイアログ出す? それでユーザに「危ないってダイアログ出すけど信用してOK押して」って言うわけ?
Sunの署名付きのjar(DLL入り)が配布されてるのでそれを使う
if(isJump == false && jumpKey == ture) { // ジャンプ中でなく、ジャンプキーが押されたら isJump = true; // ジャンプ中にする vy = -jumpSpeed; // ジャンプスピード(初速) } vy += gravity; // 重力をかける ---------------------------------------- 横スクロール(マリオ型)アクションゲームで、上記みたいにジャンプを実装している場合、 「ジャンプキーが押された時間が短い場合は小ジャンプにする」 という風にするには根本的にプログラムを変更しないといけないですか?
物理的にはおかしいけど空中でもボタンが押されてたら上向きにちょっと加速度与えればいいだけ 実際マリオはそうだろ
145 :
143 :2009/02/23(月) 19:48:11 ID:8ReVmxnp
>>144 マリオはそうなんですか、知りませんでした。
それでやってみます、ありがとうございました。
146 :
名前は開発中のものです。 :2009/03/04(水) 20:49:06 ID:BgNcpKU6
JOGLのGLCanvasで自前ループ内display()させてるとどうもちらつく 別スレッドでAnimator使ったりしないとまずいのだろうか 垂直同期との明示化がわからん(環境によって自動的にできたりできなかったり?)
displayってコールバックだから自分で呼ばないほうがええんじゃ
というか、それで例外吐かないんだ。 JOGL使いは占めのころは、OpenGL系のAPIを別スレッドからアクセスしたら いきなり例外吐いてびっくりしたものだが。
TextureIOの初期読み取りロジックを別に抜き出した時は別スレッド扱いの例外吐かれて困まった。 一本道のつもりだったのだけどイベントリスナスレッドとかが影響してるのか。
>>150 自分はTextureIOのnewTextureがコンテクスト依存と思っていなくて
半泣きになったことがある。
enableとかbindをしなければ、別スレッドから呼んでも大丈夫だろうと
思っていたんだよなあ…
結局、テクスチャ登録は絵だけ準備してフラグを立てて、
displayメソッドの中からフラグをチェックしてテクスチャオブジェクトを生成するという
めんどうな動きになった。
152 :
150 :2009/03/23(月) 22:38:48 ID:uzXOwN2A
>>151 同じ症状だったと思う。とった解決策も同じだ(w
もうちょい綺麗に書くイデオムみたいのはあるのかな。
153 :
151 :2009/03/23(月) 23:00:18 ID:ZB3pm8mv
>>152 仲間がいたようなのでついでに聞いてみる。
テクスチャオブジェクトのガベージコレクションってどうしてる?
ファイナライザにdisableを仕込みたいところだけど、
ファイナライザはGLAutoDrawableとは別スレッドから呼ばれるだろうから、
同じ理由で例外吐いて死にそうな気がする。
自分の場合、これはまだ解決してない。
オブジェクトが破棄されるたびにVRAMにゴミが残るわけで、
どうしたものかと思っているんだが…
やっぱり、ゲームエンジン側で管理すべきなのかな。
テクスチャオブジェクトの管理用コレクションとモデルオブジェクト管理用コレクションを見比べて、
「そのテクスチャを利用しているモデルオブジェクトがもはや存在しない」
となった時点で明示的にdisableをかけて、それからremoveする、と。
>>153 シーン中にインテリジェントに捨てる事に関してはオブジェクトに関してもテクスチャに関しても考えてないや
シーン中は(理論上)無限にプーリングしてシーン終了時の後始末でシーンコンテキストのテクスチャを全disable & 削除っていう方針
テクスチャ画像の重複登録をしないのは当然として、そこまで多種の画像を読み込む事を想定していないってのが正直な所
155 :
151 :2009/03/23(月) 23:27:33 ID:ZB3pm8mv
>>154 なるほど。その辺は割り切っちゃうという手もあるな。
自分のゲームエンジンでもテクスチャは共用されるから、
確かに、さほど厳密に管理しなくともVRAMを圧迫しない気はする。
考えてみれば、256x256x32bitなら、たかだか256KBだからなあ。
156 :
154 :2009/04/02(木) 19:49:00 ID:rnxHGA2h
過疎っているなぁ。 基本的な方針は同じだけどdisableに関してはテクスチャを使うときに enable → bind → 表示 → disableを毎回するように変えた。 やっぱりカレントスレッド問題が色々と面倒くさいので。
>>156 総合スレとの区別があいまいだしねえ…
ちなみに、enableしてないテクスチャオブジェクトをdisableすると例外吐くんだっけ?
これを受け付けてくれるなら、いきなりdisableしてもいいような気がする。
逆に、enableを多重にやると、VRAMに同じテクスチャイメージが多重登録されたりしそうで心配だが、
取り越し苦労だろうか。
>>144 すげえあたまいい・・・と感動してしまった
159 :
名前は開発中のものです。 :2009/05/14(木) 21:04:29 ID:jnlC9FY/
>>146 オハヨー!!
∧∧ ∩
(`・ω・)/
⊂ ノ
(つノ
(ノ
___/(___
/ (___/
 ̄ ̄ ̄ ̄ ̄ ̄
160 :
名前は開発中のものです。 :2009/11/04(水) 00:17:42 ID:mdwZ7HUY
アニメーションの表示ってどうやってます? 俺はコンピュータ内蔵の時計呼び出してその値からやってるんだけど、 そうするとポーズ画面のあと再開したときにアニメーションがずれちゃうんだよ どうしたらいいかな
経過時間を算出するようにして ポーズ中は経過時間が増えないようにするとか
ゲームのはなしじゃないの? フレーム単位で処理するからずれるとかはないとおもうけど 可変フレームのはなし?
可変フレームでもアニメのコマnからn+1へ描画させるタイミングをフレームを考慮した時間後に書き換えるからずれはしない。 何か忘れてる。
test
javaはpng画像の表示は重いですか? マリオ風をつくってるんですがgifで表示させてた時よりカクカクします。 フルカラー+透過を実現したくてpngにしたんですが…。
ソフトウェア描画だからな それでなくても透過合成は重い部類だし
αブレンディング使ってるならハードウェアアクセラレーションがきいていても使っていないときよりは速度は落ちる スペックにもよるが32*32のスプライト10万個くらいだすと60fps維持できないと思う
アルファチャンネルじゃなくて、普通の透過なんですけどね…。 別の方法試してみようと思います。ありがとうございました。
ならコードが悪いだけだな
170 :
168 :2010/05/09(日) 01:02:49 ID:f5Ph/Aqm
>>169 drawImageでダブルバッファリングしながら表示させてます。
1000*1000くらいの大きな画像に24*24くらいのマップチップやキャラチップを並べて、
drawImage(img, x1, y1, x2, y2, imgX1, imgY1, imgX2, imgY2, observer);
でimgX1〜imgY2を指定してチップを表示してるんですが、もしかして各チップを
一つずつのファイルに分けた方が高速ですかね?それともdrawImage使うのがそもそもダメですか?;;
転送元と転送先のImageはなに? あとJavaはJavaSE6update10以上つかってる?
172 :
168 :2010/05/09(日) 16:51:18 ID:f5Ph/Aqm
転送元と転送先のImageというのは、描画する画像の型と描画先の画像の型という意味でいいですか? 一応Image型をBufferedImage型に描画してます。 転送元がImage型だからカクカクするのかなと思ってBufferedImage型→BufferedImage型も試してみましたが あまり改善されませんでした。 JavaバージョンはJavaSE6update18です。
転送元がImageということはどういうフォーマットになっているかわからないってことかな。 描画バッファから画面への転送の方法とかどうしているかも気になる。 あとはピクセルフォーマットを同設定しているかか。 転送もとのフォーマット 描画バッファのフォーマット 画面のフォーマット これらをどう設定しているかにもよる。 あとImageの分割もやってみた?32bppだと1000*1000で4MBも食うわけで。
もうハードウェアアクセラレーションが効く環境に変えちゃえばいいのに アホみたいに速いよw
>>168 カラーが24bitなら透過は8bitになってると思うよ
そして全ての透過値が0xffか0x00しかなくても、8bitのアルファチャネルがあるのと同様のロジックが走る
アクセラレーションが効いてなければ結構描画効率は落ちる
マリオみたいなゲームなら1チップに255色以上使う必要性も少ないだろうし、
リソース合成時かゲーム起動時に減色して透過インデックスを指定するようにしたらどうかな
176 :
168 :2010/05/10(月) 01:29:54 ID:CH9wxDuw
皆さんありがとうございます。
http://javagame.skr.jp/index.php?%A5%A2%A5%AF%A5%C6%A5%A3%A5%D6%A5%EC%A5%F3%A5%C0%A5%EA%A5%F3%A5%B0 に書いてある、repaint()を使わないで描画する方法(アクティブレンダリング)というのをやってみたら大分カクカクが収まりました。
>>173 すいません、勉強不足で仰られていることの意味がわからないんでコード晒します。
>>168 からいろいろ変えてみて、今現在、
Image img = Toolkit.getDefaultToolkit().getImage(getClass().getResource(filename));
MediaTracker tracker = new MediaTracker(this);
tracker.addImage(img, 0);
try {
tracker.waitForID(0);
} catch (InterruptedException e) {
e.printStackTrace();
}
BufferedImage bimg= new BufferedImage(img.getWidth(null),img.getHeight(null),BufferedImage.TYPE_4BYTE_ABGR);
Graphics g = bimg.createGraphics();
g.drawImage(img,0,0,null);
でpng画像をbimgに読み込んだ後、drawImageでオフスクリーンバッファに描画してます。
画面への転送方法は先程も書きましたがrepaint()を使わない方法に変えてみました。
あと、画像を最初にBufferedImageで読み込んでいても、チップは分割しておいたほうがいいですか?
>>174 すいません、軽く調べましたがなんか難しそうなので諦めます。
>>175 そうなんですか。うーん、どうしてもフルカラーでいきたいんですよね…。無理そうならgifに戻すことにします。
画像のロードは遅延読み込みやりたいわけじゃないならImageIOつかうとよいよ。転送待ちをする必要ないし。 あとABGRとかARGBとか順番によって大きく速度が変わるからピクセルフォーマットは意識したほうがよい。 転送先はVRAM、もしくはコンパチブルピクセルフォーマットのほうがいいよ。 そして転送元もあわせたほうがよい場合が多い。 あとは特定色の透過をしたい場合TransparencyがBITMASKになってると大概早いはず。
178 :
名前は開発中のものです。 :2010/05/11(火) 10:35:00 ID:RB0dCl6F
初級って書いてあるから開いてみたけど 話が難しすぎてさっぱりわからないwww ダメだ俺orz
BufferStrategy クラスがこのスレでは出てこないねぇ。 いまどきはこれが必須と言われている。
画像を描画するときに回転させるのではなく、 あらかじめ画像を1度ずつ回転させたImageオブジェクトの配列を作成するにはどうしたらいいですか? 今のところGraphics2Dのrotate()で描画先のGraphicsを回転させているのですが、無駄が多いような気がしまして・・・
181 :
名前は開発中のものです。 :2012/03/05(月) 23:18:01.39 ID:S6tKV2yC
>>180 回転済みのBufferedImageの用意すると
描写時にグラフィックメモリが大量に必要になるから
回転済みの用意しない方がいいと思うよ
1回描写すればキャッシュで速くなるし
回転もグラボ使うから遅くならない
182 :
名前は開発中のものです。 :2012/03/05(月) 23:22:53.23 ID:S6tKV2yC
>>179 ダブルバッファだったら
Swingが自動的にやってくれているから
意識しなくていいと思う
183 :
名前は開発中のものです。 :2012/05/11(金) 14:13:36.56 ID:K3ACPeVc
斜めに動かす場合なんですけど例えば 1.4,-1 で動かす場合 固定少数で14として扱う方法は知っていますが ビットシフトでやる場合どうやってやるのか知りたいです 1.4<<7 で 179.2だから 179として扱えばどうかと思っているところです 精度的に3桁あっても厳しいでしょうか?
固定少数で14として扱うじゃなくて、1.4を整数で扱いたいから14なんじゃないの? でこの場合10倍してるど、ビットシフトなら2の乗数倍するだけだから考え方は同じだね。 精度的な話は自分がほしい精度なんで厳しいかどうかの基準がわからん。
1を65536で扱うのが固定少数でしたかね それなら1.4はだいたい91750だからこの数値で扱えばいいんだろうか 面倒だから10倍でやるほうがよさそうですね
このスレ結構まとも(笑)
全角スペースを半角に置換して下さい public class DebugFrameResizeMouse { private JFrame frame = null; public static void main(String[] args){ new DebugFrameResizeMouse().runApp(); } public class EnableMouseResizeAction extends AbstractAction { public EnableMouseResizeAction(){ this.putValue(NAME, "Enable Mouse Resize"); } public void actionPerformed(ActionEvent arg0) { frame.setResizable(true); } } public class DisableMouseResizeAction extends AbstractAction { public DisableMouseResizeAction(){ this.putValue(NAME, "Disable Mouse Resize"); } public void actionPerformed(ActionEvent arg0) { frame.setResizable(false); } } private JMenu createMouseMenu(){ JMenu m = new JMenu("Mouse"); m.add(new JMenuItem(new EnableMouseResizeAction())); m.add(new JMenuItem(new DisableMouseResizeAction())); return m; } public void runApp(){ frame = new JFrame("Test"); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); frame.setPreferredSize(new Dimension(640,480)); JMenuBar mbar = new JMenuBar(); mbar.add(this.createMouseMenu()); frame.setJMenuBar(mbar); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }
188 :
187 :2012/05/14(月) 18:00:07.71 ID:v4rkIglG
当方の環境は、windows 7、Java SE 1.6 update 32 です setResizable のオンオフでウィンドウの大きさが 変わってしまうのですがどういう理由だと思いますか 動作はこれでいいのでしょうか
frame.pack();によってウィンドウのサイズを出来るだけ小さくなる(最適化する)ように指定してるからじゃない? サイズ変更の可能/不可にかかわらずウィンドウの内側のサイズは一定+サイズ変更禁止用の細いウィンドウ枠 の全体としては小さくなったんだと思うよ サイズ変わるの嫌ならsetSizeで解決すると思う
インセットが変わるみたいでした。 public void actionPerformed(ActionEvent arg0) { frame.setResizable(true); frame.pack(); System.out.println("Resizable"); System.out.println(frame.getSize()); System.out.println(frame.getInsets()); } Nonresizable java.awt.Dimension[width=640,height=480] java.awt.Insets[top=25,left=3,bottom=3,right=3] Resizable java.awt.Dimension[width=640,height=480] java.awt.Insets[top=30,left=8,bottom=8,right=8]
俺も素直にBufferStrategy使ったほうが良い気がする