1 名前:ヤンス mailto:sage [04/09/08 09:17 ID:Qk2n0ep6] JAVAアプレットでファミコンのゲームにありそうな2Dアクション物を作ろうと思い 二ヶ月くらい前から勉強を始めて最近やっと、ショボイながらも記念すべき 人生初の自作ゲームを作って今、第二作目を作っている所なのですが、やり方の 分からない処理が多すぎて困っております。 勿論ネットや本等で調べまわった上でスレを立てました、何でこんな処理が 分からないんだよと思われるでしょうけれど指導の方お願いします。 上級者の方達と質問のやり取りをしたいのです。 当面の目標は倉庫番、ロードランナー、ドンキーコング等の1画面固定タイプの やつを作ろうと思います、とりあえず現段階で二次元配列を使っての マップと自機の表示まで出来てます、二次元配列を使って表示した マップの壁などに、どうやって当たり判定を付けるかで躓いてます 当たり判定の付け方の考え方など教えて貰えたら、ありがたいです。 ちょっと爪垢が溜まってきたので、また後ほど書きたいと思います。
151 名前:名前は開発中のものです。 mailto:sage [2009/03/23(月) 22:17:05 ID:dbyr6AlE] >>150 自分はTextureIOのnewTextureがコンテクスト依存と思っていなくて 半泣きになったことがある。 enableとかbindをしなければ、別スレッドから呼んでも大丈夫だろうと 思っていたんだよなあ… 結局、テクスチャ登録は絵だけ準備してフラグを立てて、 displayメソッドの中からフラグをチェックしてテクスチャオブジェクトを生成するという めんどうな動きになった。
152 名前:150 mailto:sage [2009/03/23(月) 22:38:48 ID:uzXOwN2A] >>151 同じ症状だったと思う。とった解決策も同じだ(w もうちょい綺麗に書くイデオムみたいのはあるのかな。
153 名前:151 mailto:sage [2009/03/23(月) 23:00:18 ID:ZB3pm8mv] >>152 仲間がいたようなのでついでに聞いてみる。 テクスチャオブジェクトのガベージコレクションってどうしてる? ファイナライザにdisableを仕込みたいところだけど、 ファイナライザはGLAutoDrawableとは別スレッドから呼ばれるだろうから、 同じ理由で例外吐いて死にそうな気がする。 自分の場合、これはまだ解決してない。 オブジェクトが破棄されるたびにVRAMにゴミが残るわけで、 どうしたものかと思っているんだが… やっぱり、ゲームエンジン側で管理すべきなのかな。 テクスチャオブジェクトの管理用コレクションとモデルオブジェクト管理用コレクションを見比べて、 「そのテクスチャを利用しているモデルオブジェクトがもはや存在しない」 となった時点で明示的にdisableをかけて、それからremoveする、と。
154 名前:名前は開発中のものです。 mailto:sage [2009/03/23(月) 23:22:49 ID:uzXOwN2A] >>153 シーン中にインテリジェントに捨てる事に関してはオブジェクトに関してもテクスチャに関しても考えてないや シーン中は(理論上)無限にプーリングしてシーン終了時の後始末でシーンコンテキストのテクスチャを全disable & 削除っていう方針 テクスチャ画像の重複登録をしないのは当然として、そこまで多種の画像を読み込む事を想定していないってのが正直な所
155 名前:151 mailto:sage [2009/03/23(月) 23:27:33 ID:ZB3pm8mv] >>154 なるほど。その辺は割り切っちゃうという手もあるな。 自分のゲームエンジンでもテクスチャは共用されるから、 確かに、さほど厳密に管理しなくともVRAMを圧迫しない気はする。 考えてみれば、256x256x32bitなら、たかだか256KBだからなあ。
156 名前:154 mailto:sage [2009/04/02(木) 19:49:00 ID:rnxHGA2h] 過疎っているなぁ。 基本的な方針は同じだけどdisableに関してはテクスチャを使うときに enable → bind → 表示 → disableを毎回するように変えた。 やっぱりカレントスレッド問題が色々と面倒くさいので。
157 名前:名前は開発中のものです。 mailto:sage [2009/04/09(木) 01:21:53 ID:QVY5xGft] >>156 総合スレとの区別があいまいだしねえ… ちなみに、enableしてないテクスチャオブジェクトをdisableすると例外吐くんだっけ? これを受け付けてくれるなら、いきなりdisableしてもいいような気がする。 逆に、enableを多重にやると、VRAMに同じテクスチャイメージが多重登録されたりしそうで心配だが、 取り越し苦労だろうか。
158 名前:名前は開発中のものです。 mailto:sage [2009/04/14(火) 17:40:52 ID:Wx3DB5EW] >>144 すげえあたまいい・・・と感動してしまった
159 名前:名前は開発中のものです。 [2009/05/14(木) 21:04:29 ID:jnlC9FY/] >>146 オハヨー!! ∧∧ ∩ (`・ω・)/ ⊂ ノ (つノ (ノ ___/(___ / (___/  ̄ ̄ ̄ ̄ ̄ ̄
160 名前:名前は開発中のものです。 [2009/11/04(水) 00:17:42 ID:mdwZ7HUY] アニメーションの表示ってどうやってます? 俺はコンピュータ内蔵の時計呼び出してその値からやってるんだけど、 そうするとポーズ画面のあと再開したときにアニメーションがずれちゃうんだよ どうしたらいいかな
161 名前:名前は開発中のものです。 mailto:sage [2009/11/04(水) 10:26:18 ID:MgRdkNpl] 経過時間を算出するようにして ポーズ中は経過時間が増えないようにするとか
162 名前:名前は開発中のものです。 mailto:sage [2009/11/04(水) 21:22:33 ID:OEwandvL] ゲームのはなしじゃないの? フレーム単位で処理するからずれるとかはないとおもうけど 可変フレームのはなし?
163 名前:名前は開発中のものです。 mailto:sage [2009/11/04(水) 21:46:58 ID:wmTV4PxT] 可変フレームでもアニメのコマnからn+1へ描画させるタイミングをフレームを考慮した時間後に書き換えるからずれはしない。 何か忘れてる。
164 名前:名前は開発中のものです。 mailto:sage [2010/03/02(火) 23:08:25 ID:Ex3WWwU3] test
165 名前:名前は開発中のものです。 mailto:sage [2010/05/07(金) 20:42:20 ID:WillkCAw] javaはpng画像の表示は重いですか? マリオ風をつくってるんですがgifで表示させてた時よりカクカクします。 フルカラー+透過を実現したくてpngにしたんですが…。
166 名前:名前は開発中のものです。 mailto:sage [2010/05/07(金) 21:15:05 ID:j/r3kS3U] ソフトウェア描画だからな それでなくても透過合成は重い部類だし
167 名前:名前は開発中のものです。 mailto:sage [2010/05/07(金) 23:37:10 ID:KEJO6T7M] αブレンディング使ってるならハードウェアアクセラレーションがきいていても使っていないときよりは速度は落ちる スペックにもよるが32*32のスプライト10万個くらいだすと60fps維持できないと思う
168 名前:名前は開発中のものです。 mailto:sage [2010/05/08(土) 20:58:02 ID:2Mve6/zz] アルファチャンネルじゃなくて、普通の透過なんですけどね…。 別の方法試してみようと思います。ありがとうございました。
169 名前:名前は開発中のものです。 mailto:sage [2010/05/08(土) 22:13:03 ID:+nu9nO6K] ならコードが悪いだけだな
170 名前:168 mailto:sage [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使うのがそもそもダメですか?;;
171 名前:名前は開発中のものです。 mailto:sage [2010/05/09(日) 10:10:47 ID:Pu1jTf/z] 転送元と転送先のImageはなに? あとJavaはJavaSE6update10以上つかってる?
172 名前:168 mailto:sage [2010/05/09(日) 16:51:18 ID:f5Ph/Aqm] 転送元と転送先のImageというのは、描画する画像の型と描画先の画像の型という意味でいいですか? 一応Image型をBufferedImage型に描画してます。 転送元がImage型だからカクカクするのかなと思ってBufferedImage型→BufferedImage型も試してみましたが あまり改善されませんでした。 JavaバージョンはJavaSE6update18です。
173 名前:名前は開発中のものです。 mailto:sage [2010/05/09(日) 21:02:07 ID:Pu1jTf/z] 転送元がImageということはどういうフォーマットになっているかわからないってことかな。 描画バッファから画面への転送の方法とかどうしているかも気になる。 あとはピクセルフォーマットを同設定しているかか。 転送もとのフォーマット 描画バッファのフォーマット 画面のフォーマット これらをどう設定しているかにもよる。 あとImageの分割もやってみた?32bppだと1000*1000で4MBも食うわけで。
174 名前:名前は開発中のものです。 mailto:sage [2010/05/09(日) 21:14:11 ID:o2jE/Yfm] もうハードウェアアクセラレーションが効く環境に変えちゃえばいいのに アホみたいに速いよw
175 名前:名前は開発中のものです。 mailto:sage [2010/05/09(日) 22:56:26 ID:eCAtLDK5] >>168 カラーが24bitなら透過は8bitになってると思うよ そして全ての透過値が0xffか0x00しかなくても、8bitのアルファチャネルがあるのと同様のロジックが走る アクセラレーションが効いてなければ結構描画効率は落ちる マリオみたいなゲームなら1チップに255色以上使う必要性も少ないだろうし、 リソース合成時かゲーム起動時に減色して透過インデックスを指定するようにしたらどうかな
176 名前:168 mailto:sage [2010/05/10(月) 01:29:54 ID:CH9wxDuw] 皆さんありがとうございます。 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に戻すことにします。
177 名前:名前は開発中のものです。 mailto:sage [2010/05/10(月) 22:09:49 ID:rdBA97qw] 画像のロードは遅延読み込みやりたいわけじゃないならImageIOつかうとよいよ。転送待ちをする必要ないし。 あとABGRとかARGBとか順番によって大きく速度が変わるからピクセルフォーマットは意識したほうがよい。 転送先はVRAM、もしくはコンパチブルピクセルフォーマットのほうがいいよ。 そして転送元もあわせたほうがよい場合が多い。 あとは特定色の透過をしたい場合TransparencyがBITMASKになってると大概早いはず。
178 名前:名前は開発中のものです。 [2010/05/11(火) 10:35:00 ID:RB0dCl6F] 初級って書いてあるから開いてみたけど 話が難しすぎてさっぱりわからないwww ダメだ俺orz