Java8 FXでゲームプログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
march3

Java8 FXでゲームプログラム

#1

投稿記事 by march3 » 9年前

昔、C言語(Wind32 API)で作ったゲームプログラムがあり、
これを最近Javaでリメイクしたいと考えております。

Javaについての基本知識は持っているつもりですが、
数年前(Java1.6時代)の知識のため、GUI周りに関してはAWT,Swingに関する知識しかなく
最近のJavaFXについては初心者という状況です。

この際、どうせ作りなおすならFXを勉強して作り直そうと考えているのですが、
軽くネット検索した所、FXはボタンやテキストエリアなどのコンポーネントのデザインを意識して開発するアプリには向いていそうでしたが
ゲームのようなリアルタイムに全画面の再描画処理が必要になる、非イベントドリブンなアプリ開発に向いているのか?と疑問を持ちました。

もちろんFXでもできないことはないとは思うのですが、FXで向いているのか?というところが疑問で
そのあたりのご意見をいただけると幸いです。

ソフト屋(外出中)

Re: Java8 FXでゲームプログラム

#2

投稿記事 by ソフト屋(外出中) » 9年前

libgdxってのがあります。現化的だと思いますがいかがでしょう

march3

Re: Java8 FXでゲームプログラム

#3

投稿記事 by march3 » 9年前

ソフト屋(外出中) さんが書きました:libgdxってのがあります。現化的だと思いますがいかがでしょう
初耳でした。そんなライブラリあるんですね。
たしかにゲームを実装するならこれを使ったほうが便利だと思います。

これはこれとして、求めていた解の一つですが、結局JavaFXが向いているかどうかが謎なままです。

派生した別質問になってしまいますが、
「JavaFXを使うべきところの見分け方」という観点の意見をいただけるとベストかな、と思います。

要するに「何かを作りたい」と思ったときに「この場合はJavaFXで開発したら便利だよね」という
JavaFXを選択するか否か、の思考材料を得られたら、
より大きな視野でプログラム開発の選択肢を持てると思うのです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: Java8 FXでゲームプログラム

#4

投稿記事 by softya(ソフト屋) » 9年前

> これはこれとして、求めていた解の一つですが、結局JavaFXが向いているかどうかが謎なままです。

JavaFXですか?
使ったことが無いですし、JavaFX8の最新情報を追いかけてもいないですが、Win32 API、AWT、Swingがゲームに向かない程度には向かないと思います。
やることを限定すれば作れないわけではないですがWin32 API、AWT、Swing共々GUI向けのフレームワークなのでOpenGLやDirectXを使うものに比べたらできる事が限定されます。
libGdxやLWJGL+Slick2D などOpenGLを利用するライブラリで作れる物とは速度や表現で差が出ると言うことです。
※ LWJGL+Slick2D これもゲーム用のライブラリです。


>要するに「何かを作りたい」と思ったときに「この場合はJavaFXで開発したら便利だよね」という
>JavaFXを選択するか否か、の思考材料を得られたら、
>より大きな視野でプログラム開発の選択肢を持てると思うのです。

それは自分で情報を収集された方が良いかと思います。
より大きな視野を持つ方法はご自身が情報を広くどれだけ持てるかだと思います。
私など特定の個人の情報だけで判断されるのは広い視野とは言えないです。
私が情報を拾えている部分で、march3 さんが情報を拾えてない理由は何だと思われますか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe()

Re: Java8 FXでゲームプログラム

#5

投稿記事 by ISLe() » 9年前

わたしがよく作るのはアーケードゲームふうのゲームですが、Win32 APIもSwing(AWT含む)も、基本的なイメージの矩形転送はあるし、ピクセルレベルでのアクセスも可能なので、ふつうに作る分には何の問題もないと思います。
Win32 APIではクライアント領域のみを使う、Swing(AWT)ではJPanel(Panel)のみを使う、といった形においてです。

わたしはAWTでプロトタイプを作ることが少なくないです。
過去にケータイ向けに作ったゲームのいくつかは、いまでもデスクトップで動きます。
さらにそのケータイ向けに作ったゲームのいくつかは別のプラットフォーム向けにC言語で作ったものが元にあります。
それら元になったもののプロトタイプも、いまもデスクトップで動きます。


使ったことがなくちょっと調べただけですが、Java FXでは自発的に画面更新を発生させることが難しかったようです。
最新のJava FX 8ではSwingコンポーネントをJava FXアプリに組み込むことが可能になって、非同期な再描画処理も可能になっているのではないかと思います【未確認】。

とは言え、一面全部ゲーム画面というゲームならば、描画部分に関してはAWTでもSwingでもJava FXでも同じになると思います。

VBやC#でアプリを作るときに、デザイナは便利ですが、アーケードゲームふうのゲームを作るときにはほぼ使いません。
Java FXを使う便利さというのは、そういうのと同様ではないでしょうかね。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: Java8 FXでゲームプログラム

#6

投稿記事 by softya(ソフト屋) » 9年前

ISLe()さんの言われるとおりWin32 APIと同等のものであればJava FX 8でも問題無いと思います。
ただ、あくまでリッチ・クラアイアントGUIのためのライブラリなのでゲームに特化した機能は無いと言うことですね。
加算半透明とかのゲーム表現を望まなければ大丈夫かなと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe()

Re: Java8 FXでゲームプログラム

#7

投稿記事 by ISLe() » 9年前

もうずっと以前からイメージの半透明合成やら行列変換はサポートされています。
サポートされた当初は激遅でしたが、いまはばっちりDirect3DやOpenGLで実装されているのでとても軽いです。
Java2Dというくらいで2次元座標しか扱えませんが、いわゆるスプライトベースなゲームには十分な表現が可能です。

JavaFXがどうなのか、というのは、コンポーネント指向がゲーム制作に及ぼすメリットに限定される話だと思います。

JavaFXは公式にエンタープライズ・ビジネス分野向けと謳っているので、サードパーティ製コンポーネントの充実が期待されているのではないでしょうかね。
ゲーム制作には関係ない話です。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: Java8 FXでゲームプログラム

#8

投稿記事 by softya(ソフト屋) » 9年前

ISLe()さんに確認です。
私の認識では、Java2Dで加算半透明は出来ないのですが間違っていますでしょうか?
この流れだと出来るという話になっているように見えますが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe()

Re: Java8 FXでゲームプログラム

#9

投稿記事 by ISLe() » 9年前

『Java2D 半透明』『Graphics2D 半透明』とか検索してもらったほうが早いと思います。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: Java8 FXでゲームプログラム

#10

投稿記事 by softya(ソフト屋) » 9年前

検索しても私の把握している情報通りに加算合成はAPIレベルで存在しないと出てきますが、そういう事でよろしいですか?
ISLe()さんに聞く前にも検索してみたのですが見つけらませんでした。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
へにっくす
記事: 634
登録日時: 11年前
住所: 東京都

Re: Java8 FXでゲームプログラム

#11

投稿記事 by へにっくす » 9年前

softya(ソフト屋) さんが書きました:検索しても私の把握している情報通りに加算合成はAPIレベルで存在しないと出てきますが、そういう事でよろしいですか?
ISLe()さんに聞く前にも検索してみたのですが見つけらませんでした。
これのことですかね。
クラス Graphics2D #setComposite - Java6
クラス AlphaComposite - Java6
上記の、AlphaComposite.SRC_OVERの項で示されている式を見る限り、加算してるんですけど。
Ar = As*(1-Ad) + Ad
Cr = Cs*(1-Ad) + Cd
違ってましたらご容赦。
written by へにっくす

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: Java8 FXでゲームプログラム

#12

投稿記事 by softya(ソフト屋) » 9年前

へにっくすさんありがとうございます。
私が大ボケかましていない限りは、通常のアルファチャンネ合成だと思われます。
それとも、ずっと大ボケしているんだろうか(自信がない・・・)
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

sleep

Re: Java8 FXでゲームプログラム

#13

投稿記事 by sleep » 9年前

話が逸れているようなので、私が回答しますね。
march3 さんが書きました: もちろんFXでもできないことはないとは思うのですが、FXで向いているのか?というところが疑問で
そのあたりのご意見をいただけると幸いです。
FXはゲーム作成用に作られたライブラリではないです。それはAWTもSwingも同様です。
march3さんもご自身でおっしゃっているとおり、できないことはないです。作れます。
表現の実現によっては工夫が必要なところが出てくる可能性があります。
向いているかどうか、という質問は
march3さんがリメイクしようとしているゲームで使用している1つ1つの表現が実現可能かどうか、著しい処理落ちが発生した場合または表現できない場合にその打開策を見つけることができるかどうかにかかっているかと思います。
偶々制約を受けることなく移植できるかもしれませんし、小さな問題につまづくかもしれませんし、それは使用する表現毎に起きる問題だと思います。
しかし、それは仕方ありません。ゲーム作成用のライブラリではありませんから。
march3 さんが書きました: 数年前(Java1.6時代)の知識のため、GUI周りに関してはAWT,Swingに関する知識しかなく
最近のJavaFXについては初心者という状況です。
まずはAWT(またはSwing)で作成してみてください。
向いているかどうかは、その後FXを利用して同レベルものを作成するときに分かります。
何に向いていて、何に向いていないか、比較対象があるので、そのとき誰よりもmarch3さんが理解できるはずです。
制約がかかるかどうかは、作成するゲームで使用される表現に依存します。
(そもそも向いている向いていないという判断レベルが人によって違うと思います。どうだったら向いていないか判断基準に違いがあると言えます。)

何も試作されていない段階で、C言語を使用して作成したものとFXを利用して作成する場合の互換性をアバウトに聞いても
同じものではないので、回答者の方々も「違いがある」としか答えれないと思います。

現状では目に見えないものに対するふわふわとしたものを対象とした質問なので
ある表現を同じようにFXを利用した環境で実現するためにはどうすれば良いか?という疑問にぶち当たるところまで落とし込んでから
ピンポイントで質問された方が良いかもしれませんね。


まとめると
まずはJavaを使用した好きな環境で作ってみてください。
FXはゲーム作成用ライブラリではないので、向き不向きは試さないと分かりません。
向いていないと世間で言われたからといって、別の方法で解決できる場合もあるかもしれませんし
解決さえできればそこはそんなに重要とならないかもしれません。
なので、作り比べて確かめてみるしかないですね。
プレイステーションにしても、ラインバッファ方式のスプライトの代わりにあのドット絵をポリゴンに張ったテクスチャを平面に並べることでスプライト処理を表現してクロノトリガーやFF6を移植したわけですし
サターンは逆にスプライトを使用してポリゴンを表現していたわけで、大抵のことは工夫次第でできるんじゃないでしょうかね。
要は同じ表現をどう見せるかだと思いますけどね。
と、いったところでしょうか。

世間の人の声が「向いてない」から作らないのであれば、移植なんてできませんしね。

ISLe()

Re: Java8 FXでゲームプログラム

#14

投稿記事 by ISLe() » 9年前

softya(ソフト屋) さんが書きました:私の認識では、Java2Dで加算半透明は出来ないのですが間違っていますでしょうか?
この流れだと出来るという話になっているように見えますが。
わたしは加算合成と半透明合成は別個のものと認識しています。
その上で、半透明合成はずっと前からサポートされていると書きました。
softya(ソフト屋) さんが書きました:検索しても私の把握している情報通りに加算合成はAPIレベルで存在しないと出てきますが、そういう事でよろしいですか?
ISLe()さんに聞く前にも検索してみたのですが見つけらませんでした。
確かに加算合成はAPIとして用意されていませんね。

説明不足でした。
すみません。

march3

Re: Java8 FXでゲームプログラム

#15

投稿記事 by march3 » 9年前

たくさんのご意見ありがとうございます。

「百聞は一見に如かず」の言葉通り、本件に関しては
おっしゃる通り、実際にFXで試してみたほうが良い結論が得られると思い
すでにSwing+AWTとFXの両方で別々に作成し始めております。

製作過程でどうしてもFXで解決できないことがあればまた質問させていただくかもしれません。
そのときはよろしくお願いします。

閉鎖

“C言語何でも質問掲示板” へ戻る