スレタイはアプレットとの対比的な意味と考えてください。
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
探検
Javaで作るスタンドアローンゲーム
■ このスレッドは過去ログ倉庫に格納されています
1名前は開発中のものです。
2012/12/27(木) 16:04:18.62ID:rl+qGRHn272名前は開発中のものです。
2014/01/01(水) 23:52:05.83ID:bSKouUWX >>271
昔GL2で書いたコードを動かしたら普通に動いたので、GL3以降を使うと問題があるっぽい様子…
というかシェーダー関係なのかなあ…
自宅のGF560では問題なく動いてたコードなんで、ちょっと悩んでる。
帰省中に最近のOpenGLを勉強しようと思ったら、思わぬところでよく分からん事象に遭遇した。
昔GL2で書いたコードを動かしたら普通に動いたので、GL3以降を使うと問題があるっぽい様子…
というかシェーダー関係なのかなあ…
自宅のGF560では問題なく動いてたコードなんで、ちょっと悩んでる。
帰省中に最近のOpenGLを勉強しようと思ったら、思わぬところでよく分からん事象に遭遇した。
273名前は開発中のものです。
2014/01/03(金) 23:20:28.78ID:1Q3FtKvn そもそもopenglのポーティングは何使ってんの?
274270
2014/01/04(土) 00:05:52.26ID:ZD/ROmwt275名前は開発中のものです。
2014/01/04(土) 01:52:37.37ID:4Kus4sgx 関係有るかわからないけどJOGLはバージョン変わるたびに激変してるからwebの情報は古いよ。
自分で変更点追うしかない。
自分で変更点追うしかない。
276270
2014/01/04(土) 22:43:55.31ID:ZD/ROmwt 原因が分かったので報告。
VAOを使って描画した後、
glBindVertexArray(0)
を呼んでバインドを外してなかった。
GPUによって、それでも動作する場合と動作がおかしくなってしまう場合があるみたい。
VAOを使って描画した後、
glBindVertexArray(0)
を呼んでバインドを外してなかった。
GPUによって、それでも動作する場合と動作がおかしくなってしまう場合があるみたい。
277名前は開発中のものです。
2014/01/05(日) 17:57:44.52ID:Mpn6RVWq オブジェクト化されたOpenGL APIの規格ができるとゲーム作りなんかは随分楽になりそうだが、
そういうのはもっと上位のフレームワークでやれってスタンスなんだろうな
そういうのはもっと上位のフレームワークでやれってスタンスなんだろうな
278名前は開発中のものです。
2014/01/05(日) 18:15:21.07ID:cB3+M9N2 インスタンスつくってメソッド呼んでーって感じにしたらってこと?
279名前は開発中のものです。
2014/01/05(日) 18:33:29.28ID:Mpn6RVWq >>278
そうそう、VAOとかVBOとかがオブジェクトになる感じ
そうそう、VAOとかVBOとかがオブジェクトになる感じ
280名前は開発中のものです。
2014/01/05(日) 18:45:24.60ID:cB3+M9N2 >>279
確かに便利だけどそれやると言語によってはAPIにアクセスできなくなってしまうよ
確かに便利だけどそれやると言語によってはAPIにアクセスできなくなってしまうよ
281名前は開発中のものです。
2014/01/05(日) 19:01:50.30ID:Mpn6RVWq >>280
理想は、C言語(またはもっと低級な言語)を前提としたOpenGLと
JavaやC#やJavascripstを前提にしたOpenGL++の二本立てになるとありがたい
WindowsAPIとかもそんな感じになってなかったっけ?
とはいえ、Cからドライバにアクセスするための関数は容易に作れるけど、
オブジェクト指向言語のAPIとなるとそうはいかんからなあ…
理想は、C言語(またはもっと低級な言語)を前提としたOpenGLと
JavaやC#やJavascripstを前提にしたOpenGL++の二本立てになるとありがたい
WindowsAPIとかもそんな感じになってなかったっけ?
とはいえ、Cからドライバにアクセスするための関数は容易に作れるけど、
オブジェクト指向言語のAPIとなるとそうはいかんからなあ…
282名前は開発中のものです。
2014/01/05(日) 19:12:09.46ID:cB3+M9N2283名前は開発中のものです。
2014/01/05(日) 23:01:14.37ID:xXQO5mvS JavaFXでUSBゲームパッドの入力取りたくて、今JInputの>>267の方の海外版を
試してみてるんだけどやっぱ日本語情報ってないよね?
更新もかなり頻繁だし、フォーラムも賑わってるのに公式の
Getting Startedが2007年だからなんとも不安
試してみてるんだけどやっぱ日本語情報ってないよね?
更新もかなり頻繁だし、フォーラムも賑わってるのに公式の
Getting Startedが2007年だからなんとも不安
284名前は開発中のものです。
2014/01/09(木) 02:04:38.73ID:X+lgFy1k285名前は開発中のものです。
2014/01/11(土) 23:48:00.80ID:xr3zgGUx >>284
なるほど〜、サンクス
Slick使ってると、Ubuntuで実行したとき書き込み可能テクスチャいじってるとXlib関係のエラーが出て、
内容としては、Xシステムに複数のスレッドからアクセスすんな!みたいなのなんだけど、
mainだけのシングルスレッドで試しても起きるんだよね・・・。似たような経験した人いますか?
いろいろ試した感じだと、テクスチャの解放が終わらない内に次のテクスチャ生成すると起きるんだけど、
ライブラリ側でそういう風に出来てる以上、Sleep挟むくらいしか対処法ないのかな?
なるほど〜、サンクス
Slick使ってると、Ubuntuで実行したとき書き込み可能テクスチャいじってるとXlib関係のエラーが出て、
内容としては、Xシステムに複数のスレッドからアクセスすんな!みたいなのなんだけど、
mainだけのシングルスレッドで試しても起きるんだよね・・・。似たような経験した人いますか?
いろいろ試した感じだと、テクスチャの解放が終わらない内に次のテクスチャ生成すると起きるんだけど、
ライブラリ側でそういう風に出来てる以上、Sleep挟むくらいしか対処法ないのかな?
286名前は開発中のものです。
2014/01/12(日) 19:57:33.93ID:XBDcFGBU いってる意味分からん
Texture.release()を呼んでも直ちに開放されないってこと?
Texture.release()を呼んでも直ちに開放されないってこと?
287名前は開発中のものです。
2014/01/17(金) 23:03:46.53ID:Wfv0W6gk288名前は開発中のものです。
2014/01/21(火) 13:21:22.15ID:HN69Ellt 前からちょくちょくlinuxでopenGLの挙動がおかしいとか書いてる人?
そんなことばかりしてたら何も作れず時間ばかり無駄にしてしまうぞ
そんなことばかりしてたら何も作れず時間ばかり無駄にしてしまうぞ
289名前は開発中のものです。
2014/01/22(水) 02:34:00.21ID:4/7cpvbC それでなくても最近のOpenGLは難しいしな。
「久しぶりにゲームとか作りたいなあ。やっぱり漢ならエンジンから自作だぜ!」
と調子に乗ってたら、フォンシェーディングされた三角形をくるくる回すだけで2週間かかったぜ…
glBeginってなんだかんだで便利だったんだな
「久しぶりにゲームとか作りたいなあ。やっぱり漢ならエンジンから自作だぜ!」
と調子に乗ってたら、フォンシェーディングされた三角形をくるくる回すだけで2週間かかったぜ…
glBeginってなんだかんだで便利だったんだな
290名前は開発中のものです。
2014/01/22(水) 18:40:13.65ID:wHmsrBK5 矢印キーの押下状態を使いたいのですが
キーが離されたときには必ず key released イベントが発行されると考えて大丈夫でしょうか?
例えば処理がビジーになってるときでも、イベントが取りこぼされたりスキップされたり
しないで、遅れてでも必ずイベントハンドラを呼んでもらえると保証しても大丈夫でしょうか?
キーを離しているのに押しっぱなしと認識されてしまうと困るので
お願いします
キーが離されたときには必ず key released イベントが発行されると考えて大丈夫でしょうか?
例えば処理がビジーになってるときでも、イベントが取りこぼされたりスキップされたり
しないで、遅れてでも必ずイベントハンドラを呼んでもらえると保証しても大丈夫でしょうか?
キーを離しているのに押しっぱなしと認識されてしまうと困るので
お願いします
291名前は開発中のものです。
2014/01/22(水) 19:25:26.73ID:Oq+LUbbM 処理がビジーなら何を使うにしてもイベントは取りこぼすだろ
そんなことより、そんなにkeyreleasedの取りこぼしが気になるなら「keydownが連続で2回発生したらどうするか」という考え方で対処したほうが無難
そんなことより、そんなにkeyreleasedの取りこぼしが気になるなら「keydownが連続で2回発生したらどうするか」という考え方で対処したほうが無難
292名前は開発中のものです。
2014/01/23(木) 00:40:49.49ID:zd7YqPgB うう、そうか…キューにためておいてくれて必ずイベント発生してくれると期待していた
コードは
boolean up, down, left. right;
で
if( ↑キー押下 ) up = true;
if( ↑キー離す ) up = false;
なので、
key release を取りこぼした時点で失敗していて、
後から key down が2回発生したことを検出しても時すでに遅しなんです
コードは
boolean up, down, left. right;
で
if( ↑キー押下 ) up = true;
if( ↑キー離す ) up = false;
なので、
key release を取りこぼした時点で失敗していて、
後から key down が2回発生したことを検出しても時すでに遅しなんです
293名前は開発中のものです。
2014/01/23(木) 00:53:30.22ID:hfja1pt3 あれ、キューに溜まらないんだっけ?
特に意識してなかったけどなんか不安になったからウインドウのフォーカス判定見直しておこう
特に意識してなかったけどなんか不安になったからウインドウのフォーカス判定見直しておこう
294名前は開発中のものです。
2014/01/23(木) 01:01:38.27ID:y0vYWKn+ なんの話だろう?swingからdirect inputしかわからんが、
全てのキーの状態を毎フレーム取得して、前回と今回のデータから
判断するのが基本だよ
swingのKeyListenerはそのへん致命的やな
全てのキーの状態を毎フレーム取得して、前回と今回のデータから
判断するのが基本だよ
swingのKeyListenerはそのへん致命的やな
295名前は開発中のものです。
2014/02/12(水) 01:02:51.34ID:9PrO8hR2 Slick2D使ってちょっとしたゲーム作ってる
296名前は開発中のものです。
2014/02/14(金) 00:35:12.81ID:RASlhvE9 Javaの場合、2DならSwing直叩きでもどうにかなるような気がするけど、Slickって効率よくなるのかな?
Swingでも、加算半透明がない以外は2Dゲームを作るのに必要な機能は一通り揃ってる気がする。
Swingでも、加算半透明がない以外は2Dゲームを作るのに必要な機能は一通り揃ってる気がする。
297名前は開発中のものです。
2014/02/14(金) 00:43:22.41ID:mTpNkZDO Slickは音声の再生とか当たり判定?の機能が結構あったから、そういう部分を最初から作らなくて済むという点ではいいんじゃないかと思う。
でも日本語表示が面倒なうえに遅い。
でも日本語表示が面倒なうえに遅い。
298名前は開発中のものです。
2014/02/15(土) 17:49:18.48ID:XLIWRIqh >>297
まず、ビルボードフォントのロードが遅いのはしかたないよ。
それはロード画面でも作るしかない。
ただし、UnicodeFontでaddGlyphAscii()で半角英数全部読み込み、
addGlyph(unicode_start, unicode_end()で日本語数千文字全部読み込みは
やめたほうが良い。ロード重くてVRAM消費大きいのは当然。
使う文字だけaddGlyph(String text)ならOK。
でもチャットとか使う文字コード不明だと一工夫必要だな。
ただslickのばあい、"あいうえお"なら、
"あ","い","う","え","お"でそれぞれ別のテクスチャとして
生成or描画してる感はある。
slickのコードを参考にオレオレライブラリつくるべく、
OpenGLを少し勉強中だぜ^^
まず、ビルボードフォントのロードが遅いのはしかたないよ。
それはロード画面でも作るしかない。
ただし、UnicodeFontでaddGlyphAscii()で半角英数全部読み込み、
addGlyph(unicode_start, unicode_end()で日本語数千文字全部読み込みは
やめたほうが良い。ロード重くてVRAM消費大きいのは当然。
使う文字だけaddGlyph(String text)ならOK。
でもチャットとか使う文字コード不明だと一工夫必要だな。
ただslickのばあい、"あいうえお"なら、
"あ","い","う","え","お"でそれぞれ別のテクスチャとして
生成or描画してる感はある。
slickのコードを参考にオレオレライブラリつくるべく、
OpenGLを少し勉強中だぜ^^
299名前は開発中のものです。
2014/02/16(日) 14:14:02.89ID:alwCO1iA ゲーム作るときによく思うんだが、Javaは行列とかベクトルを標準ライブラリでサポートしてもいいんじゃないか?
自前で実装するとjavaコードでループ回して計算させることになるけど、
標準ライブラリに入っていれば、そこはベクトル化してSSEを使うとかの小細工が出来るだろうし。
自前で実装するとjavaコードでループ回して計算させることになるけど、
標準ライブラリに入っていれば、そこはベクトル化してSSEを使うとかの小細工が出来るだろうし。
300名前は開発中のものです。
2014/02/16(日) 16:34:35.48ID:xrpwGl5O >>299
完全に同意。
行列ライブラリは、自作しようにもJavaだとジェネリクスがただの型安全のための機能だから
C++みたいに使いやすくてカッコいいライブラリつくれないんだよね
拡張性と再利用性考慮してインターフェース駆使するとパフォーマンスゴミになるし、
かと言ってvecmathみたいに全部のプリミティブ型別で書いていくと面倒臭すぎる(double限定にしても良いかも知れないけど)
この部分の解決のためだけにScalaを使ってみようかなと思ってしまうほど
ただ、最近だとJVMが賢くなってプリミティブラッパ型で計算しまくっても
さほど遅くならないらしいね
完全に同意。
行列ライブラリは、自作しようにもJavaだとジェネリクスがただの型安全のための機能だから
C++みたいに使いやすくてカッコいいライブラリつくれないんだよね
拡張性と再利用性考慮してインターフェース駆使するとパフォーマンスゴミになるし、
かと言ってvecmathみたいに全部のプリミティブ型別で書いていくと面倒臭すぎる(double限定にしても良いかも知れないけど)
この部分の解決のためだけにScalaを使ってみようかなと思ってしまうほど
ただ、最近だとJVMが賢くなってプリミティブラッパ型で計算しまくっても
さほど遅くならないらしいね
301名前は開発中のものです。
2014/02/27(木) 00:55:40.21ID:Z09ptZ8a302名前は開発中のものです。
2014/02/27(木) 23:04:33.97ID:yUehUjJD >>299-301
行列とかベクトルって,3Dの?
俺はJava3D使ってるけど,インストールする(してもらう)の多少面倒だから,
確かに標準にあって欲しいねぇ.
# 標準だとLine2DやPoint2Dがあるくらいだよなぁ.
# Vectorはこの場合は違うものだし.
行列とかベクトルって,3Dの?
俺はJava3D使ってるけど,インストールする(してもらう)の多少面倒だから,
確かに標準にあって欲しいねぇ.
# 標準だとLine2DやPoint2Dがあるくらいだよなぁ.
# Vectorはこの場合は違うものだし.
303名前は開発中のものです。
2014/02/27(木) 23:10:39.87ID:IrJ/L48F304名前は開発中のものです。
2014/02/28(金) 15:32:00.06ID:0rEIeBjK 気になったんですが、
Javaでパソコンで動くスタンドアローンゲーム作るとしたら、
配布はjar形式でJVMにマウントしてもらうってことですか?
その場合、やはりプログラムコードの暗号化は諦めてるんでしょうか?
Javaでパソコンで動くスタンドアローンゲーム作るとしたら、
配布はjar形式でJVMにマウントしてもらうってことですか?
その場合、やはりプログラムコードの暗号化は諦めてるんでしょうか?
305名前は開発中のものです。
2014/02/28(金) 16:54:12.60ID:piLveIui 埋め込まれたクラス名や関数名から
容易にリバースされてしまうのの対策としては
難読化ツールを使うかもしれないが
難読化したバイトコードから読み取れるほど
スキルのある人に対しては自分は対策は諦めるな
容易にリバースされてしまうのの対策としては
難読化ツールを使うかもしれないが
難読化したバイトコードから読み取れるほど
スキルのある人に対しては自分は対策は諦めるな
306名前は開発中のものです。
2014/02/28(金) 21:41:33.68ID:0rEIeBjK307名前は開発中のものです。
2014/03/02(日) 16:49:33.89ID:4Ufi5mJP パッケージ名に使えるドメイン名を取得したいのですが何か方法はありますか?
Package BOF というのはあるんですが、もうサークル向け用に1つ取得してしまって
一人につき1つなので自分個人用のはもう取得できません
サーバ会社に申し込んでドメイン名を買うのもアリですが
毎年維持費がかかってしまうし、もし失効したときに
配布してしまったアプリをどうすればよいか分からないので困ります
できれば低コストでほぼ永続的にドメイン名を使わせてもらえる方法ないでしょうか?
Package BOF というのはあるんですが、もうサークル向け用に1つ取得してしまって
一人につき1つなので自分個人用のはもう取得できません
サーバ会社に申し込んでドメイン名を買うのもアリですが
毎年維持費がかかってしまうし、もし失効したときに
配布してしまったアプリをどうすればよいか分からないので困ります
できれば低コストでほぼ永続的にドメイン名を使わせてもらえる方法ないでしょうか?
308名前は開発中のものです。
2014/03/02(日) 17:32:49.38ID:eSGAMgB8 >>307
サークル用と個人用は完全に関連性を匂わせたくないってことでしょうか?
匂わせてもいいならサークル用に取得したドメイン以下で自ら割り振れば良いと思いますが
しかし、あのサービスってサークル用と個人用を別々に登録するのってダメなんでしょうかね?
よほど悪意のある登録の仕方(複数組織を名乗って片っ端から登録しまくるなど)をしない限り
違反だと言われることはないんじゃないかなぁとか、甘いこと考えていたのですが・・・
サークル用と個人用は完全に関連性を匂わせたくないってことでしょうか?
匂わせてもいいならサークル用に取得したドメイン以下で自ら割り振れば良いと思いますが
しかし、あのサービスってサークル用と個人用を別々に登録するのってダメなんでしょうかね?
よほど悪意のある登録の仕方(複数組織を名乗って片っ端から登録しまくるなど)をしない限り
違反だと言われることはないんじゃないかなぁとか、甘いこと考えていたのですが・・・
309名前は開発中のものです。
2014/03/02(日) 20:17:31.47ID:4Ufi5mJP >>308
確かにゆるい感じしますね
自分はいちおう規約まもっとこうかなと思っただけです
家族はたぶんこれからもプログラミングと縁はなさそうなので
家族に頼んで取得してもらうって使わせてもらうことにしました
確かにゆるい感じしますね
自分はいちおう規約まもっとこうかなと思っただけです
家族はたぶんこれからもプログラミングと縁はなさそうなので
家族に頼んで取得してもらうって使わせてもらうことにしました
310名前は開発中のものです。
2014/03/03(月) 11:37:03.81ID:0MFi7S0v JavaFX 8 の3D機能が結構使いやすそうなんだけど、速度ってどんくらいなんだろうね?
アクションは無理でもそれ以外のゲームに耐えうるくらいならニワカ3Dな俺歓喜
アクションは無理でもそれ以外のゲームに耐えうるくらいならニワカ3Dな俺歓喜
311名前は開発中のものです。
2014/03/05(水) 13:10:43.11ID:vvepHaRA RPGのダンジョンとかいけるんじゃね
312名前は開発中のものです。
2014/03/09(日) 16:08:21.47ID:UV7RBW8A SwingのときはSwingUtilities#invokeLaterに自作のループマネージャを登録して
FPS管理してたんだけど、JavaFXで同じようなことをやりたい場合はSwingと同じように
Platform#runLaterにループマネージャを登録するやり方と、JavaFX特有のTimeLineで
16ミリ秒ごと処理を呼び出すようにするのとではどっちが良いんでしょうかね?
他にも、JavaFXには「Task」って考え方があるようですが、これはループには
あまり向いてなさそうですね(毎フレームnewするのも気が引ける)
FPS管理してたんだけど、JavaFXで同じようなことをやりたい場合はSwingと同じように
Platform#runLaterにループマネージャを登録するやり方と、JavaFX特有のTimeLineで
16ミリ秒ごと処理を呼び出すようにするのとではどっちが良いんでしょうかね?
他にも、JavaFXには「Task」って考え方があるようですが、これはループには
あまり向いてなさそうですね(毎フレームnewするのも気が引ける)
313名前は開発中のものです。
2014/03/09(日) 16:39:31.94ID:zp5zMRCB SwingでSwing Timer使ってたけど自作のループマネージャってなんだろ
314名前は開発中のものです。
2014/03/09(日) 16:42:18.54ID:zp5zMRCB FX分からんけど、TimeLineはSwing Timerにあたるものだから
自分ならそちらでいく
自分ならそちらでいく
315名前は開発中のものです。
2014/03/10(月) 14:54:03.30ID:kt0u4e9M libgdxってのがslick2dの後継らしい
317名前は開発中のものです。
2014/04/20(日) 23:54:09.45ID:YswLFHGG やればいいんじゃね?
JOGLかLWJGLになるんだろうけど、ゲームを作る環境としては特に悪いとは思わない。
JOGLかLWJGLになるんだろうけど、ゲームを作る環境としては特に悪いとは思わない。
318名前は開発中のものです。
2014/04/21(月) 02:08:32.49ID:QMyWkepG 3Dのオブジェクトファイルとか読み込んで描画したり、物理演算に苦労するよ
物理演算等のライブラリは多数存在するけど、ドキュメントが英語だしイマイチ低機能、最低限の機能しかないからやめた方がいい
物理演算等のライブラリは多数存在するけど、ドキュメントが英語だしイマイチ低機能、最低限の機能しかないからやめた方がいい
319名前は開発中のものです。
2014/04/27(日) 11:00:01.59ID:w1gNzEbH そもそも何故java.awt.ComponentにPaintListenerが無いんだぜ?
void paint(Graphics g)なりpaintComponent の中で自前の部品を使って描画する時に、
gに紐付いたComponentのサイズや他の情報にアクセスする時に、
結局部品のコンストラクタなりでComponentを渡してやる必要がでてくるだろ。
ListenerでPaintEventさえもらえればそんに手間も要らなくなるし、
gと部品が受け取ったComponentとの不一致の可能性もなくなる訳だし。
1.7では軽量・重量コンポーネントの混在も可能になったりしてるし、
gがComponentと紐付いていないパターン(ただのImageとか)でも判断できるように作れる筈なんだけどな。
JLayerだっけ?あんなの利用させられるくらいなら、この方が楽だろ。
void paint(Graphics g)なりpaintComponent の中で自前の部品を使って描画する時に、
gに紐付いたComponentのサイズや他の情報にアクセスする時に、
結局部品のコンストラクタなりでComponentを渡してやる必要がでてくるだろ。
ListenerでPaintEventさえもらえればそんに手間も要らなくなるし、
gと部品が受け取ったComponentとの不一致の可能性もなくなる訳だし。
1.7では軽量・重量コンポーネントの混在も可能になったりしてるし、
gがComponentと紐付いていないパターン(ただのImageとか)でも判断できるように作れる筈なんだけどな。
JLayerだっけ?あんなの利用させられるくらいなら、この方が楽だろ。
320名前は開発中のものです。
2014/04/28(月) 01:11:27.19ID:NW1ufA+w もう少しまとめなさい
321名前は開発中のものです。
2014/04/28(月) 02:09:11.47ID:EfnjKw0Y paintイベントが発生したComponentを知る仕組みがイベントハンドルとして用意されてないから、
設計が素直にできないって話だよ。
swtにはあるし、他の有名なgui絡んだ言語じゃ当たり前にハンドルできるだろ。
何故ここを棄てたのか理解に苦しむ。
java.awt.ComponentでaddPaintListener()が出来て、普通にPaintEvent.getSource()できればスマートだろう。
ここを開放してないから、paintを弄り倒したいアプリだと、
paintのタイミングとは別の入り口でComponentを保持する必要が出てくる。
この制約のせいで、クラス設計がキモくなる。
それを無くす為に導入されたのがJLayerのつもりかもしれないが、余計にコードが汚くなるわ。
って話です。
設計が素直にできないって話だよ。
swtにはあるし、他の有名なgui絡んだ言語じゃ当たり前にハンドルできるだろ。
何故ここを棄てたのか理解に苦しむ。
java.awt.ComponentでaddPaintListener()が出来て、普通にPaintEvent.getSource()できればスマートだろう。
ここを開放してないから、paintを弄り倒したいアプリだと、
paintのタイミングとは別の入り口でComponentを保持する必要が出てくる。
この制約のせいで、クラス設計がキモくなる。
それを無くす為に導入されたのがJLayerのつもりかもしれないが、余計にコードが汚くなるわ。
って話です。
322名前は開発中のものです。
2014/04/28(月) 17:41:47.77ID:NW1ufA+w アプリにもよるけど、俺はコンポーネントをシングルトンにしてる
もしくはシングルトンクラスに相互参照するようなコンポーネントを全部いれてる
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();
...
}
もしくはシングルトンクラスに相互参照するようなコンポーネントを全部いれてる
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.23ID:40qY12US 話の流れが良く判らんが、final付けとかないとダメだろ。参照を上書きされるぞ。
↓
public "final" MyWindow window = new MyWindow();
↓
public "final" MyWindow window = new MyWindow();
324名前は開発中のものです。
2014/04/30(水) 10:24:37.40ID:2hopiA0K final忘れてた。でも一人でやってるなら体裁はどうでもいのだよ
セッター・ゲッターとかね
主題は相互参照。それで俺は例を出したのだけど
オブジェクトの初期化・コンストラクタで循環しないように気をつけてな
セッター・ゲッターとかね
主題は相互参照。それで俺は例を出したのだけど
オブジェクトの初期化・コンストラクタで循環しないように気をつけてな
325名前は開発中のものです。
2014/05/01(木) 12:27:59.01ID: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) [
// ゲームの描画
}
}
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.24ID:0k+QrX5J >>325
たったそれだけの単純な例ならPaintListenerだっていらないだろw
JSplitPane, JTabPane, JScrollPaneとかで何層にも囲まれている場合、
上に挙げた様なやりかたでごり押しするのがやりやすいというのが俺の経験則
たったそれだけの単純な例ならPaintListenerだっていらないだろw
JSplitPane, JTabPane, JScrollPaneとかで何層にも囲まれている場合、
上に挙げた様なやりかたでごり押しするのがやりやすいというのが俺の経験則
327名前は開発中のものです。
2014/05/01(木) 14:16:05.67ID:0k+QrX5J でも>>319の変な独り言ぶつぶつをよくみたら
そもそもComponent間の絡みという話ではないようだな
そもそもComponent間の絡みという話ではないようだな
328名前は開発中のものです。
2014/05/01(木) 14:31:37.25ID: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();
// ゲームの描画
}
}
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.89ID:OWwKad9r >>326
> JSplitPane, JTabPane, JScrollPaneとかで何層にも囲まれている場合、
> 上に挙げた様なやりかたでごり押しするのがやりやすいというのが俺の経験則
一つのゲーム画面の中で利用される様々なUIにSwingを利用してる人?
それともゲームのメイン画面を表示するframeとは別に、メッセージウィンドウを別のframeに表示するような内容のもの?
こっちはUI自前で描画するので何言ってるのか良く判らんわ。
> JSplitPane, JTabPane, JScrollPaneとかで何層にも囲まれている場合、
> 上に挙げた様なやりかたでごり押しするのがやりやすいというのが俺の経験則
一つのゲーム画面の中で利用される様々なUIにSwingを利用してる人?
それともゲームのメイン画面を表示するframeとは別に、メッセージウィンドウを別のframeに表示するような内容のもの?
こっちはUI自前で描画するので何言ってるのか良く判らんわ。
330名前は開発中のものです。
2014/05/01(木) 15:39:15.05ID:0k+QrX5J 質問者が何をしたいのかさっぱりわからん
paint(Graphics g)のオーバーライドをしたくないだけか?
じゃあPaintListenerに代替する委譲を組み込んだ
abstract class GameWindow extends Frame でもあらかじめ定義すれば
いいだけの話だろう。コンポーネントはひとつなんだろうし。
>UI自前で描画するので
OpenGLを使ってるわけでもなさそうだし
マップとかパラメータのエディタの話だと思った
OpenGL Canvasを囲ってるswing UIとかとの連携とか面倒なとこなんで
paint(Graphics g)のオーバーライドをしたくないだけか?
じゃあPaintListenerに代替する委譲を組み込んだ
abstract class GameWindow extends Frame でもあらかじめ定義すれば
いいだけの話だろう。コンポーネントはひとつなんだろうし。
>UI自前で描画するので
OpenGLを使ってるわけでもなさそうだし
マップとかパラメータのエディタの話だと思った
OpenGL Canvasを囲ってるswing UIとかとの連携とか面倒なとこなんで
331名前は開発中のものです。
2014/05/01(木) 17:08:16.54ID:OWwKad9r ここは質問スレじゃねーよ。
> abstract class GameWindow extends Frame でもあらかじめ定義すれば
> いいだけの話だろう。コンポーネントはひとつなんだろうし。
たかがComponentのKey, Mouse, +αのイベントをトリガーとして、
そのComponentのGraphicsに対して描画するだけのプログラムなのに、
何で態々GameWindow なんて作らないといけないのか判らん。
public class App {
public static void main(String[] args) {
}
> abstract class GameWindow extends Frame でもあらかじめ定義すれば
> いいだけの話だろう。コンポーネントはひとつなんだろうし。
たかがComponentのKey, Mouse, +αのイベントをトリガーとして、
そのComponentのGraphicsに対して描画するだけのプログラムなのに、
何で態々GameWindow なんて作らないといけないのか判らん。
public class App {
public static void main(String[] args) {
}
332名前は開発中のものです。
2014/05/01(木) 17:10:21.32ID:0k+QrX5J もう好きにやったらいんじゃないの?
単なる好みの話のようだし
単なる好みの話のようだし
333名前は開発中のものです。
2014/05/01(木) 17:11:48.98ID: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クラスを作って使うとか、設計的に糞だな〜。とぼやいただけ。
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クラスを作って使うとか、設計的に糞だな〜。とぼやいただけ。
334名前は開発中のものです。
2014/05/01(木) 17:19:50.13ID:0k+QrX5J タイマーで0.1秒毎に更新とかしないのね
335名前は開発中のものです。
2014/05/01(木) 17:22:44.30ID: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%での話だよ。
ついでに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%での話だよ。
336名前は開発中のものです。
2014/05/01(木) 17:24:12.49ID:OWwKad9r つまり、>>333の実装方法でも別にアニメーションするゲームでも問題なく実装できる。
337名前は開発中のものです。
2014/05/11(日) 13:41:58.58ID:lnDi3sKB SwingとかJavaFXでジョイスティック取りたい時ってどうしてる?
338名前は開発中のものです。
2014/05/11(日) 17:47:45.49ID:ahXPYICD みんなJavaでゲーム作ってどこで、どんな形で配布しての?
339名前は開発中のものです。
2014/05/11(日) 19:28:23.99ID:04XDoyiH >>336
俺ならまず要件を見直す。
どうしても棄てられないのなら対応osや言語選定を見直す。
LWJGLなんかが対応してるとは言われてるが、実際の所は最新版落として試して見ないのと判らんすぎる。
それから将来的な対応状況も未知数。素敵なライブラリだとは思うけどね。
MinecraftってLWJGL使ってる癖にアプリ側でその辺対応してないような気がするのだが、
やはり棄てた方が無難って事なんじゃないのかな。
俺なら勿論サクッ棄てる。
実際fpsとかのPCゲーなんてマウスとキーボードで十分ですし。
一応、このスレを「ジョイスティック」で検索すると、幾らか鮮度の高そうな情報が出てくるよ。
>>338
executable jarでいいんでね。
windowsに限りexeに変換して配布してる人いるね。
俺は面倒だからjarで済む要件に何が何でも留める。
結局さ、人気の出るゲームってのは、プレイヤー側が能動的に問題解決に動くから、
アプリ側がそこまで親切にする必要なんて無いと思うけどね。
Minecraftだってjoytokey経由でジョイパッド使ったりとかしてるじゃん。
とりあえず最低限の入力に対応だけして、ゲーム内容に特化するのが吉だよ。
ゲームのコアさえ生きてれば、UI周り、描画周りを別のモノに置き換えて、バージョン2とか言っちゃってもいいんだしさ。
俺ならまず要件を見直す。
どうしても棄てられないのなら対応osや言語選定を見直す。
LWJGLなんかが対応してるとは言われてるが、実際の所は最新版落として試して見ないのと判らんすぎる。
それから将来的な対応状況も未知数。素敵なライブラリだとは思うけどね。
MinecraftってLWJGL使ってる癖にアプリ側でその辺対応してないような気がするのだが、
やはり棄てた方が無難って事なんじゃないのかな。
俺なら勿論サクッ棄てる。
実際fpsとかのPCゲーなんてマウスとキーボードで十分ですし。
一応、このスレを「ジョイスティック」で検索すると、幾らか鮮度の高そうな情報が出てくるよ。
>>338
executable jarでいいんでね。
windowsに限りexeに変換して配布してる人いるね。
俺は面倒だからjarで済む要件に何が何でも留める。
結局さ、人気の出るゲームってのは、プレイヤー側が能動的に問題解決に動くから、
アプリ側がそこまで親切にする必要なんて無いと思うけどね。
Minecraftだってjoytokey経由でジョイパッド使ったりとかしてるじゃん。
とりあえず最低限の入力に対応だけして、ゲーム内容に特化するのが吉だよ。
ゲームのコアさえ生きてれば、UI周り、描画周りを別のモノに置き換えて、バージョン2とか言っちゃってもいいんだしさ。
340名前は開発中のものです。
2014/05/11(日) 19:33:11.25ID:04XDoyiH341名前は開発中のものです。
2014/05/12(月) 19:19:28.08ID:E7gtXzq3342名前は開発中のものです。
2014/05/12(月) 20:07:41.64ID:Vjyw6Vu1 jinput使えばいいよ
343名前は開発中のものです。
2014/05/12(月) 22:25:47.35ID:E7gtXzq3 >>342
Ubuntuだとroot権限無いせいかわからないけど入力取得できなかったんだよなぁ
あと、ちょい低級すぎるのと、自分でGUIスレッドと連動させるとなると
ウインドウに対してのフォーカス有無とか考慮するのが大変な気がした
同人ゲーのバギーなネタの1つだよね、フォーカス無しで暴れるの
Ubuntuだとroot権限無いせいかわからないけど入力取得できなかったんだよなぁ
あと、ちょい低級すぎるのと、自分でGUIスレッドと連動させるとなると
ウインドウに対してのフォーカス有無とか考慮するのが大変な気がした
同人ゲーのバギーなネタの1つだよね、フォーカス無しで暴れるの
344名前は開発中のものです。
2014/09/09(火) 14:43:51.41ID:3oFzTnHF JavaFX使ってる人いない?
POJOでモデル作ろうとか考えずにモデルごとJavaFXの上で作った方がいいよね
POJOでモデル作ろうとか考えずにモデルごとJavaFXの上で作った方がいいよね
345名前は開発中のものです。
2014/10/05(日) 16:53:18.23ID:URSELbpt IDかっこいい記念カキコ
UR SEL あなたのセル
だって
UR SEL あなたのセル
だって
346名前は開発中のものです。
2014/10/05(日) 16:56:18.39ID:5jShr1Of 住都公団の売物件がどうした?
347名前は開発中のものです。
2014/11/16(日) 13:17:23.48ID:X9qJh2ZF Javaの生産性はゲーム制作にも有用そうだと思っていたが、結局Javaによるゲーム開発はブレイクしないままだったな
ネイティブで性能を引き出すならそれぞれのプラットフォームに特化してC系でゴリゴリ最適化すればいいし、
マルチプラットフォームならそれこそwebベースになっちゃってるし
ネイティブで性能を引き出すならそれぞれのプラットフォームに特化してC系でゴリゴリ最適化すればいいし、
マルチプラットフォームならそれこそwebベースになっちゃってるし
348名前は開発中のものです。
2014/11/21(金) 18:48:41.65ID:/Uy/obEw javaでゲーム作ろうと思ってようやく一通り動くようなものができた。
といってもクリックで指定した座標に向かってキャラが歩き、接触した物体に自動的に攻撃して破壊するだけのものだが。
さて、これをオンラインにしてマルチプレイに対応しようとしたが、全く実現できずに3ヶ月。
javaは通信周りは強いと聞いていたし、楽に実装できるかと思っていたが、基本中の基本部分が全然動かない。
・非同期通信を実現しなくてはならないが、サンプルを見ながらjava.nioパッケのセレクタ、selectNowを使っているのに数回ループ後に何故かブロックされる。
・マルチキャストをしなくてはならないが、SeverSocketChannelから取得したSocketChannelをリストに保持してクライアント送信時にループで送信しているが、受信しない。
・ゲームではUDP通信が基本らしいが、画像やDBデータ、インスタンス、文字列ですら正常に送受信できない。
・TCPでも試したが、通信処理のスレッドループでよく判らなくなってきて、どこにメインループの処理を書いたらいいのかわからない。
段々めちゃくちゃになってきたので、非同期通信、マルチキャスト、インスタンスの送受信なんかをカバーしたフレームワークがないか、
どうせならマルチプレイオンライン対応のフレームワークがないかと探しているが見つからず。
何か情報をください。できればオープンソースで日本語の情報があるものを
といってもクリックで指定した座標に向かってキャラが歩き、接触した物体に自動的に攻撃して破壊するだけのものだが。
さて、これをオンラインにしてマルチプレイに対応しようとしたが、全く実現できずに3ヶ月。
javaは通信周りは強いと聞いていたし、楽に実装できるかと思っていたが、基本中の基本部分が全然動かない。
・非同期通信を実現しなくてはならないが、サンプルを見ながらjava.nioパッケのセレクタ、selectNowを使っているのに数回ループ後に何故かブロックされる。
・マルチキャストをしなくてはならないが、SeverSocketChannelから取得したSocketChannelをリストに保持してクライアント送信時にループで送信しているが、受信しない。
・ゲームではUDP通信が基本らしいが、画像やDBデータ、インスタンス、文字列ですら正常に送受信できない。
・TCPでも試したが、通信処理のスレッドループでよく判らなくなってきて、どこにメインループの処理を書いたらいいのかわからない。
段々めちゃくちゃになってきたので、非同期通信、マルチキャスト、インスタンスの送受信なんかをカバーしたフレームワークがないか、
どうせならマルチプレイオンライン対応のフレームワークがないかと探しているが見つからず。
何か情報をください。できればオープンソースで日本語の情報があるものを
349名前は開発中のものです。
2014/11/21(金) 19:11:03.25ID:P6gRt5G9 言ってる事が横文字だらけでちんぷんかんぷんです
もう少しわかりやすく記述してください
もう少しわかりやすく記述してください
350名前は開発中のものです。
2014/11/21(金) 22:02:34.38ID:/Uy/obEw 失礼しました。
要するに通信周りで苦労しているのですが、一向に実装できないので、通信周りをカバーしたフレームワークがないか情報があれば教えて欲しいということです。
要するに通信周りで苦労しているのですが、一向に実装できないので、通信周りをカバーしたフレームワークがないか情報があれば教えて欲しいということです。
351名前は開発中のものです。
2014/11/21(金) 22:58:54.97ID:wDfQVO6/ 一気に飛躍しすぎ
まずはチャットを作ってみては?
FWについては知らん
少なくとも有名なものは無い
まずはチャットを作ってみては?
FWについては知らん
少なくとも有名なものは無い
352名前は開発中のものです。
2014/11/22(土) 00:18:10.87ID:1kMHRznH いくつかのサンプルを参考にチャットは作成しましたが、TCP通信のストリームを用いての文字列データだけのやり取りに留まっています。
画像を含めたインスタンスをサーバクライアント間でやり取りをしようとObjectOutput(input)Streamを利用するとブロッキングが発生してしまい、
別スレッドで起動する必要が出てくる上、今のところ画像データのやり取りはできていません。
UDP通信の送受信も試しましたが、今度は文字列データすらやり取りができなくなりました。
ノンブロッキング方式となるjava.nioパッケージもいくつかサンプルに沿って作ってみましたが、こちらもうまく行くのは文字列データのみで、
インスタンスの送受信はできていない上、何回か繰り返し処理をしているうちに何故かブロッキングが発生しないはずのメソッドでブロッキングされます。
使い方がよくないのは分かるのですがコードも煩雑になり手に負えなくなってきたので、通信周りの処理はオンラインゲームでは極当たり前のものだし、
フレームワークで存在しているかもしれないと思い探したものの見つからず、何か情報がないかと質問した次第です。
少なくとも有名どころにはないというのは大変残念。
Webアプリケーションのフレームワークならいくつもあるのに、通信あたりのとりわけマルチキャストに対応している物となると情報がない。
画像を含めたインスタンスをサーバクライアント間でやり取りをしようとObjectOutput(input)Streamを利用するとブロッキングが発生してしまい、
別スレッドで起動する必要が出てくる上、今のところ画像データのやり取りはできていません。
UDP通信の送受信も試しましたが、今度は文字列データすらやり取りができなくなりました。
ノンブロッキング方式となるjava.nioパッケージもいくつかサンプルに沿って作ってみましたが、こちらもうまく行くのは文字列データのみで、
インスタンスの送受信はできていない上、何回か繰り返し処理をしているうちに何故かブロッキングが発生しないはずのメソッドでブロッキングされます。
使い方がよくないのは分かるのですがコードも煩雑になり手に負えなくなってきたので、通信周りの処理はオンラインゲームでは極当たり前のものだし、
フレームワークで存在しているかもしれないと思い探したものの見つからず、何か情報がないかと質問した次第です。
少なくとも有名どころにはないというのは大変残念。
Webアプリケーションのフレームワークならいくつもあるのに、通信あたりのとりわけマルチキャストに対応している物となると情報がない。
353名前は開発中のものです。
2014/11/22(土) 05:43:04.14ID:YsbIPryz 自分も同じような段階なので非常に興味があります
僕の場合は通信にはプロトコルを定めて4バイト以下でやり取りしているので、オブジェクトの送受信は今ちょっと調べただけですが……
ハッキリとは分かりませんが、ObjectOutputStream自体がブロッキングするioなんじゃないでしょうか?
調べてみたところ以下の実装が綺麗な気がします
http://stackoverflow.com/questions/5862971/java-readobject-with-nio
ByteArrayOutputStreamでラップしてデータの長さを調べて、さらにByteBufferでラップして先頭に長さを埋め込んでおきます
受け取る側ではまず先頭の長さ情報(4バイト)を読み込みます
続いて長さ分確保したbufferに本体を読み込み、あとは逆順にObjectInputStreamに落とし込みます
僕も簡単なフレームワークがあったらなあとも思いますが、お互い頑張りましょう
僕の場合は通信にはプロトコルを定めて4バイト以下でやり取りしているので、オブジェクトの送受信は今ちょっと調べただけですが……
ハッキリとは分かりませんが、ObjectOutputStream自体がブロッキングするioなんじゃないでしょうか?
調べてみたところ以下の実装が綺麗な気がします
http://stackoverflow.com/questions/5862971/java-readobject-with-nio
ByteArrayOutputStreamでラップしてデータの長さを調べて、さらにByteBufferでラップして先頭に長さを埋め込んでおきます
受け取る側ではまず先頭の長さ情報(4バイト)を読み込みます
続いて長さ分確保したbufferに本体を読み込み、あとは逆順にObjectInputStreamに落とし込みます
僕も簡単なフレームワークがあったらなあとも思いますが、お互い頑張りましょう
354名前は開発中のものです。
2014/11/22(土) 13:31:16.69ID:fUGuXT+m 通信用スレッド作ってブロッキングでやれば簡単だと思うよ
ノンブロッキング化なんて後からやればいいじゃない
ノンブロッキング化なんて後からやればいいじゃない
355名前は開発中のものです。
2014/11/22(土) 16:49:26.43ID:GtITkLZ+ TCPではなくUDPで通信するのは俺もわからんし興味はある
データを受け取った側が一々受け取り成功したことを発信側に返信していたら
遅いTCPと実質同じになってしまうとか、注意点ふぁありそうな気がするけど
この辺は言語問わず情報がなさすぎて困る
データを受け取った側が一々受け取り成功したことを発信側に返信していたら
遅いTCPと実質同じになってしまうとか、注意点ふぁありそうな気がするけど
この辺は言語問わず情報がなさすぎて困る
356名前は開発中のものです。
2014/11/22(土) 23:47:22.91ID:fUGuXT+m UDPの主な問題点は、パケットの到着が保証されない(途中で消えることがある)、順序が保証されない(前後が入れ替わることがある)の2点
どうにかこれに対処しないといけないが、だからといってこれを完全に保証するのなら、素直にTCPを使った方がいいわけで、
UDPを使うなら、パケットが消えたり入れ替わったりすることを前提に、最初からそれを受け入れる方針で設計しないと意味が薄い
一部重要な情報だけ到着確認や再送信など手厚い保証を作り込むという選択肢もあるが、TCPと併用し情報の重要度によって送信し分けるという選択肢もある
俺が作ったときは、通常はTCPを使い、性能的な懸念のある一部の情報だけUDPで送るようにした
念のため、UDPがちゃんと届くか送信テストを行い(返事はTCPで貰う)、だめだったときは全部TCPで動くようにした
特定のメッセージをUDPで送るかTCPで送るかはbooleanの引数1個で簡単に変更できた
どうにかこれに対処しないといけないが、だからといってこれを完全に保証するのなら、素直にTCPを使った方がいいわけで、
UDPを使うなら、パケットが消えたり入れ替わったりすることを前提に、最初からそれを受け入れる方針で設計しないと意味が薄い
一部重要な情報だけ到着確認や再送信など手厚い保証を作り込むという選択肢もあるが、TCPと併用し情報の重要度によって送信し分けるという選択肢もある
俺が作ったときは、通常はTCPを使い、性能的な懸念のある一部の情報だけUDPで送るようにした
念のため、UDPがちゃんと届くか送信テストを行い(返事はTCPで貰う)、だめだったときは全部TCPで動くようにした
特定のメッセージをUDPで送るかTCPで送るかはbooleanの引数1個で簡単に変更できた
357名前は開発中のものです。
2014/11/23(日) 00:38:44.67ID:UddT0/lz >>353
提示されたソースを参照しながら色々と試しております。
とりあえずシンプルチャットの文字列のマルチキャストはできましたが、インスタンスのやり取りはまだうまく行っていません。
ObjectOutputStreamについては仰るとおり、ブロッキングが発生するストリームです。
ブロッキングを回避するためにマルチスレッドにして、受信したメッセージとインスタンスをプールして一元的に処理しようとして・・・
などとやっているうちにデッドロックが発生して頭を抱えておりました。
Webアプリケーションフレームワークでもそうであるように、通信部分はほぼ共通の処理だろうし、
C/S型MOGの実装とて大きな違いがあるとは思えないのですが、ないものですかね・・・
一応、Jogreとか言うゲームエンジンがC/S型を想定したものらしいのですが、使い方がまるで判らず
オープンソースだからせめてどこか参考にできないかと見てみましたが私の頭では理解できませんでした。
>>354
ゲームの根幹となるシステムはサーバ側で実装しようと考えており、その際にクライアントの通信待ちでブロックされてしまうと処理が進まなくなってしまうので、初めからノンブロッキングで行くつもりです。
前述の通りマルチスレッド化の段階でうまく行かなくなってしまいました。
>>355
通信方式には特にこだわっているわけではないのですが、今後内輪で一人複数キャラ起動で20〜100程の同時接続を想定しており、
そうなると今後はUDPでないとまずいのかな、などと漠然と考えておりますが、実装が楽なはずのTCPですら躓いている状態です。
提示されたソースを参照しながら色々と試しております。
とりあえずシンプルチャットの文字列のマルチキャストはできましたが、インスタンスのやり取りはまだうまく行っていません。
ObjectOutputStreamについては仰るとおり、ブロッキングが発生するストリームです。
ブロッキングを回避するためにマルチスレッドにして、受信したメッセージとインスタンスをプールして一元的に処理しようとして・・・
などとやっているうちにデッドロックが発生して頭を抱えておりました。
Webアプリケーションフレームワークでもそうであるように、通信部分はほぼ共通の処理だろうし、
C/S型MOGの実装とて大きな違いがあるとは思えないのですが、ないものですかね・・・
一応、Jogreとか言うゲームエンジンがC/S型を想定したものらしいのですが、使い方がまるで判らず
オープンソースだからせめてどこか参考にできないかと見てみましたが私の頭では理解できませんでした。
>>354
ゲームの根幹となるシステムはサーバ側で実装しようと考えており、その際にクライアントの通信待ちでブロックされてしまうと処理が進まなくなってしまうので、初めからノンブロッキングで行くつもりです。
前述の通りマルチスレッド化の段階でうまく行かなくなってしまいました。
>>355
通信方式には特にこだわっているわけではないのですが、今後内輪で一人複数キャラ起動で20〜100程の同時接続を想定しており、
そうなると今後はUDPでないとまずいのかな、などと漠然と考えておりますが、実装が楽なはずのTCPですら躓いている状態です。
358名前は開発中のものです。
2014/11/23(日) 02:19:06.05ID:Y/h3FQGO ブロッキングの場合は通信相手1人ごとに受信用スレッド1個と送信用スレッド1個を作って、それに通信処理を全部まかせるのがいい
相手側に何があってもブロックするのはそこだけで済む
何か送信したいときは、その相手用の送信キューに情報を詰め込んで、送信スレッドに送信してもらう
受信の方はそのまま受信スレッド上で処理してもいいが、スレッド間の同期が心配なら、受信した情報をメインスレッドの処理キューに積んでメインスレッドに処理してもらってもいい
もちろん各キュー自身は同期しなければならないが、LinkedBlockingQueueでも使っとけば心配なかろう
欠点は通信相手が増えすぎるとスレッドが増えすぎることだが、まぁ100くらいは大丈夫じゃない?
ノンブロッキングの場合は一箇所で全ソケットの送受信の面倒を見ることになる
基本的には Selector#select を回し続け、個々のソケットがそれぞれ受信可能になっていれば受信し送信可能になっていれば送信するわけだが、
受信したいときに受信したい量が受信できるとは限らないし、送信したいときに送信したい量が送信できるとも限らないので、
ブロックさせずに1スレッドですべてを回すためには送受信共にバッファ管理が必要になる
相手に何か送信したいときは、その相手用の送信バッファにデータを詰め込んでselectのループに戻り、
ソケットが送信可能な状態になったときに送信できる量ずつ送信する(そしてまたselectのループに戻る)
受信の方も、必要な量のデータが受信バッファに溜まるまでselectのループを回しておき、
じゅうぶん溜まったら受信バッファから必要量のデータを取り出して処理する感じ?
通信相手が増えてもスレッド数を抑えられるのが利点だが、実装は面倒い
相手側に何があってもブロックするのはそこだけで済む
何か送信したいときは、その相手用の送信キューに情報を詰め込んで、送信スレッドに送信してもらう
受信の方はそのまま受信スレッド上で処理してもいいが、スレッド間の同期が心配なら、受信した情報をメインスレッドの処理キューに積んでメインスレッドに処理してもらってもいい
もちろん各キュー自身は同期しなければならないが、LinkedBlockingQueueでも使っとけば心配なかろう
欠点は通信相手が増えすぎるとスレッドが増えすぎることだが、まぁ100くらいは大丈夫じゃない?
ノンブロッキングの場合は一箇所で全ソケットの送受信の面倒を見ることになる
基本的には Selector#select を回し続け、個々のソケットがそれぞれ受信可能になっていれば受信し送信可能になっていれば送信するわけだが、
受信したいときに受信したい量が受信できるとは限らないし、送信したいときに送信したい量が送信できるとも限らないので、
ブロックさせずに1スレッドですべてを回すためには送受信共にバッファ管理が必要になる
相手に何か送信したいときは、その相手用の送信バッファにデータを詰め込んでselectのループに戻り、
ソケットが送信可能な状態になったときに送信できる量ずつ送信する(そしてまたselectのループに戻る)
受信の方も、必要な量のデータが受信バッファに溜まるまでselectのループを回しておき、
じゅうぶん溜まったら受信バッファから必要量のデータを取り出して処理する感じ?
通信相手が増えてもスレッド数を抑えられるのが利点だが、実装は面倒い
359名前は開発中のものです。
2014/11/23(日) 08:51:36.48ID:2oDwsjHs Java信者がまだ生き残っていて嬉しい
360348
2014/11/24(月) 01:33:12.16ID:sj/Z1D1w 今日一日がんばってはみたがやはり実装できず。
シンプルチャットは動いたものの、画像を含めたバイナリデータのやり取りはできておらず、
何故か353で提示していただいたコード部分でOutOfMemoryErrorが発生する始末。
使わなくなった瞬間に明示的にnullを入れてみたりはしたものの、全く解決せずで、
相変わらず手に負えない感じがあります。
今度はブロッキングのマルチスレッドを試してみようとは思いますが、以前この方法を取った際、
キューの中に受け取ったメッセージを格納しておき、メインスレッドで順番に処理する、
というようなコードを書いてみたところ、キューへのアクセスで何故かデッドロックが発生して
動作しなくなってしまったこともあり、うまく行くようにできるか心配です。
また、なんだか最終的に数千人規模の運営にも耐えられるようなもの(MMOみたいなものか)
みたいな要望(若干語弊がありますが)もあり、スレッドの数とか心配ですが。
シンプルチャットは動いたものの、画像を含めたバイナリデータのやり取りはできておらず、
何故か353で提示していただいたコード部分でOutOfMemoryErrorが発生する始末。
使わなくなった瞬間に明示的にnullを入れてみたりはしたものの、全く解決せずで、
相変わらず手に負えない感じがあります。
今度はブロッキングのマルチスレッドを試してみようとは思いますが、以前この方法を取った際、
キューの中に受け取ったメッセージを格納しておき、メインスレッドで順番に処理する、
というようなコードを書いてみたところ、キューへのアクセスで何故かデッドロックが発生して
動作しなくなってしまったこともあり、うまく行くようにできるか心配です。
また、なんだか最終的に数千人規模の運営にも耐えられるようなもの(MMOみたいなものか)
みたいな要望(若干語弊がありますが)もあり、スレッドの数とか心配ですが。
361名前は開発中のものです。
2014/11/24(月) 12:33:21.54ID:qbg8eFAd どうしても上手くいかないならソース晒せば添削しよう
そのときはzipにまとめて適当なところにupしてくれ
そのときはzipにまとめて適当なところにupしてくれ
362348
2014/11/24(月) 23:57:10.52ID:sj/Z1D1w ブロッキングのマルチスレッドを試していた所、
今度はループ上で2度目のObjectInputStraemのreadObjectメソッドで
StreamCorruptedException: invalid type code: ACが発生し、
シンプルチャットすら動作しなくなりました。
ObjectIOストリームを使うこと自体が間違いなのかもしれませんが、
今後サーバ側のDBに保存してある画像ファイル等をクライアント側に送信して表示することを考えると、
他にどうすべきかが判りませんが。
一応ソースを挙げてみました。
http://fileup.jp/up/4753.zip.htm
今度はループ上で2度目のObjectInputStraemのreadObjectメソッドで
StreamCorruptedException: invalid type code: ACが発生し、
シンプルチャットすら動作しなくなりました。
ObjectIOストリームを使うこと自体が間違いなのかもしれませんが、
今後サーバ側のDBに保存してある画像ファイル等をクライアント側に送信して表示することを考えると、
他にどうすべきかが判りませんが。
一応ソースを挙げてみました。
http://fileup.jp/up/4753.zip.htm
363名前は開発中のものです。
2014/11/25(火) 01:54:43.35ID:5bX3A50tお世話になります。
私、責任者の加茂と申します。以後、宜しくお願い致します。
http://www.apamanshop.com/membersite/27009206/images/kamo.jpg
浪速建設様の見解と致しましては、メールによる対応に関しましては
受付しないということで、当初より返信を行っていないようで、今後につい
てもメールや書面での対応は致しかねるというお答えでした。
http://www.o-naniwa.com/index.html 事務員 東条 南野
http://www.o-naniwa.com/company/
このように現在まで6通のメールを送られたとのことですが、結果一度も
返信がないとう状況になっています。
http://www.apamanshop-hd.co.jp/
http://www.data-max.co.jp/2010/10/01/post_11983.html
私どものほうでも現在までのメール履歴は随時削除を致しております
ので実際に11通のメールを頂戴しているか不明なところであります。
・ハンガー・ゲーム http://s-at-e.net/scurl/TheHungerGames-Aircraft.html
・アバター http://s-at-e.net/scurl/Avatar-Shuttle.html
・艦これ http://s-at-e.net/scurl/KanColle.html
・BRS http://s-at-e.net/scurl/BRS.html
・ベヨネッタ http://s-at-e.net/scurl/BAYONETTA.html
・風ノ旅ビト http://s-at-e.net/scurl/JOURNEY.html
http://s-at-e.net/scurl/kabetokyojinto.html
・2012 http://s-at-e.net/scurl/2012.html
大阪府八尾市上之島町南 4-11 クリスタル通り2番館203
に入居の引きこもりニートから長期にわたる執拗な嫌がらせを受けています。
この入居者かその家族、親類などについてご存知の方はお知らせ下さい。
hnps203@gmail.com
364名前は開発中のものです。
2014/11/25(火) 03:27:39.50ID:elCn5ht8 マルチスレッドにだけは手を出すな、というのが定説だよ
なぜならタイミングによって、
デッドロックになったりならなかったりして、
バグが再現できず、まともにテストができない
結局、バグが出ても、気のせいにしてリリースするので、
本番でバグが出て、どうにもならない
マルチスレッドはスレッド間で、リソースを共有するから、
共有リソースを使うすべての関数で、排他処理が必要
それでも資源A→B、B→Aの順で、
ロックするスレッドがあると、デッドロックが生じるため、
資源をロックする順番にも、矛盾があってはならない
なぜならタイミングによって、
デッドロックになったりならなかったりして、
バグが再現できず、まともにテストができない
結局、バグが出ても、気のせいにしてリリースするので、
本番でバグが出て、どうにもならない
マルチスレッドはスレッド間で、リソースを共有するから、
共有リソースを使うすべての関数で、排他処理が必要
それでも資源A→B、B→Aの順で、
ロックするスレッドがあると、デッドロックが生じるため、
資源をロックする順番にも、矛盾があってはならない
365名前は開発中のものです。
2014/11/25(火) 08:05:46.97ID:6uceNdu9 コンカレント・パッケージを使ったら?
366名前は開発中のものです。
2014/11/25(火) 08:11:55.29ID:mNAq4UK+ ソース見た。
エラーの原因は、サーバ側では送信のたびにObjectOutputStreamを作り直してるのに、クライアント側では同じObjectInputStreamを使い続けていることだ。
作り直すなら両方とも作り直す(この場合resetは要らない)、使い続けるなら両方とも使い続ける。混ぜてはいけない。
あと、現時点では大丈夫かもしれないが、潜在的な問題がある。
受信がブロックするのは当然なので別スレッドにするのは自然だけど、実は送信もブロックするから別スレッドにした方がいいんだ。
TCPには一定サイズのバッファがあって、相手側が読み出してくれなければ、バッファが一杯になった時点でそれ以上書き込めなくなり、ブロックする。
相手側が読み出してるつもりでも、例えば何かネットワークのトラブルでデータが届かなくなれば、同じようになる。
サーバ側で synchronized (this.recvMessageQueue) { } の中で sendClients 呼んでその中で writeObject してるけど、こういうロックを握ったままブロックする可能性があるのは非常によくない。
受信キューを握ったままブロックすると受信スレッドがみんな動けなくなるし、そうなるといずれクライアントの送信側もバッファが一杯になってみんな止まってしまう。
あとは、 clientSocketList が複数のスレッドから読み書きされてるから synchronized するべき。
いちいち synchronized するのが面倒なら元からスレッドセーフな CopyOnWriteArrayList を使うという手もある。
キューも LinkedBlockingQueue とか使えば synchronized する必要なくなる。 まぁこのへんはどっちでもいいけど。
ObjectIOストリームは、性能面では劣るけど、開発は楽だから、使いたければそれでいいんじゃない。
他の方法といっても、ファイルと一緒で、フォーマットを決めて読み書きするだけだよ。
いわゆるType-Length-Value的なやり方が普通だと思うけど、例えば文字列化して行単位で送るとか、XML形式で送るという方法もなくはない。
こういうのは性能やらメンテナンス性やら開発速度やらのトレードオフだから、好みの方法を使えばいいと思うよ。
エラーの原因は、サーバ側では送信のたびにObjectOutputStreamを作り直してるのに、クライアント側では同じObjectInputStreamを使い続けていることだ。
作り直すなら両方とも作り直す(この場合resetは要らない)、使い続けるなら両方とも使い続ける。混ぜてはいけない。
あと、現時点では大丈夫かもしれないが、潜在的な問題がある。
受信がブロックするのは当然なので別スレッドにするのは自然だけど、実は送信もブロックするから別スレッドにした方がいいんだ。
TCPには一定サイズのバッファがあって、相手側が読み出してくれなければ、バッファが一杯になった時点でそれ以上書き込めなくなり、ブロックする。
相手側が読み出してるつもりでも、例えば何かネットワークのトラブルでデータが届かなくなれば、同じようになる。
サーバ側で synchronized (this.recvMessageQueue) { } の中で sendClients 呼んでその中で writeObject してるけど、こういうロックを握ったままブロックする可能性があるのは非常によくない。
受信キューを握ったままブロックすると受信スレッドがみんな動けなくなるし、そうなるといずれクライアントの送信側もバッファが一杯になってみんな止まってしまう。
あとは、 clientSocketList が複数のスレッドから読み書きされてるから synchronized するべき。
いちいち synchronized するのが面倒なら元からスレッドセーフな CopyOnWriteArrayList を使うという手もある。
キューも LinkedBlockingQueue とか使えば synchronized する必要なくなる。 まぁこのへんはどっちでもいいけど。
ObjectIOストリームは、性能面では劣るけど、開発は楽だから、使いたければそれでいいんじゃない。
他の方法といっても、ファイルと一緒で、フォーマットを決めて読み書きするだけだよ。
いわゆるType-Length-Value的なやり方が普通だと思うけど、例えば文字列化して行単位で送るとか、XML形式で送るという方法もなくはない。
こういうのは性能やらメンテナンス性やら開発速度やらのトレードオフだから、好みの方法を使えばいいと思うよ。
367348
2014/11/26(水) 18:49:10.33ID:yQ5yK0Ih >>366
添削ありがとうございます。とりあえず基本的な通信周りは動くようになりました。
エラーの原因は結局の所Streamの基本的な利用方法を理解していなかったことであり大変お恥ずかしい限りです。
受信以外に送信もスレッド化しなくてはならないとなると、1クライアント接続毎に2スレッド起動することになるのですね。
100の接続があれば200、1000の接続があれば2000も起動するということで、今後仕様に耐えられるか心配ではあります。
364の方が仰るようなバグの内包は自分はやらかしそうなので。
こういったミスがなくなるよう、通信周りで信頼性の高い実装済みのフレームワークを利用したいと切に願います。
ともあれ、ようやく動くようになりました。ありがとうございました。
添削ありがとうございます。とりあえず基本的な通信周りは動くようになりました。
エラーの原因は結局の所Streamの基本的な利用方法を理解していなかったことであり大変お恥ずかしい限りです。
受信以外に送信もスレッド化しなくてはならないとなると、1クライアント接続毎に2スレッド起動することになるのですね。
100の接続があれば200、1000の接続があれば2000も起動するということで、今後仕様に耐えられるか心配ではあります。
364の方が仰るようなバグの内包は自分はやらかしそうなので。
こういったミスがなくなるよう、通信周りで信頼性の高い実装済みのフレームワークを利用したいと切に願います。
ともあれ、ようやく動くようになりました。ありがとうございました。
368名前は開発中のものです。
2014/11/26(水) 20:44:59.58ID:EUSw3GAJ 心配なら簡単なテストプログラムを作って実際に高い負荷をかけてみるのもひとつの方法
大量のソケットを作って自分のサーバに接続しまくるとか
何か簡単なメッセージでもやり取りすればより実際の状況に近い
もう1台PCを用意してネットワーク越しに実験できればもっと良い
仮にフレームワークがあったとしても十中八九マルチスレッドだろうからその種の心配は無くならないんじゃないかな
このマルチコア時代に1コアしか活用できないとか汎用のフレームワークとしてはありえないだろう
何かプログラマの負担を多少なりとも軽くする仕組みはあるかもしれんけどね
大量のソケットを作って自分のサーバに接続しまくるとか
何か簡単なメッセージでもやり取りすればより実際の状況に近い
もう1台PCを用意してネットワーク越しに実験できればもっと良い
仮にフレームワークがあったとしても十中八九マルチスレッドだろうからその種の心配は無くならないんじゃないかな
このマルチコア時代に1コアしか活用できないとか汎用のフレームワークとしてはありえないだろう
何かプログラマの負担を多少なりとも軽くする仕組みはあるかもしれんけどね
369名前は開発中のものです。
2014/11/29(土) 01:20:26.07ID:X/DpHkls 教えてJava仙人!
370名前は開発中のものです。
2014/11/29(土) 22:21:48.97ID:tbWotyUc こちらで聞いて良いものかどうか判りませんが、一応Javaも絡んでいるので質問。
プレイヤーキャラクターが装備を変えた時、見た目も変わる2Dの作品を作っています。
パーツごとに見た目が変わるため、頭部、胴体、下半身、右手、左手等に
パーツを分け、それぞれでアニメーションのスプライトを製作しています。
しかし、全体像が判らないとパーツの動きがわかりにくくて製作が大変面倒な上、
PGに起した時に正面を向いている場合には髪→顔の順に表示するが、
後ろを向いた場合には顔→髪のように順番を変えて表示をする必要があり、
全体像になったときにパーツの表示位置も調整しなければならず、
難しくはないが大変手間がかかって製作が難航しています。
複数のパーツの画像を組み合わせて全体像およびアニメーションを表示しつつ画像編集ができ、
且つ保存時にアニメーションのソースコード(位置情報や表示順序・java、できればLibGDXフレームワーク準拠の)
に自動的に起すようなツールは何かないでしょうか。
Unityに似たようなツール?があるようですが、言語がJavaではないので手を出していません。
Googleでも「画像編集 パーツ アニメーション 組み合わせ」などで探していますが、
望むような情報が得られていません。
プレイヤーキャラクターが装備を変えた時、見た目も変わる2Dの作品を作っています。
パーツごとに見た目が変わるため、頭部、胴体、下半身、右手、左手等に
パーツを分け、それぞれでアニメーションのスプライトを製作しています。
しかし、全体像が判らないとパーツの動きがわかりにくくて製作が大変面倒な上、
PGに起した時に正面を向いている場合には髪→顔の順に表示するが、
後ろを向いた場合には顔→髪のように順番を変えて表示をする必要があり、
全体像になったときにパーツの表示位置も調整しなければならず、
難しくはないが大変手間がかかって製作が難航しています。
複数のパーツの画像を組み合わせて全体像およびアニメーションを表示しつつ画像編集ができ、
且つ保存時にアニメーションのソースコード(位置情報や表示順序・java、できればLibGDXフレームワーク準拠の)
に自動的に起すようなツールは何かないでしょうか。
Unityに似たようなツール?があるようですが、言語がJavaではないので手を出していません。
Googleでも「画像編集 パーツ アニメーション 組み合わせ」などで探していますが、
望むような情報が得られていません。
371名前は開発中のものです。
2014/11/29(土) 22:32:26.42ID:bnooxQNY 一人称視点にしてプレイヤーキャラを表示しない
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】トランプ大統領、中国の習近平国家主席を「国賓」として招待することに ★3 [ニョキニョキ★]
- 【速報】トランプ大統領、中国の習近平国家主席を「国賓」として招待することに ★4 [ニョキニョキ★]
- 日本と中国を結ぶ12航空路線で全便欠航 中国人に最も人気の海外旅行先は日本から韓国に ★2 [ぐれ★]
- 【東京・足立の車暴走】赤信号無視か 危険運転致死傷疑いも視野に捜査 逮捕された職業不詳の男性(37)は精神疾患で通院歴も ★3 [ぐれ★]
- 【テレビ】鈴木福&あのちゃんW主演 テレ東で押見修造氏の漫画『惡の華』実写ドラマ化決定! 累計325万部を突破した伝説的漫画 [冬月記者★]
- 防衛費増額「賛成」62・8% 「反対」32・2%を大きく上回る 賛成「18~29歳で8割」世代差あらわ 産経FNN合同世論調査 ★3 [尺アジ★]
- 【実況】博衣こよりのえちえち朝こよ🧪★2
- 【実況】博衣こよりのえちえち朝こよ🧪
- 【悲報】小野田紀美さん、宇宙人みたいな服を着てしまう…また、そのことを突っ込まれブチ切れ中www [856698234]
- 【悲報】セブンイレブンの納豆巻きの値段、限界突破wwwwwwwwwwwwwwwwww [977261419]
- 🏡
- お前らっていつもここにいるよな
