2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

Javaで作るスタンドアローンゲーム

1 :名前は開発中のものです。:2012/12/27(木) 16:04:18.62 ID:rl+qGRHn.net
スレタイはアプレットとの対比的な意味と考えてください。
Javaでのゲーム開発は賛否ありますが、国外では割と盛んになってきているように思います。
裏を返せば日本語だけでは情報が得辛い状況であり、寂しく開発してる人が多いのでは・・・。

関連スレ
JAVAアプリでゲーム
http://toro.2ch.net/test/read.cgi/gamedev/1033926010/


参考になりそうなサイト
・どのイメージタイプを使うべき?
http://weblogs.java.net/blog/chet/archive/2004/08/toolkitbuffered.html
・弱点と言われる?ベクタグラフィックス関連の改善
http://docs.oracle.com/javase/1.5.0/docs/guide/2d/flags.html
・大量のソースコードを公開して下さっている国内サイト
http://aidiary.hatenablog.com/entry/20040918/1251373370
・Java 2D games tutorial
http://zetcode.com/tutorials/javagamestutorial/
・出入りが最も盛んな?フォーラム
http://www.java-gaming.org/index.php
・スプライトシートの切り方等(国内)
http://sky.geocities.jp/kmaedam/java2/java2.htm

動画
3D Game Programming tutorial
http://www.youtube.com/watch?v=iH1xpfOBN6M

321 :名前は開発中のものです。:2014/04/28(月) 02:09:11.47 ID:EfnjKw0Y.net
paintイベントが発生したComponentを知る仕組みがイベントハンドルとして用意されてないから、
設計が素直にできないって話だよ。

swtにはあるし、他の有名なgui絡んだ言語じゃ当たり前にハンドルできるだろ。
何故ここを棄てたのか理解に苦しむ。

java.awt.ComponentでaddPaintListener()が出来て、普通にPaintEvent.getSource()できればスマートだろう。
ここを開放してないから、paintを弄り倒したいアプリだと、
paintのタイミングとは別の入り口でComponentを保持する必要が出てくる。
この制約のせいで、クラス設計がキモくなる。

それを無くす為に導入されたのがJLayerのつもりかもしれないが、余計にコードが汚くなるわ。
って話です。

322 :名前は開発中のものです。:2014/04/28(月) 17:41:47.77 ID:NW1ufA+w.net
アプリにもよるけど、俺はコンポーネントをシングルトンにしてる
もしくはシングルトンクラスに相互参照するようなコンポーネントを全部いれてる

class UI {
private UI(){}
public static final object = new UI();

public MyWindow window = new MyWindow();
public MyCanvas canvas = new MyCanvas();
public MyTextPane text = new MyTextPane();
...
}

323 :名前は開発中のものです。:2014/04/28(月) 19:41:32.23 ID:40qY12US.net
話の流れが良く判らんが、final付けとかないとダメだろ。参照を上書きされるぞ。

public "final" MyWindow window = new MyWindow();

324 :名前は開発中のものです。:2014/04/30(水) 10:24:37.40 ID:2hopiA0K.net
final忘れてた。でも一人でやってるなら体裁はどうでもいのだよ
セッター・ゲッターとかね

主題は相互参照。それで俺は例を出したのだけど
オブジェクトの初期化・コンストラクタで循環しないように気をつけてな

325 :名前は開発中のものです。:2014/05/01(木) 12:27:59.01 ID:OWwKad9r.net
たったこれだけの話なのに、>>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) [
    // ゲームの描画
  }
}

326 :名前は開発中のものです。:2014/05/01(木) 14:07:36.24 ID:0k+QrX5J.net
>>325
たったそれだけの単純な例ならPaintListenerだっていらないだろw

JSplitPane, JTabPane, JScrollPaneとかで何層にも囲まれている場合、
上に挙げた様なやりかたでごり押しするのがやりやすいというのが俺の経験則

327 :名前は開発中のものです。:2014/05/01(木) 14:16:05.67 ID:0k+QrX5J.net
でも>>319の変な独り言ぶつぶつをよくみたら
そもそもComponent間の絡みという話ではないようだな

328 :名前は開発中のものです。:2014/05/01(木) 14:31:37.25 ID:OWwKad9r.net
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();
    // ゲームの描画
  }
}

329 :名前は開発中のものです。:2014/05/01(木) 14:51:19.89 ID:OWwKad9r.net
>>326
> JSplitPane, JTabPane, JScrollPaneとかで何層にも囲まれている場合、
> 上に挙げた様なやりかたでごり押しするのがやりやすいというのが俺の経験則

一つのゲーム画面の中で利用される様々なUIにSwingを利用してる人?
それともゲームのメイン画面を表示するframeとは別に、メッセージウィンドウを別のframeに表示するような内容のもの?

こっちはUI自前で描画するので何言ってるのか良く判らんわ。

330 :名前は開発中のものです。:2014/05/01(木) 15:39:15.05 ID:0k+QrX5J.net
質問者が何をしたいのかさっぱりわからん
paint(Graphics g)のオーバーライドをしたくないだけか?

じゃあPaintListenerに代替する委譲を組み込んだ
abstract class GameWindow extends Frame でもあらかじめ定義すれば
いいだけの話だろう。コンポーネントはひとつなんだろうし。

>UI自前で描画するので
OpenGLを使ってるわけでもなさそうだし
マップとかパラメータのエディタの話だと思った
OpenGL Canvasを囲ってるswing UIとかとの連携とか面倒なとこなんで

総レス数 484
173 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★