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

■ このスレッドは過去ログ倉庫に格納されています
1名前は開発中のものです。
垢版 |
2012/12/27(木) 16:04:18.62ID:rl+qGRHn
スレタイはアプレットとの対比的な意味と考えてください。
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
2012/12/27(木) 19:55:38.03ID:v30jHeKj
アプレットと切り離す意味が分からん。モバイル等もあるだろうに。
Java自体は好きだけど、こういう排他的な方向性は気に食わん。クソが
2012/12/28(金) 00:13:36.77ID:6C5ZFHM5
スマホは知らんけどガラケー向けはむしろスタンドアロンなんじゃないか。
ガラケー向けに一杯出てるだろ。
2012/12/29(土) 00:34:25.41ID:bpd6cCoW
アプレットだろうがWebStartだろうが
クライアントがJREインストールさせる壁があるのと
アプレットの起動時にブラウザが固まるのがうざくて

どうせ敷居が高いならスタンドアロンで作るほうがいいかなと思ったり
2012/12/29(土) 00:51:13.88ID:bpd6cCoW
Java愛好家の仲間が欲しい
OpenGL2DならSlickライブラリお勧めだよ
2012/12/29(土) 02:50:09.55ID:Z41Rv9on
俺はアプレットと切り離したほうがいいと思う
アプレットは目的が違って来るよね(ウェブで気軽に触って欲しいみたいな)
やはりソースコードもそういう方向に行っちゃうし、何せネットにあるアプレットのソースに酷いのが多いのは有名(古いのが多いのも理由)

学び始めた子がここに嵌まっちゃってる感がみてられん
「排他的」というのは被害妄想すぎるし、Swingのそれをわかってくると面白くなってくるというもの
2012/12/29(土) 09:51:49.28ID:bpd6cCoW
アプレットもSwingじゃん。的外れだと思うぞ。
2012/12/29(土) 12:09:44.18ID:NMQ+6QlP
JApplet使えってことだろ?
アプレットに限らずだが未だにJFrame使わずFrame使ってたりJApplet使わずApplet使ってるのは不勉強だと思われても仕方が無い
人気無くなったのか知らんがJavaって2004年5年あたりで時が止まってる気さえする
とかいう俺もjre1.6から離れられないわけだが
2012/12/29(土) 22:17:51.01ID:bpd6cCoW
JDKは1.7だとjavadocが英語しか使えなかった覚えがあって、まだ1.6使ってますw
JREは自動更新したりアプレットとか開くと更新を要求されるから1.7になってる。
swingではなくawtを使うのは1.6後期までOpenGLと相性悪かったからだろうね。

swingコンポーネント使うとOpenGLの速度潰すからボタンとか自作しろって
slickフォーラムに書いてあったが、もうOpenGL捨ててswingだけでなんか作ろうと思う。
2012/12/29(土) 22:26:18.14ID:bpd6cCoW
webアフィ広告をしこんだスタンドアロンゲームを作ってみるつもりだ
(ちなみに俺のホームページは1年間あたり500円稼ぐのがやっとw)

何かいいゲームネタをもってるやついたら、俺と組もうぜ! m6(・∀・)ビシッ!
2012/12/29(土) 22:53:17.04ID:M5vPsEyE
チーム・シンコロールのJava使いですチャオ!
同じJava使いとして応援してます

組むのはプログラマがかぶるかなという気もしますが
ゲームネタの雑談するのは乗り気です
2012/12/30(日) 00:51:47.07ID:Z7980Zcb
そうですか。

今のところ、とりあえず凸画像だけで作るRTSとか、ローグとか、
そんなゲームがいいかなと思ってます。
2012/12/30(日) 01:23:33.01ID:UmoPsOLw
今って描画はレンダーメソッド作ってマルチバッファリングするのかな?
そこで質問なんですが、ダブルにするかトリプルにするかってどうやって決めればいいのでしょうか
2012/12/30(日) 12:05:17.90ID:Z7980Zcb
子供はあんまり相手したくないかなっと
2012/12/30(日) 12:53:40.81ID:Z7980Zcb
XULRunner+Swingで行こうと思ったが、JavaFX2.0でwebkitが使えるんだね
まだ情報量の少ないFXの調べ物でつまづくとまずいから、swingでいくことにしよう
2012/12/30(日) 13:47:50.21ID:J6TBE/fQ
へえ〜トリプルバッファリングていうのがあるんだ
自分はいつもデフォのダブルバッファリングしか使ってないので何とも言えないが

欠点: プレイヤー入力から画面出力までに1フレーム遅延が発生する
利点: 処理落ち時に1フレーム分余裕がある

ググったらこんな感じでした
2012/12/30(日) 13:55:12.28ID:J6TBE/fQ
>>15
XULRunner とは意外な組み合わせ
と思ったらいまではJavaXPCOMで呼びだせるのか
時代は進んでるなあ
2012/12/30(日) 15:14:18.96ID:Z7980Zcb
>>17
XULRunnerでweb広告を貼るわけだが、
同根するネイティブ(dll, so)が100MBくらいになる。
これをwindows限定ならば20MBぐらいで済む。

どうせゲームクライアントはwindowsだから
windows以外はバッサリ切り捨てる。
2012/12/30(日) 15:29:19.54ID:Z7980Zcb
アクションゲームは重くなったら処理落ちさせた方がいいだろう。
追尾ミサイルが100発ぐらい飛んできてスローモーションの中避けるのは
むしろ盛り上がる。画面が止まったまま当たり判定くらったら嫌なはずだ。

エフェクトなどが重要ではないリアルタイムSLGなんかでは
画面の更新を飛ばしてでもとにかくロジックを更新せねばいかん。

前者はダブルバッファ、後者はトリプルバッファが向いてそうだが、
迷うぐらいならとりあえずダブルバッファを選んだほうが無難だと思う。
2012/12/30(日) 20:41:02.66ID:Z7980Zcb
休みなのに人いないな。流石アローンスレだぜ。
2012/12/30(日) 21:24:35.59ID:J6TBE/fQ
ところで凸画像でなんですか?
ググるとデコレーションメールの画像? ゲームに使えるん?
2012/12/30(日) 21:48:58.76ID:Z7980Zcb
そのまんま凸のキャラチップだよ。
八方向のキャラグラ素材作ったら大変だろ?

だから例えばマップ上では簡素なアイコンとして凸絵を表示して、
マウスで駒を選択すると右上にキャラ名と正面向いたキャラ絵を表示するんだ。
それなら前向きの絵だけ用意すればゲームが作れる。

ttp://uploda.cc/img/img50e0368219f69.png
2012/12/30(日) 22:36:08.72ID:J6TBE/fQ
ナルホド!
2012/12/31(月) 05:57:14.62ID:mCWlGEJ8
こいつぁ臭い
2012/12/31(月) 13:37:17.72ID:SbWtF6xH
HSPでRPG作りたいんですが、正直難しいと思います。
でもやりたいんです!!僕はHSPでブロック崩し(アルカノイド)
ぐらいなら作ったことあります。
今のところ、オープニングまで作ったのですが、どなたか僕に
HSPの基礎からすべてを叩き込んでくれませんか??
お願いします。
2012/12/31(月) 21:30:22.02ID:8YamBsSw
スレチだ出て行け坊主
2013/01/01(火) 13:25:32.10ID:bDDsDYAo
ゲ製は不毛だな
2013/01/01(火) 18:00:17.04ID:5xGtRyAR
ゲームを製作すること自体が不毛?
2013/01/01(火) 18:49:44.03ID:bDDsDYAo
ゲームを製作すること自体が不毛だが、それ以前の問題だろ
ゲ製板でゲームを製作してるやつはまずいないしな

この板にいるのはせいぜいこの程度の初心者ちゃん↓
【Eclipse】Android ゲームApp作成【初心者】
ttp://toro.2ch.net/test/read.cgi/gamedev/1355211405/l50

vipゲ製スレもエロ画像貼って雑談してるだけ
2013/01/01(火) 19:07:34.78ID:qZjxFetx
実際本腰入れ始めると気軽にあげたくないし、逆に気軽にあげちゃう奴は教えを乞う立場なのに何故か自分に酔ってたり・・・
2013/01/01(火) 19:58:07.51ID:5xGtRyAR
ゲームを製作すること自体が不毛だと思ってるなら
ゲ製板にゲームを製作している人がいなくても無問題では?
不毛だと思うことをしていないのだからむしろ喜ばしいのでは?
2013/01/01(火) 20:09:24.28ID:bDDsDYAo
ソースや成果物は上げなくてもいいけど、出し惜しみせずに情報交換しないとね。
雑談の中ですら批判専門家や乞食くんばかりでまともなやつが出て行ったのがゲ製板だろう。
2013/01/01(火) 20:28:58.56ID:5xGtRyAR
情報提供したいけど大した情報持ってないんだよな
個人的には javax.sound.midi で midi を
プログラムレベルで叩けるのを知ったのが自分の最近のヒット。

音はショボ目かもしれんがデフォの gervill シンセを鳴らして遊んでる

自動作曲とか興味ある人いるかな
2013/01/01(火) 21:21:46.11ID:5xGtRyAR
switch 文しばらく使わなかったら文法忘れてた
2013/01/01(火) 21:33:36.72ID:qZjxFetx
javaのmidi関係は割と素敵だけどそっから何か作りたいとは思わんな
それならsteinbergからSDK落としてきて素直にVST開発するのがいいが、これまた同志がいない
ファミコンゲームしか作る気ないし音はNSF一択
2013/01/01(火) 22:05:29.06ID:bDDsDYAo
switch文はJDK1.7から文字列分岐ができるようになった。

String var = "hello";
switch(var){ case "fuck" : break; }
2013/01/01(火) 22:09:57.60ID:oH3eRw/7
>>36
知らなかった…
早速,自分のコードを書き直してみよう.
2013/01/03(木) 17:37:40.90ID:VLgNVUQ7
ちゃちぃのやウェブ系ならいいが、やはりswingはゲームに合わんなと思う
lwjglみたいなの使うか、SWTとawtを上手いこと使うのがいいね
ただswingはやはり気楽で便利だ
2013/01/03(木) 18:38:49.37ID:iQ8H96lh
自前でコンポーネント一揃いを作って持っておきたいけど
あんまり作り方を説明してる文書ってないよな

良く知らんけど、
Swingは描画の更新をイベントディスパッチのスレッドが行わないといけないから
OpenGL の速度が生かせないのかな?

はじめから OpenGL の描画に同期したコンポーネントとして設計すれば良さ気か
Swing を移植できたらすばらしいけど、根元の動作原理を良く分かってないからムズイ
2013/01/03(木) 18:46:17.66ID:/e5l6Kgw
Swingコンポーネントはメモリイメージで
VRAMに固定されてるテクスチャじゃないからじゃねーの?
2013/01/03(木) 19:08:59.04ID:iQ8H96lh
これマジか?
http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248211/

swingで974FPSも出てるぞ。

でも自分で試すと58FPSくらいしか出ないんだよな
どうやるんだろう
2013/01/03(木) 19:40:05.56ID:iQ8H96lh
eclipseで-Dsun.java2d.opengl=trueを設定するにはどうすればいいんだぜ?
2013/01/03(木) 19:48:31.67ID:HH4MlVNk
MinecraftはJava製だが
2013/01/03(木) 20:51:42.45ID:/e5l6Kgw
>自分で試すと60FPSくらいしか出ないんだよな
ディスプレイのリフレッシュレート調べろ。

>eclipseで-Dsun.java2d.opengl=trueを設定するにはどうすればいいんだぜ?
ググればすぐ分かる

こんなレベルで一個一個質問してたらゲームは遠いぞw
2013/01/03(木) 21:17:38.19ID:VLgNVUQ7
肝心のゲームよりゲームエンジン作るのが楽しい
スプライトシートに特化したソフトが仮完成した
マップエディタを改良していきたい
エディタ側からイベント追加、フリーハンドでの当たり判定生成ができるよう改良する予定
2013/01/03(木) 21:28:04.63ID:iQ8H96lh
設定はできていたけど、エラーが出ていたみたい

$ java -Dsun.java2d.opengl=true ...

java.lang.InternalError
  at jogamp.opengl.awt.Java2D.invokeWithOGLSharedContextCurrent(Java2D.java:345)
  at jogamp.opengl.awt.Java2D.initFBOShareContext(Java2D.java:578)
  at jogamp.opengl.awt.Java2D.getShareContext(Java2D.java:472)
  at javax.media.opengl.awt.GLJPanel.<clinit>(GLJPanel.java:193)
Caused by: java.lang.NullPointerException
  at jogamp.opengl.awt.AWTUtil.lockToolkit(AWTUtil.java:90)
  at jogamp.opengl.awt.Java2D.invokeWithOGLSharedContextCurrent(Java2D.java:336)
   ... 3 more
Exception in thread "main"

ぐぐたけどわからんちん
2013/01/03(木) 22:10:32.44ID:iQ8H96lh
できたー。800×600ピクセルの画面で100FPS超え
http://uploda.cc/img/img50e58004f1dfb.png
ディスプレイには同期していないので60以上でています

エラーを出していた部分をまるまるコメントアウト:

class GLPanel extends JPanel implements ... {
 ...
 static {
    // Force eager initialization of part of the Java2D class since
//    if (Java2D.isOGLPipelineActive() && Java2D.isFBOEnabled()) {
//     Java2D.getShareContext(GraphicsEnvironment.
//        getLocalGraphicsEnvironment().
//        getDefaultScreenDevice());
//  }
 }
}

こんなライブラリの内部をいじってコメントアウトしてしまって大丈夫かは知りません

というか、良く見たら背景のGradientPaintが表示できてない…

-Dsun.java2d.opengl=false の場合は
http://uploda.cc/img/img50e582e27afd5.png

やっぱコメントアウトしてる部分で初期化処理してるのかなあ
2013/01/03(木) 23:17:38.07ID:iQ8H96lh
う〜ん、出来たような

http://uploda.cc/img/img50e5927fb81f4.png

グラジエントが縞模様っぽいのは仕様か…?
2013/01/03(木) 23:40:29.62ID:sM7fMx9K
みんなは、Game Engineとか何使って作ってる?
有名所だと、
Ardor3D / cocos2d-x / Crystal Space / DimsensioneX Multiplayer Engine / EasyWay Game Engine
Env3D / Espresso3D / Golden T Game Engine / Irrlicht Engine / Jake2 / JGame
JMonkey Engine / Joge / JOGRE Engine / Nebula Device / Spring
だと思うんだけど
ref
( http://en.wikipedia.org/wiki/List_of_game_engines )
( http://content.gpwiki.org/index.php/Game_Engines )

やっぱし2dものなら、cocos2d-xとかで、頑張って3DするならArdor3Dまたは、Irrlicht Engineとかって感じ??
あと何かお勧めのライブラリとかある?
2013/01/03(木) 23:41:04.36ID:iQ8H96lh
でも垂直同期に合わせられないから旨くないかなあ

いい加減寝るか―
2013/01/04(金) 03:31:47.90ID:2zju+Vqy
>>49
スマホで作らない限りスマホにも使える系は面倒かなと。
あとSpringてDIのあれとは別物?
2013/01/04(金) 08:28:30.04ID:1BGKtbhX
何を目指すかによるとしか言えんな
最新ゲーム機の出力に近づけたいならゴージャスなもの用意すべきだし
俺は物理演算をどうするかを判断基準にしている
割とその辺の数学が好きだったり、ファミコン時代の試行錯誤が体感できるからあまりライブラリは使わない
というか個人製作でリアルさ求め始めると血迷うのが見えている
2013/01/04(金) 12:11:35.78ID:2zju+Vqy
素材も作りきれんからな
2013/01/04(金) 20:09:31.36ID:1BGKtbhX
初心者です

public Player(int x, int y, int id) {

}

みたいな感じで自機を用意しました
idによって違うイメージがdrawされるようにしています
これを利用して自機だけでなく敵も作りたいのですがどうやってPlayerクラスを利用するのかわかりません

Player jiki = new Player(200, 200, JIKI);
Player teki = new Player(400, 100, TEKI);

のように二つ用意し、それぞれdrawすると、後に書いたtekiしか表示されなくて困っています
Playerを配列にしてもみたのですが、drawすると後に書いた敵しか表示されなかったです

オブジェクトは二つ生成されてもswingの描画はそうはいかないということですかね
2013/01/04(金) 20:16:03.85ID:1BGKtbhX
ちゃんと書きます

public class Player {
public Player(int x, int y, int id) {

}
public void draw(Graphics g) {
g.drawImage(idの値によってイメージ切り替える処理);
}
}

これをJPanelを継承したクラスに自機と敵と言う形で二つインスタンス化したいです
JPanelを継承したクラスのコンストラクタでインスタンス化し、paintComponentでそれぞれdrawしています
2013/01/04(金) 21:18:20.32ID:DZkdsCuI
見た感じ大丈夫そうだけど。。

思いつくところとしては
・画像データはちゃんと読み込まれているか
・描画位置が完全に画面の範囲外になって見えていないのでは
・画像が重なって下になった画像が見えていないのでは
→ 試しに JPanel の paintComponent で直に drawImage してみる
→ Player の draw(g) で drawImage の代わりに fillRectangle とかしてみる(setColorを忘れずに)
2013/01/05(土) 18:37:55.23ID:7YyAinFW
MineCraftってあれJavaでつくってるんですよねJavaであんなクオリティ高いゲームつくれんだと思ったね
2013/01/06(日) 01:03:10.14ID:TLA3zZTm
>>57
出来と言語は関係ねーぜ。
2013/01/06(日) 02:44:54.43ID:3UF0yBuP
>>57
まぁ、考えかた次第だし何を求めているかだけどな。やっぱり、C++/Cで出来るのに、Javaでは出来ない事も多い。
それして、Windowsなら、似たように(場合によっては更に簡単に、)C#でもっと高クオリティのが作れる。
Javaは色々な機器で動かせるようにはできてるけど、ゲームでresponse早くして、高画質とかを求めると
それようにその機器向けにチューンナップが必要で、その点Microsoftはガチでやってるからそこにはまだまだ勝てない。

でも、一般的なゲーム(商用含む)でも、そこまでガチなものを作る事はないけどな。
HD+でfps60出すぐらいなら、ライブラリの呼び出し方一本で大抵済むし、
そして、その位の性能だったら今のPCなら Windows/Mac/Linux どれでもJavaで十分イケル。
というか、Pythonとかのもっと軽い言語でも、ライブラリを適時呼び出して上手いことやればいいだけなので、出来るしな。

大雑把な値として経験から、JavaでWindows Gameを作るのと比較すると、
C#(XNA)との差は軽いゲームで5%強遅く、重めでキツイ処理入れ出すと20%弱ぐらい遅くなる。
さらに、C++ でガチでやるのと比べると、1/3〜1/5ぐらいしか性能でない。
 ・ C++/C(GPU) >> C# ≧ Java > LL系

ただし、C++はガチでやり出すとメモリ管理も含め資源の調整とかGPU向けの細かい指定とかとか、
ただでさえ、開発期間と知識が求められる上に、コンパイル時間とか半端ない・・・・・・。
実際に比べるのは不可能だけど、少なめに見ても、開発時間は30倍は堅い。
やっぱし大手のガチProjectじゃないとできないし、結局それなら、普通にMiddleWareを買ってきた方が良い。
(Programmerは楽とは限らないがwww orz)
2013/01/06(日) 14:46:29.78ID:WWISgZLW
JavaSE7からAWTとSwingが混ぜて使えるようになったってホント?
2013/01/06(日) 15:19:47.88ID:WWISgZLW
でけた

http://uploda.cc/img/img50e9176927843.png
2013/01/06(日) 17:12:28.42ID:fwb+peuo
AWTとSwing混ぜる必要ある?

それよりもSWTとSwing混ぜて使えるようにしてほしい
2013/01/08(火) 12:22:51.60ID:j4bi2qlI
ディプロマシー系統っていうのかわからんけど
このぐらいのゲームなら簡単に作れそうだ

ttp://clovergames.3zoku.com/game.html
2013/01/09(水) 00:13:31.24ID:01Ag3FRy
idによって違うイメージがdrawされるってのはやりたいことは
なんとなくわかるんだけど設計としては評価しづらいな。
2013/01/09(水) 10:01:05.86ID:+AhcB4EJ
ImageとかTextureとかSoundもってるオブジェクトをセーブするとか?
XML形式だと入らないだろうし、Serializeしてバイナリで吐いても素材分巨大化する
2013/01/10(木) 20:00:43.65ID:Z8txJRHv
JMF使おうかと思ってたけどいまいちだな。

midiはJDKに入ってるJavaSound、MP3はこのライブラリが使いやすそう。
ttp://www.javazoom.net/mp3spi/mp3spi.html

あとは.wavが使えるものがあれば十分なはず。
2013/01/10(木) 20:17:21.39ID:Z8txJRHv
wavはjavax.soundで普通にならせるようだ
2013/01/13(日) 12:30:28.95ID:lTSbLWgL
swingのルックアンドフィールってsubstanceの他にいいのある?
2013/01/14(月) 19:15:31.00ID:ZaVCszmy
>>62
>それよりもSWTとSwing混ぜて使えるようにしてほしい

謎杉。何がしたいの?

アクションにも対応できる骨格をまともに作ろうとするとawt要素が増えてくるよね
自分でレンダリングするならbufferstragegy使わないと損だし。
そしてSWT使うならダブルバッファリングするのは当然だ
何が言いたいって、awtはゲーム開発において偉大だということ。
これは低速GUIと呼ばれるSwingと対比してではない。
2013/01/14(月) 20:26:39.35ID:7Mvy01UC
OpenGL使うならフレームワークとか使うだろうし
今更awtとかswtを直接使う人いないんじゃないの?
2013/01/15(火) 01:15:38.71ID:MWRm0sFJ
当たり判定について教えて欲しいのですが、
壁にめり込む前に修正してやるのか、とりあえず動いてみてめり込んでいたら修正するのかどっちがいいのでしょうか
前者の場合、
(壁までの距離)<(1フレームで動ける距離)のとき、壁との距離分だけ動かす かな?
こっちのほうが何だかカッコイイ気もするけど、何か自由度が下がりそうな気がするんですよね
ただ後者は楽だけど、めり込んだ瞬間にアクション起こされた時の対策を加えないといけないですよね
2013/01/15(火) 13:28:47.99ID:2cbm43tf
STGだろうか。。。

・全てのオブジェクトの移動前と移動後(予定)の座標を取得する
・当たり判定
・予定通り動かす or 衝突アクション

マウスでドラッグしながら塗るようなアプリ(マップエディタとか)だと
マウスの座標現在値だけでやると早くマウスを動かしたときに
ドラッグ間の線が途切れるんだよね。そんなときにもこのやり方が役に立つ。
2013/01/15(火) 21:16:07.30ID:+k1g4zRO
>>71
どういうゲームを想定してるのか分からないけど,
俺が作ってる3D STGの場合,後者でやってるよ.
…次のフレームで本当に衝突するか分からないし.
2013/01/15(火) 22:04:46.84ID:2cbm43tf
動きが速いとすり抜けたりしない?
7573
垢版 |
2013/01/16(水) 00:12:37.78ID:FvBTwx9m
>>74
俺の場合は,衝突判定オブジェクトは球とか単純な形状のみでやってて,
例えば移動球同士の場合は,相対距離(の二乗)を
時刻tを変数とした二次方程式で表して,それを解くような感じでやってる.
なので基本的には,すり抜けはおきない.はず.(バグってなければ)
7673
垢版 |
2013/01/16(水) 00:22:16.17ID:FvBTwx9m
ああ,1フレーム前と現在のフレームの位置情報を各々保持してて,
その間はそれぞれ等速直線運動をしている,という前提でね.
7771
垢版 |
2013/01/16(水) 02:47:44.41ID:+L+Om9AH
作ってるのはマップチップを敷き詰めたスクロール無しの平面でのアクションゲーです
移動は上下左右斜めも可能でピクセル単位です
また一つ質問なんですが、プレイヤーの当たり判定をするポイントってどこにするべきなのでしょうか
自分はプレイヤーの中央に判定点を取っているのですがいつもグチャグチャになります

当たり判定を円のような面積?で取る方法はやったことがないです。2Dでも使えますか?
点ではなくて面積で当たり判定を取る方法・・・
ブロックのサイズから面積を計算して、プレイヤーと重なった面積が○○以上になれば当たったことにする みたいなことですか?
2013/01/16(水) 10:43:20.41ID:U+SCJlI3
普通、2Dだと四角か円で判定とるだろ。
人の形をしたものにはキャラグラの80%ぐらいの大きさにあたる
四角形で判定とればいいし、巨大なヘビとか曲がるレーザーなら
小さい四角の判定を鎖のように繋げて判定にすればいい。
2013/01/16(水) 12:12:30.09ID:vH/BKNi/
ヒット判定のすりぬけ問題は前もって交点検出しないとだめよ。
80名前は開発中のものです。
垢版 |
2013/01/17(木) 17:15:05.18ID:+cKRqKg2
>>77
って、言うか
今どんな判定してんの?
まさかブロックの座標を総当りで判定?
2013/01/17(木) 18:33:38.80ID:gBLtOCQt
スクリーンショットとか上げてよ
2013/01/17(木) 22:57:41.07ID:3HVRASXD
>>80
ブロックは奇数行・列に配置させてるので単純に、if(マス目%2 != 0)みたいな感じでやってます。
自分がやってる方法はいつもこんな感じです。

public int x, y; // プレイヤーの左上の点
private static final int S = 32; // プレイヤーの縦と横のサイズ

/**
* 判定点を返す。
* @return プレイヤーの判定点の座標
*/
private Point getPoint() {
return new Point(x+S/2, y+S/2);
}

移動の際int directionに方角を代入しているので後は
・動けるか否かのbooleanを返すメソッド if(direction==RIGHT && (getPoint.y)/S%2 != 0) (右へ移動するとき、奇数行であれば動けないの意味でfalseを返すみたいな。)
・修正が必要な領域に入ったか否かのbooleanを返すメソッド
・修正するメソッド
みたいな感じに細かく定義していってます。

ただ、if(マス目%2 != 0)のように定義しちゃうと、

プレイヤー:□、 ブロック:■とする
 □
 ↓
■  ■
のように、少し左によった状態だけど判定的にはokなとき

■□ ■
のようになって、ここで右側にいけない(右の壁まで数ピクセル進めない)のって気持ち悪いと思うのです
こういう時だけ場合分けするにしても煩雑になってきますし、そもそもの当たり判定の方法がよくないのかなと思いまして質問しました。
2013/01/18(金) 00:06:12.20ID:cE8dsg28
>>82
仕様に合わせた最適な判定は知らんが(仕様が分からないし)
普通は中心じゃなく四隅を判定する
右移動中なら右上、右下だけとかの省略はできるが
で、四隅をプレイヤーサイズじゃなく判定サイズにする

ブロックがこんな感じに敷き詰められてると思っての回答になるが
■ ■ ■

■ ■ ■

■ ■ ■

奇数行だから横に動けないとするんじゃなく
奇数行で右に移動中なら右側の判定x座標も奇数目になったら
めりこんだ座標分戻すってやる

斜め移動ならブロックのどの面に先に当たったかも必要になる
2013/01/18(金) 02:20:15.70ID:YeFFrDV3
お〜こんなスレあったのか
ちょっと前にTDぽいの作ったなぁ
2013/01/18(金) 23:19:47.41ID:OrI6e3yP
>>83
四隅を判定するのが普通なのか?物凄くソースが汚くなりそうなんだが。
普通Rectangleのintersetsみたいなのを使うんじゃないの?
2013/01/18(金) 23:22:12.80ID:OrI6e3yP
訂正:intersectsね
2013/01/18(金) 23:46:53.86ID:cE8dsg28
Javaは知らないからそう言う便利なのがあれば使えば良いけど
やってる事自体は変らないでしょ
升目と矩形の判定を中心一点だけではやらない
2013/01/18(金) 23:52:51.60ID:/+2FrF0Y
>>85
当たり判定クラスを作るだけだろ。
むしろ四隅を判定しないやり方ってありえないだろ。
2013/01/18(金) 23:57:49.81ID:/+2FrF0Y
ゲーム(マリオ)だと踏んだとか横から当たったとか
ゲーム独自の判別する必要があるし、
既存クラスライブラリに全部やってもらおうというのは無理だよ。
2013/01/19(土) 00:50:01.89ID:yYWDydAV
>既存クラスライブラリに全部やってもらおうというのは無理だよ。

んなことわかりきってる。だが可能な限りjreに依存するべきだと思うよ。

>むしろ四隅を判定しないやり方ってありえないだろ。

全然ありえなくない。逆になぜ四隅を判定する必要があるか書いてごらんよ
2013/01/19(土) 01:39:37.12ID:yYWDydAV
ちなみに、中心一点というかそれを基準にするのは悪くないと思う
なにより二次元における閉じた図形であれば必ず重心が一点のみ存在する訳で、これほど保守性の高い性質はない。

あと、

if(playerRectangle.intersects(blockRectangle) {
Rectangle intersection = (Rectangle) playerRectangle.createIntersection(blockRectangle);
...
...
}

で重なった矩形が取れるなんつーくっそ便利なモノ使わないと損だと思うよ。
四隅にこだわってる理由がよくわからんし、一応ここJavaスレだで。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況