【JAVA】2Dアクションゲームを作る【初級】
■ このスレッドは過去ログ倉庫に格納されています
0001ヤンス
04/09/08 09:17ID:Qk2n0ep6二ヶ月くらい前から勉強を始めて最近やっと、ショボイながらも記念すべき
人生初の自作ゲームを作って今、第二作目を作っている所なのですが、やり方の
分からない処理が多すぎて困っております。
勿論ネットや本等で調べまわった上でスレを立てました、何でこんな処理が
分からないんだよと思われるでしょうけれど指導の方お願いします。
上級者の方達と質問のやり取りをしたいのです。
当面の目標は倉庫番、ロードランナー、ドンキーコング等の1画面固定タイプの
やつを作ろうと思います、とりあえず現段階で二次元配列を使っての
マップと自機の表示まで出来てます、二次元配列を使って表示した
マップの壁などに、どうやって当たり判定を付けるかで躓いてます
当たり判定の付け方の考え方など教えて貰えたら、ありがたいです。
ちょっと爪垢が溜まってきたので、また後ほど書きたいと思います。
0175名前は開発中のものです。
2010/05/09(日) 22:56:26ID:eCAtLDK5カラーが24bitなら透過は8bitになってると思うよ
そして全ての透過値が0xffか0x00しかなくても、8bitのアルファチャネルがあるのと同様のロジックが走る
アクセラレーションが効いてなければ結構描画効率は落ちる
マリオみたいなゲームなら1チップに255色以上使う必要性も少ないだろうし、
リソース合成時かゲーム起動時に減色して透過インデックスを指定するようにしたらどうかな
0176168
2010/05/10(月) 01:29:54ID:CH9wxDuwhttp://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に戻すことにします。
0177名前は開発中のものです。
2010/05/10(月) 22:09:49ID:rdBA97qwあとABGRとかARGBとか順番によって大きく速度が変わるからピクセルフォーマットは意識したほうがよい。
転送先はVRAM、もしくはコンパチブルピクセルフォーマットのほうがいいよ。
そして転送元もあわせたほうがよい場合が多い。
あとは特定色の透過をしたい場合TransparencyがBITMASKになってると大概早いはず。
0178名前は開発中のものです。
2010/05/11(火) 10:35:00ID:RB0dCl6F話が難しすぎてさっぱりわからないwww
ダメだ俺orz
0179アジェグ4倍 ◆4xAJeG.COM
2010/12/27(月) 17:55:37ID:tvzx1nclいまどきはこれが必須と言われている。
0180名前は開発中のものです。
2011/08/09(火) 10:57:03.78ID:B85eOPiCあらかじめ画像を1度ずつ回転させたImageオブジェクトの配列を作成するにはどうしたらいいですか?
今のところGraphics2Dのrotate()で描画先のGraphicsを回転させているのですが、無駄が多いような気がしまして・・・
0181名前は開発中のものです。
2012/03/05(月) 23:18:01.39ID:S6tKV2yC回転済みのBufferedImageの用意すると
描写時にグラフィックメモリが大量に必要になるから
回転済みの用意しない方がいいと思うよ
1回描写すればキャッシュで速くなるし
回転もグラボ使うから遅くならない
0182名前は開発中のものです。
2012/03/05(月) 23:22:53.23ID:S6tKV2yCダブルバッファだったら
Swingが自動的にやってくれているから
意識しなくていいと思う
0183名前は開発中のものです。
2012/05/11(金) 14:13:36.56ID:K3ACPeVc固定少数で14として扱う方法は知っていますが
ビットシフトでやる場合どうやってやるのか知りたいです
1.4<<7 で 179.2だから 179として扱えばどうかと思っているところです
精度的に3桁あっても厳しいでしょうか?
0184名前は開発中のものです。
2012/05/11(金) 23:32:16.98ID:dAZRIFlQでこの場合10倍してるど、ビットシフトなら2の乗数倍するだけだから考え方は同じだね。
精度的な話は自分がほしい精度なんで厳しいかどうかの基準がわからん。
0185名前は開発中のものです。
2012/05/13(日) 11:09:53.39ID:52g24kKaそれなら1.4はだいたい91750だからこの数値で扱えばいいんだろうか
面倒だから10倍でやるほうがよさそうですね
0186名前は開発中ものです。
2012/05/13(日) 22:10:38.79ID:nrwURmq80187名前は開発中のものです。
2012/05/14(月) 17:57:49.15ID:v4rkIglGpublic 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);
}
}
0188187
2012/05/14(月) 18:00:07.71ID:v4rkIglGsetResizable のオンオフでウィンドウの大きさが
変わってしまうのですがどういう理由だと思いますか
動作はこれでいいのでしょうか
0189名前は開発中のものです。
2012/05/18(金) 05:00:51.09ID:Zf//QytWサイズ変更の可能/不可にかかわらずウィンドウの内側のサイズは一定+サイズ変更禁止用の細いウィンドウ枠
の全体としては小さくなったんだと思うよ
サイズ変わるの嫌ならsetSizeで解決すると思う
0190名前は開発中のものです。
2012/05/18(金) 17:05:18.99ID:1wIe6pNopublic 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]
0191名前は開発中のものです。
2012/12/12(水) 15:41:49.52ID:5f65KrKy■ このスレッドは過去ログ倉庫に格納されています