[過去ログ]
Javaで作るスタンドアローンゲーム (484レス)
Javaで作るスタンドアローンゲーム http://mevius.5ch.net/test/read.cgi/gamedev/1356591858/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
325: 名前は開発中のものです。 [sage] 2014/05/01(木) 12:27:59.01 ID:OWwKad9r たったこれだけの話なのに、>>322はどんな作り方すりゃそうなるんだ。 public class App extends Frame { public static void main(String[] args) { final App app = new App(); //(ry app.setVisible(true); } private final Game game; public App() { game = new Game(this); } public void paint(Graphics g) { game.paint(g); } } class Game { private final Component comp; public Game(Component comp) { this.comp = comp; comp.addKeyListener(this); comp.addComponentListener(this); //comp.addPaintListener(this); ←これがありゃ楽だろ糞がって話。 } public void paint(Graphics g) [ // ゲームの描画 } } http://mevius.5ch.net/test/read.cgi/gamedev/1356591858/325
328: 名前は開発中のものです。 [sage] 2014/05/01(木) 14:31:37.25 ID:OWwKad9r PaintListenerが存在すれば、Game側は相手が誰とか知る必要なく楽に書ける。 public class App extends Frame { public static void main(String[] args) { final App app = new App(); //(ry final Game game = new Game(); app.addKeyListener(game); app.addPaintListener(game); app.setVisible(true); } } class Game implements PaintListener { public Game() {} public void keyPress(KeyEvent e) { final Component comp = e.getSource(); final int w = comp.getWidth(); // ゲームの更新 } public void paint(PaintEvent e) { final Component comp = e.getSource(); final Graphic g = e.getGraphics(); final int w = comp.getWidth(); // ゲームの描画 } } http://mevius.5ch.net/test/read.cgi/gamedev/1356591858/328
329: 名前は開発中のものです。 [sage] 2014/05/01(木) 14:51:19.89 ID:OWwKad9r >>326 > JSplitPane, JTabPane, JScrollPaneとかで何層にも囲まれている場合、 > 上に挙げた様なやりかたでごり押しするのがやりやすいというのが俺の経験則 一つのゲーム画面の中で利用される様々なUIにSwingを利用してる人? それともゲームのメイン画面を表示するframeとは別に、メッセージウィンドウを別のframeに表示するような内容のもの? こっちはUI自前で描画するので何言ってるのか良く判らんわ。 http://mevius.5ch.net/test/read.cgi/gamedev/1356591858/329
331: 名前は開発中のものです。 [sage] 2014/05/01(木) 17:08:16.54 ID:OWwKad9r ここは質問スレじゃねーよ。 > abstract class GameWindow extends Frame でもあらかじめ定義すれば > いいだけの話だろう。コンポーネントはひとつなんだろうし。 たかがComponentのKey, Mouse, +αのイベントをトリガーとして、 そのComponentのGraphicsに対して描画するだけのプログラムなのに、 何で態々GameWindow なんて作らないといけないのか判らん。 public class App { public static void main(String[] args) { } http://mevius.5ch.net/test/read.cgi/gamedev/1356591858/331
333: 名前は開発中のものです。 [sage] 2014/05/01(木) 17:11:48.98 ID:OWwKad9r ミスった。 public class App { public static void main(String[] args) { final Frame frame = new Frame(); final Game game = new Game(); // frame .addKeyListener(game); // この三行だけで済む←(1) frame .addPaintListener(game); // frame.setVisible(true); } } これで済む話だから愚痴ってんだろ。 それからゲーム自体が所詮はイベントをハンドリングし、ハンドリング対象に描画するだけのプログラムなのだから、 Frameの中のPanelの中の適当なComponentに対して、素直に(1)だけすりゃサクッと動く訳なんだから。 それを自前のComponentクラスを作って使うとか、設計的に糞だな〜。とぼやいただけ。 http://mevius.5ch.net/test/read.cgi/gamedev/1356591858/333
335: 名前は開発中のものです。 [sage] 2014/05/01(木) 17:22:44.30 ID:OWwKad9r だから、java.awt.ComponentにPaintListenerがあれば綺麗になるって話。 ついでにComponentにgetInsets()も追加しとけと。 上のContainerクラスにはあるし、JComponentはそれ継承してるから当然ある訳だが、 Component継承した自前クラスでInsetsの概念使って描画させた場合、 Componentクラスを引数にとって、Insetsの概念使ったメソッドでも用意しようとしたら、 void func(Component comp) { if (comp instanceof Container) { insets = ((Container)comp).getInsets(); } else if (comp instanceof MyInsetsComponent) { insets = ((MyInsetsComponent)comp).getInsets(); } else { insets = new Insets(0, 0, 0, 0); } } みたいな形にしなくちゃならない。 どう考えても糞だろ。 >>334 それはタイマーなりゲームループなりが、 osに再描画要求するなり、そのコンポーネント再描画を実行するなりして、 結果、ゲーム側は描画イベントをハンドリングしてんだから、そこで処理すりゃ済む話だろ。 GUIのイベントドリブンってのは、そこを共通化できるからいいんだろん。 コンソールベースの古典ゲームだろうと、アニメーションしまくりのゲームだろうとな。 pure java 100%での話だよ。 http://mevius.5ch.net/test/read.cgi/gamedev/1356591858/335
336: 名前は開発中のものです。 [sage] 2014/05/01(木) 17:24:12.49 ID:OWwKad9r つまり、>>333の実装方法でも別にアニメーションするゲームでも問題なく実装できる。 http://mevius.5ch.net/test/read.cgi/gamedev/1356591858/336
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.022s