【JAVA】2Dアクションゲームを作る【初級】at GAMEDEV
【JAVA】2Dアクションゲームを作る【初級】 - 暇つぶし2ch12:名前は開発中のものです。
04/09/12 21:09:16 Fx/3T5NO
Javaアプレットは簡単なゲームのデモをサイト上に載せるのに便利だけど、
いつも悩むのが速度調整なんだ。
現在時刻の取得、インターバルタイマ、sleepやwaitメソッド、どれをとっても
20ミリ秒程度の精度しかない。

どうやったらどのマシンでも同じ速度で動かせる?

13:関連スレ(シューティング)
04/09/12 22:58:39 V/gfmIdV
PCで出来る2Dシューティング(STG)総合スレ15
スレリンク(game板)
シューティングゲーム製作技術総合 4機目
スレリンク(gamedev板)
★シューティングゲームは終わらない-STAGE32-
スレリンク(famicom板)
PCエンジンシューティング総合スレ
スレリンク(retro板)
下手の横好きシューティング5
スレリンク(gsaloon板)
さて、3Dシューティングでも作るか
スレリンク(gamedev板)
フライトシューティング隔離スレッド
スレリンク(fly板)

14:名前は開発中のものです。
04/09/12 23:51:11 Uwc56kdh
>>12
スリープ間隔を20ミリ秒以上にする

15:名前は開発中のものです。
04/09/14 00:36:09 OuV1fMqk
>>12
OSは?

16:12
04/09/14 18:19:59 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)ウェイト値++;
}


17:名前は開発中のものです。
04/09/14 20:43:22 OuV1fMqk
Javaでの時間管理の話はいろいろでてるが
TimerTaskとObject.waitが最有力

18:名前は開発中のものです。
04/09/14 21:18:11 OnFUzIY5
>>17
サンプルキボンヌ

19:12
04/09/14 21:46:30 ckBU9Z+e
>>17
JAVAでゲーム作成
スレリンク(gamedev板)l50
の49レス群で検討されている方法でしょうか(実は私のレスですがw)。
他の話もご存知のようなので、是非お聞きしたいです。

>>18
速度調整に的を絞ったサンプルをいくつか書いてみます。
コーディング速度は遅いですが日付が変わるまでには何とか。

20:17
04/09/14 23:18:31 OuV1fMqk
まぁあのスレでTimerTask+waitを提唱したの俺だがな
Linux等Win以外での動作安定度もこの方法が一番よかったのが決定だかな
ポーリングはJavaの仕組みを考えれば効率悪いのはあきらかだしね

hotspotはプログラムが動いている間にバックグラウンドでコンパイルが進んでいるわけだし
コレが阻害されるというのは結果としてよくない

-XX:+PrintCompilationとかつけて実行してみなされ


21:名前は開発中のものです。
04/09/14 23:57:14 ckBU9Z+e
サンプルを用意しました。
ものすごく短くて単調なので期待しないでください。
URLリンク(gamdev.org)

私は「フラっとサイトを訪れた一般ユーザが何の抵抗もなくサンプルを閲覧できる可能性が高い」ことを
最優先事項にアプレットを作っているので、まじめにゲームを開発するこの板は趣旨が合わないのかも
しれません。

22:名前は開発中のものです。
04/09/15 07:53:36 fzloy3Ue
おー、すばらしいです!
帰ってきてから見せてもらいます。
サンクス!

23:名前は開発中のものです。
04/09/18 20:12:15 j8Y6GvgW
先生!
わざわざ圧縮しないでください!

24:12=21
04/09/21 07:25:09 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 FBDpqX5t
あああ、自機の方向に弾を撃たせる処理で躓いた・・・
右向いて撃った後、左を向くと弾まで一緒に左を向きやがる・・・

26:名前は開発中のものです。
04/09/23 21:20:58 aZqAfyms
ヤムチャかよ!

27:名前は開発中のものです。
04/09/23 21:31:25 teKJ9g46
面白いからそれでいいじゃん。

28:名前は開発中のものです。
04/09/24 10:47:48 rxnCqiG6
斬新なアイデアだ

29:名前は開発中のものです。
04/09/25 02:11:22 m5HAIfiz
え?Thread.sleep(16)で出来てなかったの?
これは出来てないの?

30:12
04/10/02 12:36:34 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 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;
}

32:名前は開発中のものです。
05/01/26 12:47:35 F1s8Zwef
e

33:名前は開発中のものです。
05/01/26 13:11:34 iPs053oe
Javaの時間管理は最善はTimerTaskとの組み合わせな


34:名前は開発中のものです。
05/01/26 18:51:37 DaQEkIt1
・ガベージコレクションが動作するとフレーム数が変わってしまう
・ガベージコレクションが動作するタイミングを制御できない

これがゲームにおける時間管理のネックになっとるわけだが、
Sunはガベコレの禁止と強制のAPIは作ってくれないのだろうか。

35:名前は開発中のものです。
05/01/26 20:43:03 iPs053oe
GCがネックになるゲームのほうが少ないと思うが・・・
もしねっくになってるならメモリ管理やばいかもね

メモリの使用量を把握してnew領域でのGCだけに専念させるだけ

36:名前は開発中のものです。
05/01/27 00:21:06 dod+XOt2
>GCがネックになるゲームのほうが少ないと思うが・・・

( ゚д゚) ポカーン

37:名前は開発中のものです。
05/01/27 00:42:29 ZTZ4mfiF
いまどきJavaでGCがネックになるプログラムかけるやつのほうがおかしい
Windowsでたまに垂直同期取りこぼすとかその程度と同じ話だし
完璧もとめるならRTOSいけ

38:名前は開発中のものです。
05/01/27 01:13:44 3sf5TT/z
GCうんぬん言ってる香具師は最近のJavaVMに実装されているGCについて調べて見れ。
まずはそれからだ。

39:名前は開発中のものです。
05/01/27 01:50:45 Zc+qNABH
GCがそれほど致命的だとは思わんが、それよりもVM自体の実装が(ry

40:名前は開発中のものです。
05/01/27 02:12:53 3sf5TT/z
まーまー、CとJava両方で自力でMD5を求めるコードでも書いて実行してみよう。

41:名前は開発中のものです。
05/01/27 21:57:36 fopdIjFa
Javaの欠点はMSがVMを最初から入れないこと

42:名前は開発中のものです。
05/01/28 16:20:14 qY41Ezue
それはJavaでなくてMSの欠点だ

43:名前は開発中のものです。
05/12/15 21:44:28 0EyZOrrF
アップスキャンコンバータ

44:名前は開発中のものです。
06/01/08 10:07:24 xb+qmFYY
保守

45:名前は開発中のものです。
06/01/08 10:31:34 Q5IJU6st
何かネタをくれ~

46:名前は開発中のものです。
06/01/08 14:46:19 3CJHpBe+
2Dアクションといえばパックマンかマリオだろ

47:名前は開発中のものです。
06/03/15 08:46:55 916ZRAwJ
 

48:名前は開発中のものです。
06/04/15 01:26:13 sf5nUDiw
誰か夢をくれ~~

49:名前は開発中のものです。
06/04/15 22:26:15 lpccgP2z
>>48
      ,,..,,...,,
    〃´, ~~ヽ
    | | iイノリ从)〉
    ゝ|リ|!.゚ ヮ゚ノi
    Ci}~レπv{~つ[ 夢 ]
     ノ!( ,i  , )
      ~し'ノ~

50:名前は開発中のものです。
06/09/09 19:16:23 Etye9TEO
age

51:名前は開発中のものです。
06/09/15 18:02:34 hLFPrz9k
>>48
あの……落としものですよ?
         .∧__,,∧
        (´・ω・`)
         (つ夢と)
         `u―u´
  あなたのすぐ後ろに落ちていましたよ?
たとえあなたの夢が叶わなかったとしても…
         .∧__,,∧
        (´・ω・`)
         (つ夢と)
         `u―u´
叶えようとしたあなたの心を捨てないで下さいね…

52:名前は開発中のものです。
06/11/24 01:07:03 HeoETDlJ
俺も頑張るよ!

53:名前は開発中のものです。
06/11/26 15:41:54 1oJzDjvL
誰か金をくれ~~


54:名前は開発中のものです。
06/11/26 19:26:37 8IgW2e6l
Javaの開発は金かかんなくて助かるわ~

55:名前は開発中のものです。
06/12/01 11:09:36 LC+/aYM5
私もファミコンのゲームにありそうな2Dアクション物を作ろうと思って、Java素人なのですが作ってみました。
未だにアプレットの作り方すらよーわからんです。(^^ゞ
URLリンク(www.perfect-logic.net)

56:名前は開発中のものです。
06/12/01 18:01:06 y3AgeiUV
せっかくだから↓で告知して評価してもらってきたら?こんなマイナーなスレじゃなくて

■自主製作ゲーム:開発状況報告スレVer0.7■
スレリンク(gamedev板)

57:名前は開発中のものです。
06/12/01 18:23:44 LC+/aYM5
>>56
ありがとうございます~。
スレッドを一通り読んでみたら、告知してみますね♪

58:名前は開発中のものです。
07/02/27 00:27:51 aBqJ/Obc
ゲーム製作でJavaってあまり聞かないけど
どこがゲーム製作に向いてないのでしょう

59:名前は開発中のものです。
07/02/27 02:13:15 vI3+be/W
別に向いてないわけではない
海外では普通に3Dもバリバリ使われてるし
日本でのJava使い=業務用というイメージかね
そのうちでてくるでしょ

去年JOGL1.0になったばかりだし

60:名前は開発中のものです。
07/02/27 08:32:11 Qf1ALB7E
処理速度的にまだ弱い
あとはゲーム作成のノウハウがまだ整っていないところかな

まあ速度はハードやAPIが速くなってきてるし
時間の問題かも

なんでもタダで環境揃うし俺みたいな貧乏人にはいい環境なんですがね
JAVAは

61:名前は開発中のものです。
07/02/27 10:52:16 no4sgWaC
URLリンク(woomy.dip.jp)

エミュレーター?

62:名前は開発中のものです。
07/02/27 11:33:50 B4ufeums
おおむねC言語の9割程度の速度が出ている状況で
2Dアクションゲームで処理速度が足りないなんてあまりなさそうだが

63:名前は開発中のものです。
07/02/27 13:58:54 eZOuwfTZ
>>58
動作にランタイムが必要な点で嫌ってる

64:名前は開発中のものです。
07/03/03 08:01:40 94HMLa1l
winのネイティブゲーの方がよっぽどランタイムに頼ってるこの矛盾・・・問題は初めから入ってるかどうかだな。

速度も描画作法無視した描画やらない限り十分過ぎる。
javaが遅いとか今時言ってる連中は頭が1.3の暗黒時代で止まってる。

3Dの方ならそもそも高級すぎるんでゲーム向きじゃない。JOGLも1.0出したからこれから。



65:名前は開発中のものです。
07/03/03 22:20:31 4ndYI6Y/
java web start が普及してほしい。
というか自分のサイトではjava web start使うようにするわ。

66:名前は開発中のものです。
07/03/08 22:45:43 v+aMbBg1
>>63
まぁ、それも後数年だよ。

そのうちパソコンはみんなJavaベースのOSで動いてJavaアプリを動かすための環境になる。
WindowsやらMacといった旧型OSの方が、JavaベースOS上のランタイム(エミュレータ)で動くようになるだろうね。


67:名前は開発中のものです。
07/03/09 03:37:19 l4bht04N
組み込みの世界ならそれもありかも

68:名前は開発中のものです。
07/03/09 14:46:34 UpVLWozu
仮にそのJavaベースのOS上で動くWinエミュやMacエミュが完璧だとして、
そのエミュ上にさらにJavaランタイムが必要になりそうな

69:名前は開発中のものです。
07/03/09 15:52:55 uJO/ivat
長時間起動したままの場合GCがメモリの断片化を考えると有利だよな
実際ルータとかレコーダとかそういうのでも起こってるし

組み込みのプログラムの規模の肥大化にあわせてアプリ側もヒープの動的確保使わないとやっていられなくなってるし

70:名前は開発中のものです。
07/03/10 12:22:18 xgekqMww
んでそういう組み込まれた機器がPCなんて触った事ありませんって連中の所にあってUIがグラフィックスバリバリとかね。
Flashのメニューみたいな。携帯化するよw

エージェントの様なシステムと組み合わせる時にJavaOS使えるかもね。

カーナビにタチコマ、そこからネットワーク介して思考戦車に移動、電脳に移動とか下にあるモン意識せず共通に仮想化出来て。

まあスレチだが

71:名前は開発中のものです。
07/03/10 13:13:11 NZYMmz3a
>>70
これからのゲームはMIDP2.0が標準になるだろうね。
携帯ではすでに当たり前の存在になりつつあるし、パソコンでも利用可能。
機能も本格的なフレームバッファや標準的なサウンド機能とゲーム開発には十分だし。

MIDPで開発すれば「一度書けばどこでも動く」Java本来の世界に逝くことができる。


72:名前は開発中のものです。
07/03/10 14:14:32 /HVMBhqB
JavaMEじゃちと無理だろ
JavaSE以上にヒープや使えるマシンパワー、メモリ速度が違いすぎてそれがネックになりやすい
あくまでも同一言語で開発が出来て移植が容易という程度だな
同じキャリア内でもゲームとかが個別に対応してる現状を考えるとなおさら

73:C使い
07/03/17 20:31:37 e0pLCHEg
eclipseちょっと見たけど
これからはJAVAの時代がくるかもって本気で思った。

eclipseほどのソフトが無料だったら
インディアやチャイニーズのJAVA人口増えそう。
もちろんジャパニーズも

74:名前は開発中のものです。
07/03/18 01:44:09 /FCakVJu
そのEclipseはオライリーに去年負け組みの烙印押されてネットで反感かって修整させたようだが
Googleも基幹システム実はJavaつかってましたというのもわかっちまったしなぁ

75:名前は開発中のものです。
07/03/19 00:09:04 0mpAkYzl
久しぶりにJOGLのサイトに行ったら、大分バージョンアップしていたな。

76:名前は開発中のものです。
07/03/19 21:03:58 Zu/PHoBB
1.0が去年でて安定してるんで2DゲームでもJOGLは悪くはないだろうね
ただ少し古めの統合ビデオだときつい
915GM以降がターゲットならまったく問題はないが

77:名前は開発中のものです。
07/03/19 21:43:02 UrJuPpg+
915GMってそんなに良いチップなの?
具体的にGF4程度の性能はある?

915GM以降ってよく聞くんだけど偶然かな・・・

78:名前は開発中のものです。
07/03/19 23:02:35 Zu/PHoBB
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並みに遅い場合もある

79:名前は開発中のものです。
07/03/20 22:03:47 nx0qHnSt
まあ俺はNetBeans派だけどね。
モジュールの作り方覚えたら組み込んでいきたい。
やっぱJDKと一緒にDLできるってのは初心者に勧めやすい。

80:名前は開発中のものです。
07/03/20 23:00:07 3GNvhVA2
NetBeansは5.0だったかあたりからアプリケーションで使うライブラリを
自動的にlibフォルダにコピーしてマニフェストファイルでリンクしてくれるのが便利だよな

クラスパスをちゃんと知ってる人は別に問題ないけど、知らない人でも扱えるその手間のなさはいい

81:名前は開発中のものです。
07/04/04 17:31:18 xZsJ6jDt
FlashとApolloに完全に食われつつある昨今、皆様いかがお過ごしでしょうか。

82:名前は開発中のものです。
07/04/04 17:47:32 +3v2Q0mp
最近ApolloApolloと連呼して荒らしまわってるのはお前か
会社名とか聞くと面白そうだな

83:名前は開発中のものです。
07/04/04 17:58:33 UdFABoGJ
仮想マシン語(中間言語)走らせるタイプだと表面的な言語はシンタックスの違いですらなく、
プラットフォームなんてVMだから関係なく、そこまで行くと
開発の容易さと保守性と開発環境の充実の方が重要だろうなぁ。

JavaのEoDは中途半端で、ActionScriptなんてEcma-262だから保守性なんてあったモンじゃないし、
どっちもどっちだろ。

javaベースはプログラマ、Flashベースはデザイナで済み分けられてる現状、お互い平行線だと思うんだが。

84:名前は開発中のものです。
07/04/06 15:58:22 sxRNfl4U
AS/Apollo系のスレではJava厨が跋扈してるのね
正直どういう基準で同列に語ってるのかが理解できない

85:名前は開発中のものです。
07/04/06 22:54:19 +twN6j/w
まー、適材適所がわからん馬鹿なんだろ。

86:名前は開発中のものです。
07/04/12 19:15:04 e/3TFgB5
これもひどい

87:名前は開発中のものです。
07/04/13 00:59:09 uMYzPjGT
JAVAってJITなの?

88:名前は開発中のものです。
07/04/13 04:14:59 X1dHKijv
HotSpot

89:名前は開発中のものです。
07/04/13 10:45:12 HyA+bf47
JITは8年くらい前に卒業
Hotspotというレスポンスとスループットを両立するものになっておる

90:名前は開発中のものです。
07/04/27 19:41:09 W0CIDG0i
12fpsくらいのアクションゲームがあるとしたら、おまえらがっかり?
フレームワーク的なものの推奨fpsを模索してるんだが、ラインを知りたい。

91:名前は開発中のものです。
07/04/27 19:52:53 2hgvmjyM
別におもしろければなんでもいいよ

ただ、60fpsが余裕で出ると思うのでマシンスペックで300MHzとかを対象にしているのであればそれでもいいけど
最低30fpsはほしい希ガス

92:名前は開発中のものです。
07/04/27 20:56:23 W0CIDG0i
Javaで30fpsって迷うよね。TimerTaskかポーリングか。
低負荷なポーリングとかあるんだろうか。

93:名前は開発中のものです。
07/04/27 21:14:55 2hgvmjyM
精度重視ならある程度のsleep等+ポーリング
実際はフルスクリーンならタイマー+垂直同期のみでいける

ウインドウ時で垂直同期を取るにはJOGL+UMA以外のビデオ搭載のやつが必要

どっちにしろ60fpsは余裕

94:名前は開発中のものです。
07/04/28 01:15:47 Yt5Nv7VQ
>>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と差はないと思ってる。

・・・と、俺の考え。

95:名前は開発中のものです。
07/04/28 08:48:04 GbSr5Tht
>>94
JOGLはGLJPanel使うと60fpsでないな
その改善をJavaSE6でやるはずだったが、ベータ版は有効だったのに正式版で無効になった
JavaSE7でちゃんとOpenGLパイプラインが動けばGLCanvas捨てることが出来るんだけどね

GLCanvasはフルスクリーン時描画が出来ないバグもちだから実は使いたくないと思ったり
そのかわりビデオチップによってはウインドウモードで垂直同期が効くというすぐれものだったりもするが

96:名前は開発中のものです。
07/04/28 11:37:11 HANiMBGR
パイプラインの変更は既に実装済みでも有効にするとVGAドライバのバグ誘発してOSと無理心中だから仕方ない。

しかも有効にした途端に必ず落ちるという訳でもないみたい。やっかいだねぇ。
java側の問題ではないからSEのバージョンは関係ないよ。

ゲームならGUIは自前だからAWTの見た目なんて関係なし、フルスクリーンはどうだろう、やる人間の好みかな?エロゲだと居るだろうねw

けど、アプリ実行中にころころウィンドウとフルスクリーン切り替えれるのってwinくらいなんじゃなかったっけ?

JOGLが実際に使える段階まで来たのは良い事だよ。しかも、最近やたら更新早い。

java.netでホストされてる標準ライブラリに取り込まれてない
公式プロジェクトは頻繁にクラス・パッケージ構成が変わるからフレームワーク組むとき困るよ・・・。

97:名前は開発中のものです。
07/04/28 12:05:58 PlJLH/jq
フルスクリーンはアクション系こそ必要
そしてここはアクション系のスレ

パイプライン有効にするとすべての環境で不具合が出るんだけれども特定のドライバの問題ってわけではないようだ
J2SE5.0からSwing描画にOpenGl使えるようになってるんだけれども、有効にするとリペイントマネージャまわりがおかしいのかめちゃくちゃになる

標準でOpenGL使えるようになるには遠すぎ

98:名前は開発中のものです。
07/04/28 12:36:04 usJc8olx
-Dsun.java2d.opengl=true
-Dsun.java2d.opengl.fbobject=false

付けて暫く動かしてみそ、ドライバによってはドライバのバグを再現する。必ずなる訳ではない。

99:名前は開発中のものです。
07/04/28 12:50:51 PlJLH/jq
UMAビデオでもGeForceでもだめだが?

100:名前は開発中のものです。
07/06/03 17:25:21 wvWDdkI8
12fpsでアクションゲームってwww
今時、Flashでも30fpsは出るぞ

101:名前は開発中のものです。
07/06/03 17:30:39 qjYqK/Ln
あおり方間違ってるぞ

Javaでは垂直同期を取って60fpsが可能。これはflashには不可能。

上の12fpsというのは作者が12fpsでつくってもいいか?といってるだけかと。
そもそも4月の書き込みに今頃つっこむなぞ・・・

102:名前は開発中のものです。
07/09/08 04:36:01 sP8eKrEk
Java(アプリケーション)のスレッドがないのでここで
質問させてもらいますが、インスタンスのプールってどのように
実装していますか?
あと、画像の透過はどうしていますか?gifやpngだとジャギーがでてくる
ので画像を二枚用意して比較させて1ドットづつアルファ値を設定して
いますがいい方法があったら教えてもらえませんか?

103:名前は開発中のものです。
07/09/08 13:04:20 F1K7atqP
インスタンスプールの実装がわからないのならそれはまだ使うタイミングではないと思われ
必要な場合ってのは限られるからね

画像に関してはJava2Dでアンチエイリアスをかけるようにする
もしくはpngでαつきで作成しておく

104:名前は開発中のものです。
07/12/31 01:08:49 DW0nBc61
ggsdg



dfhhf




fdgg



sdgsd


sdgsd



105:名前は開発中のものです。
07/12/31 06:06:31 nIWs4m/L
晒しあげ

106:通行中のjuner
08/03/10 09:01:44 Hz+DJliq
通行ついでに、最近スキルを得る為に作ってみているものを貼ってみる。
URLリンク(juner.csx.jp)

107:名前は開発中のものです。
08/03/10 09:11:13 Dcr87hng
>>106
URLリンク(www.vector.co.jp)
ゲーム用爆発アニメーション作成ツール

108:名前は開発中のものです。
08/05/11 01:59:19 klztBJ6c
>>105

109:名前は開発中のものです。
08/06/04 17:14:17 xVETCOHb
新しいgamdeve かきかき

TopPage - game-develop.com wiki
URLリンク(wiki.game-develop.com)

GameDevWikiを何とかするスレ
スレリンク(gamedev板)

110:名前は開発中のものです。
08/08/15 10:54:51 fu+JQp+m
あげ

111:名前は開発中のものです。
08/08/18 17:57:33 cm8lH5DO
Javaゲーム作成の総合スレみたいなスレが無いのですが、
どなたかたてていただけないでしょうか?

112:名前は開発中のものです。
08/08/18 21:34:26 GqjEpIM5
総合スレ
スレリンク(gamedev板)

113:名前は開発中のものです。
08/08/19 16:56:19 BFNfndoR
前立ったのはすぐ落ちたからな・・・

114:名前は開発中のものです。
08/08/19 19:25:28 WJzGqLN0
この板を「java」で検索したら五つありますね。
アクションを作りたいならこのスレ、他には

「Javaアプレットのゲームの限界は!」
スレリンク(gamedev板)l50

「JAVAアプリでゲーム」
スレリンク(gamedev板)l50

言語としての質問ならプログラム板にたくさんスレがあります。
過去には単発作品スレみたいなとこでボンバーマンやさいたまSTGを
作ってるスレをみた事あります。

それとも、「Javaゲーム総合」みたいなスレがほしいとかでしょうか

いまJavaでがんばってる人いないから期待します。
ここも休眠ぽい。
URLリンク(javagame.skr.jp)

115:名前は開発中のものです。
08/08/20 01:05:24 LURDNrEZ
もう落ちたスレばっかりだけれども過去に語りつくしたというのが正しいかと
基本的に1.4.1の時点でアクセラレーションがきいてきたりしてるし1.5、1.6とあまりパワーアップはしていない

あ、でもJavaSoundは使いやすくなってると思う

凝ったことをしたりアクセラレーションを最大限にしたいのならJOGLを使う

ジョイパッドを使いたいのならJNIは必須になるのがちょっと厄介かな
ほとんどの場合Windowsさえ対応していればいいのだろうけど

116:名前は開発中のものです。
08/08/20 01:13:52 LURDNrEZ
基本的にJava自体の機能・性能向上と1GHzを超えた今のマシンの性能では大概なんでもできるよ
60fpsでアルファブレンディングばりばりでOgg Vorbisでサウンドもならしたりするのもね

ゲーム自体の作成が初めてなのか、Javaでの作法がわからないのかというところだが、
前者なら今はゲーム開発がわかる雑誌がほぼ全滅してるのでちょっとつらいかもしれない

15年前は大量にあったのにねぇ

後者ならば「15歳からはじめる~」というのが一番の解かな

ゲームをとにかくすぐに作りたいのならば「ShinGL3」
そこにある2面まであるサンプルSTGがShinGL3つかってるから機能は分かりやすいはず

117:名前は開発中のものです。
08/09/07 13:54:34 8xBduqc8
そもそもVMが糞だから
Sunの技術者って底辺ドカタみたいなのしか居ないんだろうか

118:名前は開発中のものです。
08/09/08 11:12:42 xrQK/F8B
4年目にしてやっと118レスおめ

119:名前は開発中のものです。
08/09/08 12:43:48 dLS/wPVc
記念パピコ

120:名前は開発中のものです。
08/09/21 18:46:00 OsH1BNzp
Javaでアクションゲームつくっても、コントローラーが使えないから遊べないんだよな・・・・

121:名前は開発中のものです。
08/09/21 21:24:54 r4b2JGP3
JNIで実装汁

122:名前は開発中のものです。
08/09/23 00:03:29 vRkjT2mF
JoyToKeyみたいなのをユーザ側で用意してもらうとか

123:名前は開発中のものです。
08/09/23 00:29:14 tOuH/n2C
jmonkeyengine

124:名前は開発中のものです。
08/10/03 00:20:58 +ke5of9f
javaで画面を揺らすにはどうしたらいい?
ドラクエでダメージうけたときみたいに

125:名前は開発中のものです。
08/10/03 00:53:13 j+bPhG3o
Javaだろうがそうでなかろうが、変わらんと思うけど

126:名前は開発中のものです。
08/10/04 01:25:42 Ai04tfzT
仮にJavaAppletで作っているとしたら、JavaScript側にアクセスして
ウィンドウ全体を揺らすとかいうネタを仕込むのも面白いかもね
雑魚戦じゃなくイベント限定にしないとウザイが

127:名前は開発中のものです。
08/10/04 04:59:23 wlsIJF4e
オート戦闘でメッセージ作成と表示の同期をとるにはどうしたらいい?

128:名前は開発中のものです。
08/10/04 10:19:46 eBSs+DHR
Javaだろうがそうでなかろうが、変わらんと思うけど

129:名前は開発中のものです。
08/10/04 11:01:12 XU1Q4+7D
なんかJavaとまったく関係のない質問ばかりくるのはなんでだろう

130:名前は開発中のものです。
08/10/04 12:32:07 NE5vtfU1
つまりJavaでのゲーム制作も一般的になったと言うことですね、分かります

131:名前は開発中のものです。
08/10/04 12:34:28 eBSs+DHR
確かにそういう面はあるのかもしれないな

132:名前は開発中のものです。
08/10/04 14:12:05 wlsIJF4e
お前らスキルがないなら黙ってろよ

133:名前は開発中のものです。
08/10/04 17:03:04 XU1Q4+7D
質問するスレまちがえてるのになんだこいつは


ああ、釣られてしまったか

134:名前は開発中のものです。
08/10/04 18:12:06 wlsIJF4e
アクションゲームでもこういう要素はあると思うんだけどな
ああ、ここは「初級」者しかいないのか・・・・

135:名前は開発中のものです。
08/10/04 18:53:47 lCxx5DEZ
そりゃ上級者さんたちはこんなところに頼らなくても自力で解決なさいますから・・・

136:名前は開発中のものです。
08/10/05 02:18:13 cgXuY+W+
アクションゲームでもない質問だったのかいw

137:名前は開発中のものです。
08/10/05 02:55:24 cgXuY+W+
まあ、1フレーム中でのエフェクトやメッセージ表示や音再生を保持するクラスを作って、
listに突っ込んでいけばいいんでないかい?
んで、frontから再生していく。

1フレーム区切りだとデータ量が多くなると思うなら、もっと長く区切ってもいいし。
その場合、コードが煩雑になるけどね。

138:名前は開発中のものです。
08/10/05 10:47:17 esDCMgrI
スレ間違えて自分で解決も出来ないくせに初級者しかいないとか
わめきちらすID:wlsIJF4eがいるスレはここですか?

139:名前は開発中のものです。
08/10/05 11:26:48 k/pYUo2C
JMonkeyEngineの解説してください
よろしくお願いいたします
JMonkeyEngineは3Dのエンジンみたいですが、2Dもつくれますよね?
ゲームループとかも管理してくれるみたいだから知りたいです
よろしくお願いいたします


140:名前は開発中のものです。
08/10/05 14:46:42 vHSrsShI
動作上2次元かもしれないけど
内訳では4次元配列くらいが必要では?

141:名前は開発中のものです。
08/10/05 22:48:03 B28yXkKi
アプレットとかJWSとかでJOGLやるやつってdll類はどうしてんの?
全部署名つけてオレオレ証明書でダイアログ出す?
それでユーザに「危ないってダイアログ出すけど信用してOK押して」って言うわけ?

142:名前は開発中のものです。
08/10/05 22:55:31 Za20XjLJ
Sunの署名付きのjar(DLL入り)が配布されてるのでそれを使う

143:名前は開発中のものです。
09/02/21 10:06:43 rhB09fqh

if(isJump == false && jumpKey == ture) { // ジャンプ中でなく、ジャンプキーが押されたら
isJump = true; // ジャンプ中にする
vy = -jumpSpeed; // ジャンプスピード(初速)
}

vy += gravity; // 重力をかける

----------------------------------------

横スクロール(マリオ型)アクションゲームで、上記みたいにジャンプを実装している場合、
「ジャンプキーが押された時間が短い場合は小ジャンプにする」
という風にするには根本的にプログラムを変更しないといけないですか?

144:名前は開発中のものです。
09/02/21 10:44:45 Wn6D0K7q
物理的にはおかしいけど空中でもボタンが押されてたら上向きにちょっと加速度与えればいいだけ
実際マリオはそうだろ

145:143
09/02/23 19:48:11 8ReVmxnp
>>144
マリオはそうなんですか、知りませんでした。
それでやってみます、ありがとうございました。

146:名前は開発中のものです。
09/03/04 20:49:06 BgNcpKU6
>>51
(´・ω・`)ショボーン
URLリンク(imepita.jp)


147:名前は開発中のものです。
09/03/22 07:24:47 O3SVwcBu
JOGLのGLCanvasで自前ループ内display()させてるとどうもちらつく
別スレッドでAnimator使ったりしないとまずいのだろうか
垂直同期との明示化がわからん(環境によって自動的にできたりできなかったり?)


148:名前は開発中のものです。
09/03/22 12:09:18 t26wnkyW
displayってコールバックだから自分で呼ばないほうがええんじゃ

149:名前は開発中のものです。
09/03/23 20:58:13 UqizvfMn
というか、それで例外吐かないんだ。
JOGL使いは占めのころは、OpenGL系のAPIを別スレッドからアクセスしたら
いきなり例外吐いてびっくりしたものだが。

150:名前は開発中のものです。
09/03/23 21:25:56 uzXOwN2A
TextureIOの初期読み取りロジックを別に抜き出した時は別スレッド扱いの例外吐かれて困まった。
一本道のつもりだったのだけどイベントリスナスレッドとかが影響してるのか。


151:名前は開発中のものです。
09/03/23 22:17:05 dbyr6AlE
>>150
自分はTextureIOのnewTextureがコンテクスト依存と思っていなくて
半泣きになったことがある。
enableとかbindをしなければ、別スレッドから呼んでも大丈夫だろうと
思っていたんだよなあ…

結局、テクスチャ登録は絵だけ準備してフラグを立てて、
displayメソッドの中からフラグをチェックしてテクスチャオブジェクトを生成するという
めんどうな動きになった。

152:150
09/03/23 22:38:48 uzXOwN2A
>>151

同じ症状だったと思う。とった解決策も同じだ(w
もうちょい綺麗に書くイデオムみたいのはあるのかな。

153:151
09/03/23 23:00:18 ZB3pm8mv
>>152
仲間がいたようなのでついでに聞いてみる。

テクスチャオブジェクトのガベージコレクションってどうしてる?
ファイナライザにdisableを仕込みたいところだけど、
ファイナライザはGLAutoDrawableとは別スレッドから呼ばれるだろうから、
同じ理由で例外吐いて死にそうな気がする。

自分の場合、これはまだ解決してない。
オブジェクトが破棄されるたびにVRAMにゴミが残るわけで、
どうしたものかと思っているんだが…

やっぱり、ゲームエンジン側で管理すべきなのかな。
テクスチャオブジェクトの管理用コレクションとモデルオブジェクト管理用コレクションを見比べて、
「そのテクスチャを利用しているモデルオブジェクトがもはや存在しない」
となった時点で明示的にdisableをかけて、それからremoveする、と。

154:名前は開発中のものです。
09/03/23 23:22:49 uzXOwN2A
>>153
シーン中にインテリジェントに捨てる事に関してはオブジェクトに関してもテクスチャに関しても考えてないや
シーン中は(理論上)無限にプーリングしてシーン終了時の後始末でシーンコンテキストのテクスチャを全disable & 削除っていう方針
テクスチャ画像の重複登録をしないのは当然として、そこまで多種の画像を読み込む事を想定していないってのが正直な所


155:151
09/03/23 23:27:33 ZB3pm8mv
>>154
なるほど。その辺は割り切っちゃうという手もあるな。
自分のゲームエンジンでもテクスチャは共用されるから、
確かに、さほど厳密に管理しなくともVRAMを圧迫しない気はする。

考えてみれば、256x256x32bitなら、たかだか256KBだからなあ。

156:154
09/04/02 19:49:00 rnxHGA2h
過疎っているなぁ。
基本的な方針は同じだけどdisableに関してはテクスチャを使うときに
enable → bind → 表示 → disableを毎回するように変えた。
やっぱりカレントスレッド問題が色々と面倒くさいので。

157:名前は開発中のものです。
09/04/09 01:21:53 QVY5xGft
>>156
総合スレとの区別があいまいだしねえ…

ちなみに、enableしてないテクスチャオブジェクトをdisableすると例外吐くんだっけ?
これを受け付けてくれるなら、いきなりdisableしてもいいような気がする。

逆に、enableを多重にやると、VRAMに同じテクスチャイメージが多重登録されたりしそうで心配だが、
取り越し苦労だろうか。

158:名前は開発中のものです。
09/04/14 17:40:52 Wx3DB5EW
>>144
すげえあたまいい・・・と感動してしまった

159:名前は開発中のものです。
09/05/14 21:04:29 jnlC9FY/
>>146
     オハヨー!!
    ∧∧ ∩
    (`・ω・)/
   ⊂  ノ
    (つノ
     (ノ
 ___/(___
/  (___/
 ̄ ̄ ̄ ̄ ̄ ̄


160:名前は開発中のものです。
09/11/04 00:17:42 mdwZ7HUY
アニメーションの表示ってどうやってます?
俺はコンピュータ内蔵の時計呼び出してその値からやってるんだけど、
そうするとポーズ画面のあと再開したときにアニメーションがずれちゃうんだよ
どうしたらいいかな

161:名前は開発中のものです。
09/11/04 10:26:18 MgRdkNpl
経過時間を算出するようにして
ポーズ中は経過時間が増えないようにするとか

162:名前は開発中のものです。
09/11/04 21:22:33 OEwandvL
ゲームのはなしじゃないの?
フレーム単位で処理するからずれるとかはないとおもうけど

可変フレームのはなし?

163:名前は開発中のものです。
09/11/04 21:46:58 wmTV4PxT
可変フレームでもアニメのコマnからn+1へ描画させるタイミングをフレームを考慮した時間後に書き換えるからずれはしない。
何か忘れてる。

164:名前は開発中のものです。
10/03/02 23:08:25 Ex3WWwU3
test

165:名前は開発中のものです。
10/05/07 20:42:20 WillkCAw
javaはpng画像の表示は重いですか?
マリオ風をつくってるんですがgifで表示させてた時よりカクカクします。
フルカラー+透過を実現したくてpngにしたんですが…。

166:名前は開発中のものです。
10/05/07 21:15:05 j/r3kS3U
ソフトウェア描画だからな
それでなくても透過合成は重い部類だし

167:名前は開発中のものです。
10/05/07 23:37:10 KEJO6T7M
αブレンディング使ってるならハードウェアアクセラレーションがきいていても使っていないときよりは速度は落ちる
スペックにもよるが32*32のスプライト10万個くらいだすと60fps維持できないと思う

168:名前は開発中のものです。
10/05/08 20:58:02 2Mve6/zz
アルファチャンネルじゃなくて、普通の透過なんですけどね…。
別の方法試してみようと思います。ありがとうございました。

169:名前は開発中のものです。
10/05/08 22:13:03 +nu9nO6K
ならコードが悪いだけだな

170:168
10/05/09 01:02:49 f5Ph/Aqm
>>169
drawImageでダブルバッファリングしながら表示させてます。
1000*1000くらいの大きな画像に24*24くらいのマップチップやキャラチップを並べて、
drawImage(img, x1, y1, x2, y2, imgX1, imgY1, imgX2, imgY2, observer);
でimgX1~imgY2を指定してチップを表示してるんですが、もしかして各チップを
一つずつのファイルに分けた方が高速ですかね?それともdrawImage使うのがそもそもダメですか?;;

171:名前は開発中のものです。
10/05/09 10:10:47 Pu1jTf/z
転送元と転送先のImageはなに?
あとJavaはJavaSE6update10以上つかってる?

172:168
10/05/09 16:51:18 f5Ph/Aqm
転送元と転送先のImageというのは、描画する画像の型と描画先の画像の型という意味でいいですか?
一応Image型をBufferedImage型に描画してます。
転送元がImage型だからカクカクするのかなと思ってBufferedImage型→BufferedImage型も試してみましたが
あまり改善されませんでした。
JavaバージョンはJavaSE6update18です。

173:名前は開発中のものです。
10/05/09 21:02:07 Pu1jTf/z
転送元がImageということはどういうフォーマットになっているかわからないってことかな。

描画バッファから画面への転送の方法とかどうしているかも気になる。

あとはピクセルフォーマットを同設定しているかか。

転送もとのフォーマット
描画バッファのフォーマット
画面のフォーマット

これらをどう設定しているかにもよる。

あとImageの分割もやってみた?32bppだと1000*1000で4MBも食うわけで。

174:名前は開発中のものです。
10/05/09 21:14:11 o2jE/Yfm
もうハードウェアアクセラレーションが効く環境に変えちゃえばいいのに
アホみたいに速いよw

175:名前は開発中のものです。
10/05/09 22:56:26 eCAtLDK5
>>168
カラーが24bitなら透過は8bitになってると思うよ
そして全ての透過値が0xffか0x00しかなくても、8bitのアルファチャネルがあるのと同様のロジックが走る
アクセラレーションが効いてなければ結構描画効率は落ちる

マリオみたいなゲームなら1チップに255色以上使う必要性も少ないだろうし、
リソース合成時かゲーム起動時に減色して透過インデックスを指定するようにしたらどうかな

176:168
10/05/10 01:29:54 CH9wxDuw
皆さんありがとうございます。
URLリンク(javagame.skr.jp)
に書いてある、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に戻すことにします。

177:名前は開発中のものです。
10/05/10 22:09:49 rdBA97qw
画像のロードは遅延読み込みやりたいわけじゃないならImageIOつかうとよいよ。転送待ちをする必要ないし。

あとABGRとかARGBとか順番によって大きく速度が変わるからピクセルフォーマットは意識したほうがよい。

転送先はVRAM、もしくはコンパチブルピクセルフォーマットのほうがいいよ。
そして転送元もあわせたほうがよい場合が多い。

あとは特定色の透過をしたい場合TransparencyがBITMASKになってると大概早いはず。

178:名前は開発中のものです。
10/05/11 10:35:00 RB0dCl6F
初級って書いてあるから開いてみたけど
話が難しすぎてさっぱりわからないwww
ダメだ俺orz


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch