2013年17ゲ製作技術128: Javaで作るスタンドアローンゲーム (238) TOP カテ一覧 スレ一覧 2ch元 削除依頼
WinXPでのネットやろうぜの動かし方について (104)
【初心者】ベッキーと一緒にゲーム制作スレ【歓迎】 (400)
ゲームボーイアドバンス(GBA)非公式開発 Part2 (842)
【ツクール】俺がドラクエを作っていくスレ【2000】 (147)
SDLスレ ver.2.0 (694)
■自主製作ゲーム:開発状況報告スレVer1.1■ (419)

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


1 :2012/12/27 〜 最終レス :2013/09/19
スレタイはアプレットとの対比的な意味と考えてください。
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

2 :
アプレットと切り離す意味が分からん。モバイル等もあるだろうに。
Java自体は好きだけど、こういう排他的な方向性は気に食わん。クソが

3 :
スマホは知らんけどガラケー向けはむしろスタンドアロンなんじゃないか。
ガラケー向けに一杯出てるだろ。

4 :
アプレットだろうがWebStartだろうが
クライアントがJREインストールさせる壁があるのと
アプレットの起動時にブラウザが固まるのがうざくて
どうせ敷居が高いならスタンドアロンで作るほうがいいかなと思ったり

5 :
Java愛好家の仲間が欲しい
OpenGL2DならSlickライブラリお勧めだよ

6 :
俺はアプレットと切り離したほうがいいと思う
アプレットは目的が違って来るよね(ウェブで気軽に触って欲しいみたいな)
やはりソースコードもそういう方向に行っちゃうし、何せネットにあるアプレットのソースに酷いのが多いのは有名(古いのが多いのも理由)
学び始めた子がここに嵌まっちゃってる感がみてられん
「排他的」というのは被害妄想すぎるし、Swingのそれをわかってくると面白くなってくるというもの

7 :
アプレットもSwingじゃん。的外れだと思うぞ。

8 :
JApplet使えってことだろ?
アプレットに限らずだが未だにJFrame使わずFrame使ってたりJApplet使わずApplet使ってるのは不勉強だと思われても仕方が無い
人気無くなったのか知らんがJavaって2004年5年あたりで時が止まってる気さえする
とかいう俺もjre1.6から離れられないわけだが

9 :
JDKは1.7だとjavadocが英語しか使えなかった覚えがあって、まだ1.6使ってますw
JREは自動更新したりアプレットとか開くと更新を要求されるから1.7になってる。
swingではなくawtを使うのは1.6後期までOpenGLと相性悪かったからだろうね。
swingコンポーネント使うとOpenGLの速度潰すからボタンとか自作しろって
slickフォーラムに書いてあったが、もうOpenGL捨ててswingだけでなんか作ろうと思う。

10 :
webアフィ広告をしこんだスタンドアロンゲームを作ってみるつもりだ
(ちなみに俺のホームページは1年間あたり500円稼ぐのがやっとw)
何かいいゲームネタをもってるやついたら、俺と組もうぜ! m6(・∀・)ビシッ!

11 :
チーム・シンコロールのJava使いですチャオ!
同じJava使いとして応援してます
組むのはプログラマがかぶるかなという気もしますが
ゲームネタの雑談するのは乗り気です

12 :
そうですか。
今のところ、とりあえず凸画像だけで作るRTSとか、ローグとか、
そんなゲームがいいかなと思ってます。

13 :
今って描画はレンダーメソッド作ってマルチバッファリングするのかな?
そこで質問なんですが、ダブルにするかトリプルにするかってどうやって決めればいいのでしょうか

14 :
子供はあんまり相手したくないかなっと

15 :
XULRunner+Swingで行こうと思ったが、JavaFX2.0でwebkitが使えるんだね
まだ情報量の少ないFXの調べ物でつまづくとまずいから、swingでいくことにしよう

16 :
へえ〜トリプルバッファリングていうのがあるんだ
自分はいつもデフォのダブルバッファリングしか使ってないので何とも言えないが
欠点: プレイヤー入力から画面出力までに1フレーム遅延が発生する
利点: 処理落ち時に1フレーム分余裕がある
ググったらこんな感じでした

17 :
>>15
XULRunner とは意外な組み合わせ
と思ったらいまではJavaXPCOMで呼びだせるのか
時代は進んでるなあ

18 :
>>17
XULRunnerでweb広告を貼るわけだが、
同根するネイティブ(dll, so)が100MBくらいになる。
これをwindows限定ならば20MBぐらいで済む。
どうせゲームクライアントはwindowsだから
windows以外はバッサリ切り捨てる。

19 :
アクションゲームは重くなったら処理落ちさせた方がいいだろう。
追尾ミサイルが100発ぐらい飛んできてスローモーションの中避けるのは
むしろ盛り上がる。画面が止まったまま当たり判定くらったら嫌なはずだ。
エフェクトなどが重要ではないリアルタイムSLGなんかでは
画面の更新を飛ばしてでもとにかくロジックを更新せねばいかん。
前者はダブルバッファ、後者はトリプルバッファが向いてそうだが、
迷うぐらいならとりあえずダブルバッファを選んだほうが無難だと思う。

20 :
休みなのに人いないな。流石アローンスレだぜ。

21 :
ところで凸画像でなんですか?
ググるとデコレーションメールの画像? ゲームに使えるん?

22 :
そのまんま凸のキャラチップだよ。
八方向のキャラグラ素材作ったら大変だろ?
だから例えばマップ上では簡素なアイコンとして凸絵を表示して、
マウスで駒を選択すると右上にキャラ名と正面向いたキャラ絵を表示するんだ。
それなら前向きの絵だけ用意すればゲームが作れる。
ttp://uploda.cc/img/img50e0368219f69.png

23 :
ナルホド!

24 :
こいつぁ臭い

25 :
HSPでRPG作りたいんですが、正直難しいと思います。
でもやりたいんです!!僕はHSPでブロック崩し(アルカノイド)
ぐらいなら作ったことあります。
今のところ、オープニングまで作ったのですが、どなたか僕に
HSPの基礎からすべてを叩き込んでくれませんか??
お願いします。

26 :
スレチだ出て行け坊主

27 :
ゲ製は不毛だな

28 :
ゲームを製作すること自体が不毛?

29 :
ゲームを製作すること自体が不毛だが、それ以前の問題だろ
ゲ製板でゲームを製作してるやつはまずいないしな
この板にいるのはせいぜいこの程度の初心者ちゃん↓
【Eclipse】Android ゲームApp作成【初心者】
ttp://toro.2ch.net/test/read.cgi/gamedev/1355211405/l50
vipゲ製スレもエロ画像貼って雑談してるだけ

30 :
実際本腰入れ始めると気軽にあげたくないし、逆に気軽にあげちゃう奴は教えを乞う立場なのに何故か自分に酔ってたり・・・

31 :
ゲームを製作すること自体が不毛だと思ってるなら
ゲ製板にゲームを製作している人がいなくても無問題では?
不毛だと思うことをしていないのだからむしろ喜ばしいのでは?

32 :
ソースや成果物は上げなくてもいいけど、出し惜しみせずに情報交換しないとね。
雑談の中ですら批判専門家や乞食くんばかりでまともなやつが出て行ったのがゲ製板だろう。

33 :
情報提供したいけど大した情報持ってないんだよな
個人的には javax.sound.midi で midi を
プログラムレベルで叩けるのを知ったのが自分の最近のヒット。
音はショボ目かもしれんがデフォの gervill シンセを鳴らして遊んでる
自動作曲とか興味ある人いるかな

34 :
switch 文しばらく使わなかったら文法忘れてた

35 :
javaのmidi関係は割と素敵だけどそっから何か作りたいとは思わんな
それならsteinbergからSDK落としてきて素直にVST開発するのがいいが、これまた同志がいない
ファミコンゲームしか作る気ないし音はNSF一択

36 :
switch文はJDK1.7から文字列分岐ができるようになった。
String var = "hello";
switch(var){ case "fuck" : break; }

37 :
>>36
知らなかった…
早速,自分のコードを書き直してみよう.

38 :
ちゃちぃのやウェブ系ならいいが、やはりswingはゲームに合わんなと思う
lwjglみたいなの使うか、SWTとawtを上手いこと使うのがいいね
ただswingはやはり気楽で便利だ

39 :
自前でコンポーネント一揃いを作って持っておきたいけど
あんまり作り方を説明してる文書ってないよな
良く知らんけど、
Swingは描画の更新をイベントディスパッチのスレッドが行わないといけないから
OpenGL の速度が生かせないのかな?
はじめから OpenGL の描画に同期したコンポーネントとして設計すれば良さ気か
Swing を移植できたらすばらしいけど、根元の動作原理を良く分かってないからムズイ

40 :
Swingコンポーネントはメモリイメージで
VRAMに固定されてるテクスチャじゃないからじゃねーの?

41 :
これマジか?
http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248211/
swingで974FPSも出てるぞ。
でも自分で試すと58FPSくらいしか出ないんだよな
どうやるんだろう

42 :
eclipseで-Dsun.java2d.opengl=trueを設定するにはどうすればいいんだぜ?

43 :
MinecraftはJava製だが

44 :
>自分で試すと60FPSくらいしか出ないんだよな
ディスプレイのリフレッシュレート調べろ。
>eclipseで-Dsun.java2d.opengl=trueを設定するにはどうすればいいんだぜ?
ググればすぐ分かる
こんなレベルで一個一個質問してたらゲームは遠いぞw

45 :
肝心のゲームよりゲームエンジン作るのが楽しい
スプライトシートに特化したソフトが仮完成した
マップエディタを改良していきたい
エディタ側からイベント追加、フリーハンドでの当たり判定生成ができるよう改良する予定

46 :
設定はできていたけど、エラーが出ていたみたい
$ 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"
ぐぐたけどわからんちん

47 :
できたー。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
やっぱコメントアウトしてる部分で初期化処理してるのかなあ

48 :
う〜ん、出来たような
http://uploda.cc/img/img50e5927fb81f4.png
グラジエントが縞模様っぽいのは仕様か…?

49 :
みんなは、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とかって感じ??
あと何かお勧めのライブラリとかある?

50 :
でも垂直同期に合わせられないから旨くないかなあ
いい加減寝るか―

51 :
>>49
スマホで作らない限りスマホにも使える系は面倒かなと。
あとSpringてDIのあれとは別物?

52 :
何を目指すかによるとしか言えんな
最新ゲーム機の出力に近づけたいならゴージャスなもの用意すべきだし
俺は物理演算をどうするかを判断基準にしている
割とその辺の数学が好きだったり、ファミコン時代の試行錯誤が体感できるからあまりライブラリは使わない
というか個人製作でリアルさ求め始めると血迷うのが見えている

53 :
素材も作りきれんからな

54 :
初心者です
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の描画はそうはいかないということですかね

55 :
ちゃんと書きます
public class Player {
public Player(int x, int y, int id) {

}
public void draw(Graphics g) {
g.drawImage(idの値によってイメージ切り替える処理);
}
}
これをJPanelを継承したクラスに自機と敵と言う形で二つインスタンス化したいです
JPanelを継承したクラスのコンストラクタでインスタンス化し、paintComponentでそれぞれdrawしています

56 :
見た感じ大丈夫そうだけど。。
思いつくところとしては
・画像データはちゃんと読み込まれているか
・描画位置が完全に画面の範囲外になって見えていないのでは
・画像が重なって下になった画像が見えていないのでは
→ 試しに JPanel の paintComponent で直に drawImage してみる
→ Player の draw(g) で drawImage の代わりに fillRectangle とかしてみる(setColorを忘れずに)

57 :
MineCraftってあれJavaでつくってるんですよねJavaであんなクオリティ高いゲームつくれんだと思ったね

58 :
>>57
出来と言語は関係ねーぜ。

59 :
>>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)

60 :
JavaSE7からAWTとSwingが混ぜて使えるようになったってホント?

61 :
でけた
http://uploda.cc/img/img50e9176927843.png

62 :
AWTとSwing混ぜる必要ある?
それよりもSWTとSwing混ぜて使えるようにしてほしい

63 :
ディプロマシー系統っていうのかわからんけど
このぐらいのゲームなら簡単に作れそうだ
ttp://clovergames.3zoku.com/game.html

64 :
idによって違うイメージがdrawされるってのはやりたいことは
なんとなくわかるんだけど設計としては評価しづらいな。

65 :
ImageとかTextureとかSoundもってるオブジェクトをセーブするとか?
XML形式だと入らないだろうし、Serializeしてバイナリで吐いても素材分巨大化する

66 :
JMF使おうかと思ってたけどいまいちだな。
midiはJDKに入ってるJavaSound、MP3はこのライブラリが使いやすそう。
ttp://www.javazoom.net/mp3spi/mp3spi.html
あとは.wavが使えるものがあれば十分なはず。

67 :
wavはjavax.soundで普通にならせるようだ

68 :
swingのルックアンドフィールってsubstanceの他にいいのある?

69 :
>>62
>それよりもSWTとSwing混ぜて使えるようにしてほしい
謎杉。何がしたいの?
アクションにも対応できる骨格をまともに作ろうとするとawt要素が増えてくるよね
自分でレンダリングするならbufferstragegy使わないと損だし。
そしてSWT使うならダブルバッファリングするのは当然だ
何が言いたいって、awtはゲーム開発において偉大だということ。
これは低速GUIと呼ばれるSwingと対比してではない。

70 :
OpenGL使うならフレームワークとか使うだろうし
今更awtとかswtを直接使う人いないんじゃないの?

71 :
当たり判定について教えて欲しいのですが、
壁にめり込む前に修正してやるのか、とりあえず動いてみてめり込んでいたら修正するのかどっちがいいのでしょうか
前者の場合、
(壁までの距離)<(1フレームで動ける距離)のとき、壁との距離分だけ動かす かな?
こっちのほうが何だかカッコイイ気もするけど、何か自由度が下がりそうな気がするんですよね
ただ後者は楽だけど、めり込んだ瞬間にアクション起こされた時の対策を加えないといけないですよね

72 :
STGだろうか。。。
・全てのオブジェクトの移動前と移動後(予定)の座標を取得する
・当たり判定
・予定通り動かす or 衝突アクション
マウスでドラッグしながら塗るようなアプリ(マップエディタとか)だと
マウスの座標現在値だけでやると早くマウスを動かしたときに
ドラッグ間の線が途切れるんだよね。そんなときにもこのやり方が役に立つ。

73 :
>>71
どういうゲームを想定してるのか分からないけど,
俺が作ってる3D STGの場合,後者でやってるよ.
…次のフレームで本当に衝突するか分からないし.

74 :
動きが速いとすり抜けたりしない?

75 :
>>74
俺の場合は,衝突判定オブジェクトは球とか単純な形状のみでやってて,
例えば移動球同士の場合は,相対距離(の二乗)を
時刻tを変数とした二次方程式で表して,それを解くような感じでやってる.
なので基本的には,すり抜けはおきない.はず.(バグってなければ)

76 :
ああ,1フレーム前と現在のフレームの位置情報を各々保持してて,
その間はそれぞれ等速直線運動をしている,という前提でね.

77 :
作ってるのはマップチップを敷き詰めたスクロール無しの平面でのアクションゲーです
移動は上下左右斜めも可能でピクセル単位です
また一つ質問なんですが、プレイヤーの当たり判定をするポイントってどこにするべきなのでしょうか
自分はプレイヤーの中央に判定点を取っているのですがいつもグチャグチャになります
当たり判定を円のような面積?で取る方法はやったことがないです。2Dでも使えますか?
点ではなくて面積で当たり判定を取る方法・・・
ブロックのサイズから面積を計算して、プレイヤーと重なった面積が○○以上になれば当たったことにする みたいなことですか?

78 :
普通、2Dだと四角か円で判定とるだろ。
人の形をしたものにはキャラグラの80%ぐらいの大きさにあたる
四角形で判定とればいいし、巨大なヘビとか曲がるレーザーなら
小さい四角の判定を鎖のように繋げて判定にすればいい。

79 :
ヒット判定のすりぬけ問題は前もって交点検出しないとだめよ。

80 :
>>77
って、言うか
今どんな判定してんの?
まさかブロックの座標を総当りで判定?

81 :
スクリーンショットとか上げてよ

82 :
>>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なとき
■□ ■
のようになって、ここで右側にいけない(右の壁まで数ピクセル進めない)のって気持ち悪いと思うのです
こういう時だけ場合分けするにしても煩雑になってきますし、そもそもの当たり判定の方法がよくないのかなと思いまして質問しました。

83 :
>>82
仕様に合わせた最適な判定は知らんが(仕様が分からないし)
普通は中心じゃなく四隅を判定する
右移動中なら右上、右下だけとかの省略はできるが
で、四隅をプレイヤーサイズじゃなく判定サイズにする
ブロックがこんな感じに敷き詰められてると思っての回答になるが
■ ■ ■
■ ■ ■
■ ■ ■
奇数行だから横に動けないとするんじゃなく
奇数行で右に移動中なら右側の判定x座標も奇数目になったら
めりこんだ座標分戻すってやる
斜め移動ならブロックのどの面に先に当たったかも必要になる

84 :
お〜こんなスレあったのか
ちょっと前にTDぽいの作ったなぁ

85 :
>>83
四隅を判定するのが普通なのか?物凄くソースが汚くなりそうなんだが。
普通Rectangleのintersetsみたいなのを使うんじゃないの?

86 :
訂正:intersectsね

87 :
Javaは知らないからそう言う便利なのがあれば使えば良いけど
やってる事自体は変らないでしょ
升目と矩形の判定を中心一点だけではやらない

88 :
>>85
当たり判定クラスを作るだけだろ。
むしろ四隅を判定しないやり方ってありえないだろ。

89 :
ゲーム(マリオ)だと踏んだとか横から当たったとか
ゲーム独自の判別する必要があるし、
既存クラスライブラリに全部やってもらおうというのは無理だよ。

90 :
>既存クラスライブラリに全部やってもらおうというのは無理だよ。
んなことわかりきってる。だが可能な限りjreに依存するべきだと思うよ。
>むしろ四隅を判定しないやり方ってありえないだろ。
全然ありえなくない。逆になぜ四隅を判定する必要があるか書いてごらんよ

91 :
ちなみに、中心一点というかそれを基準にするのは悪くないと思う
なにより二次元における閉じた図形であれば必ず重心が一点のみ存在する訳で、これほど保守性の高い性質はない。
あと、
if(playerRectangle.intersects(blockRectangle) {
Rectangle intersection = (Rectangle) playerRectangle.createIntersection(blockRectangle);
...
...
}
で重なった矩形が取れるなんつーくっそ便利なモノ使わないと損だと思うよ。
四隅にこだわってる理由がよくわからんし、一応ここJavaスレだで。

92 :
>可能な限りjreに依存するべきだと思うよ。
的外れ。
>なぜ四隅を判定する必要があるか書いてごらんよ
Rectangleを使うと四隅を判定しないのか?
>>82-83の話をしてるから、そこんとこ踏まえてね。

93 :
>>92
>>91が四隅を判定しているように見えるのか?
判定してるのは交差してるか否かだろうよ。
「だけど内部処理は・・」って?どっちが的外れなんだか。

94 :
>>93
プレイヤーとブロックの四隅を判定しているように見えるけど、何か違うのかな?

95 :
>>83(俺じゃないけど)は設計の話をしているわけで、
実装において物理エンジンでもRectangleでも
より原始的な方法(int x,y,w,h)でも好きにすればいい話。
1から10まで書かないとわからないようだな。

96 :
A⊂Bの意味で言ってるのね。
ならなおさらBのRect使えよと言いたいが、設計の段階の話なら
>より原始的な方法(int x,y,w,h)でも好きにすればいい話。
で納得。

97 :
単純にこんな感じでいいんじゃないの?試してないけど
マップチップを敷き詰めた状態でブロックがいちいち矩形座標持ってるとも思えないし
あと上下左右4方向の移動・当たり判定が理解できるまでななめ移動は考えない方がいい
int CHARA_X, CHARA_Y;  // キャラピクセル座標
int CHARA_SIZE;       // キャラサイズ(XY同サイズとして)
int CHARA_MOVE;      // キャラ移動量(CHARA_SIZE < CHARA_MOVEだとすり抜ける)
int CHIP_SIZE;        // マップチップサイズ(XY同サイズとして)
int MAP[][];          // マップ(0:移動可 1:移動不可)
private void moveChara() {
  if (direction == RIGHT) {
    CHARA_X += CHARA_MOVE;
    while (MAP[CHARA_Y / CHIP_SIZE][(CHARA_X + CHARA_SIZE) / CHIP_SIZE] == 1) {
      CHARA_X--;
    }
  }
}

98 :
ブロックの大きさも一律固定だろうしな。
単純なアプリなら単純に作ったほうが工数が少なくて楽。
保守性がどうとか初心者が背伸びして粋がってるとしか思えん。

99 :
別に俺が言ってる方法は複雑じゃないと思うんだけどな〜。(ソース量の面やAPI的にも)
「基本図形を描画するメソッドは使うな!」的な流れも確かにあったが、今は利用できるものは利用したほうが便利でシンプルに書けることに気づいてるじゃん。
Java2D使うのは初心者には無理だと思ってるならそれはバカにしすぎだと思う。
http://www.youtube.com/watch?v=Otl24e_nuyc
例えばこういうチュートリアルみてもビギナー向けの解説としてるけど?

100 :
awt使うのは・・・に訂正。

101 :
なんか感じの悪いスレだな

102 :
>>97
風呂入ってコード思い浮かべたらいきなりバグあったわ。気晴らしは大事だね
while (MAP[CHARA_Y / CHIP_SIZE][(CHARA_X + CHARA_SIZE) / CHIP_SIZE] == 1) {
これだけだと右上しかチェックしてないわ。下記が修正パッチね
while (MAP[ CHARA_Y           / CHIP_SIZE][(CHARA_X + CHARA_SIZE) / CHIP_SIZE] == 1) ||
    MAP[(CHARA_Y + CHARA_SIZE) / CHIP_SIZE][(CHARA_X + CHARA_SIZE) / CHIP_SIZE] == 1) {

>>99
キャラクタ同士の当たり判定ならわかるけどブロックとの判定でもそうなの?
俺は勝手にボンバーマンをイメージしたけど、本当に1つ1つのブロックもRect座標を持つべきなの?

103 :
>本当に1つ1つのブロックもRect座標を持つべきなの?
ボンバーマンなら特殊形状のマップでも
1ブロックの組み合わせに過ぎないから必要ないね。
ゲームがブロック崩しで、各ブロックの大きさや形(長方形・正方形)が
異なるなら、Rectangleが望ましい可能性が高い。

104 :
必要か、必要でないかはアプリケーションの仕様が決める。
オブジェクト指向設計として何が望ましいかはまた別の話。
オブジェクト指向設計としては、定数が各コードに散らばるのは良くない。
そこんとこに拘るなら、ブロッククラスにRect持たせて、
コンストラクタでRectの幅と高さを定数値に初期化すれば
定数(final int BLOCK_SIZE)を使ってる部分を隔離できる。

105 :
そんな話だっけ?
俺は単純に>>71からの一連の質問に対して
>>85(yYWDydAV)の案は合わないなと思ってるだけだけど。

106 :
>単純に>>71からの一連の質問に対して〜
そうだよ。質問者はアプリケーションの実現方法について聞いてる。
でも>>6 = >>59 = >>85 = yYWDydAVの話が噛み合わないのは、
目的を達成すれば、ゲームの仕様を満たせばそれでいいってわけじゃない
みたいな話を押し付けてるからだと思うんだよね。
あえて質問者を無視して「1つ1つRect座標を持つべきなの?」に答えれば
>>104みたいな話にはなる。

107 :
まあオブジェクト指向設計とか一般論としてどうだろうと
質問者にとって良い回答をすべきだろうな。

108 :
>>103
誰も一つ一つにRect座標持たせるなんていってないぞい。
先読みしてぶつかる可能性があればRectangle生成するようにする。

109 :
オブジェクトのサイズが小さくて移動速度がサイズより大きいような
場合はすり抜け対策しようねって話じゃなかったのか。

110 :
>>108
>先読みしてぶつかる可能性
俺ならここでチェックしてしまうけどな。この先読みのソースはどんなものになるか知りたいな。
>>109
最初は単なる当り判定の話だったけど、ひょっこりすり抜けの話も加わってるね

111 :
ショボゲー製作中。
ttp://kie.nu/JdF

112 :
一度だけ実行するときとかのラッチ回路?ってどうかくのがいいんでしょうか
自分はfieldにstaticなintを初期化して、メソッドをくぐれば1にするみたいな書き方をするのですが、
fieldまで遠かったり、それだけのために用意することにためらいがあります

113 :
staticイニシャライザで済むなら

114 :
やってみたが升目あるゲームならrect基準にやるのありだなと思った
むしろ全マスにrectもたせても重くはならんのと違いますかね
マス目クラスにrectを継承させる
描画は
g.fill(this)か
g.draw(this)ですむ
移動しないブロックなら
コンストラクタの引数でsetBoundsして、必要なれば描画も用意
移動するブロックなら(もちろん自キャラでも)
升目クラス描画のところでsetBoundsすれば、スレッド走ってたらレクトも動いてくれる
そしてなにより、intersectsで判定してる様子を描画すると中二病に火がつくww

115 :
あ、もちろん画像なら画像を描画。
別に何もかもrectでやらんでいいがどうせextendsする予定のものがなければ、
継承したrectのwidthとかhight使うと良いんでない?
マップ全体が一つのオブジェクト的な設計より、1マス目事に判定が違うのだから1升目ごとをオブジェクトとみたほうがいいかも
ちなみにswing使って囲碁や将棋作るときってこの考えだよね
1升目をJComponentで作って、必要な数だけgridlayoutでしきつめる
これじゃアクションならさすがに重いからawtのrect使うと。

116 :
とりあえずお前等って何か作ってんの?
目的もなくあたり判定の練習とかしてもしょうがないぜ。

117 :
やらない奴より100倍マシ

118 :
質問なんだけど、MouseListenerやKeyListenerの処理を画面の描画の状態によって切り替えたい場合どうしてる?
例えば
private static final int TITLE = 0;
private static final int MENU = 1;
private static final int BATTLE = 2;
private int status;
private boolean getStatus() {
return status();
}

のように用意して、画面が遷移したらstatusに代入し、getStatus()の値によってswitch文で分けるとか?
もっと上手いやり方あったら教えて欲しい
ここが無駄にコードを膨らませてる気がする

119 :
>>118
とりあえずstatusはenumにするとして,
あとは俺もswitch文で分けてる.

120 :
何だやる気のないやつしかいないのか。
>>118
ひとまずint flagとswitchで分けて、あとでストラテジーパターンに変える。
いきなりストラテジーパターンでやると無駄が出る。

121 :
もうダメだわw
Twitterサイバーテロ事件の原因は話題のJavaの脆弱性wwwww 今すぐアンインストールしろwwwww
http://engawa.2ch.net/test/read.cgi/poverty/1359787786/

122 :
せやな

123 :
enumがStringだと向きとか困るな。
無名クラスで代用するのはどうよ?
abstract class Angle { int index; }
final Angle left = new Angle(0){};
final Angle right = new Angle(1){};
final Angle down = new Angle(2){};
final Angle up = new Angle(3){};

124 :
Javaは危険だからインストールすらしてない

125 :
スタンドアロンゲームなんだからローカルで全権限与えて実行だろ
WEBの脆弱性とか関係無いんじゃないか?

126 :
>>125
彼らは馬鹿だからそういうの理解出来ないんだよ

127 :
C/C++プログラマーのJavaのネガティブキャンペーンの一貫だな

128 :
>>127
全然関係ないが

129 :
指摘された脆弱性50個のうち40個以上はJavaアプレットの脆弱性。
ブラウザでアプレットの実行をオフにしておけばほとんど影響ない。
そもそもJavaアプレット自体すでに時代遅れの手段で、使っている
サイトはほとんどない。某回線速度測定サイトはアプレットらしいが。

130 :
ですがアプレットもまた元気になって欲しいですね
って、このスレッドを立てておいて言うのも申し訳ないのですが
http://www.java4k.com/
なるサイトを見つけまして、アプレットx基本APIx4k縛りなんていう面白そうなコンテストを毎年やってるみたいです
しかも中々熱い
アプレットを非難する意味で立てたスレッドじゃないということだけわかってくださいまし

131 :
JREとインストールするとアプレットが動いてしまう事、
ブラウザでアプレットの実行をオフにしても起動する脆弱性、
これが問題になったんだろうけど、普通の人にはわけわからんわな。

132 :
今回の脆弱性は最新版 update 13 で全部修正されていると考えていいの?

133 :
update 13のコントロールパネルでアプレットを動かないように指定できる。
でも一般人はそんなこと言われてもわからず、騒ぎ続ける。
C#がSilverLightを捨てたのは正解だったかもな。

134 :
そもそもアプレットの話題はすれ違い
何のために>>1が重複スレともいえるこのスレを建てたか分からなくなる

135 :
質問
自分でレンダリングする場合、敵だったり弾だったりのインスタンス化と描画の時差というか、タイミングはどうすればよいのですかね
原始的?な方法だと
10発撃てる→あらかじめ画面外に10発とも描画しておく→キー入力でsetter使って移動
みたいな感じですか。これは時差?が無いので描画メソッドもスッキリしそうです。
ですが、
まずキー入力→その結果インスタンス化→そして描画
という流れにしたい場合の描画メソッドはどのように書けばいいのですかね。
例えば、
ArrayList<Teki> tekiArray = new ArrayList<Teki>();
を用意しておき、キー入力を受けて
tekiArray.add(new Teki(...));
な設計での描画をどうするかということです。
if(tekiArray.size() != 0) {
for(int i=0; i<tekiArray.size(); i++) {
tekiArray.get(i).draw(g);
}
}
みたいなことも考えましたが、うーん・・・

136 :
質問の意味が全く分からないんだが・・・
時差って何やねん?

137 :
画面外にあるものを描画することはないだろ。
あらかじめインスタンスを弾の数だけ用意しておくのは正解。
画面の外に出た弾はフラグ立てて休ませておいて使いまわすのがよい。
休みフラグの立っている弾は当たり判定と描画をしないでreturn;。
発射時に毎回インスタンスを生成するのを避けるのは
ガベコレ持ち言語でSTG作るうえでの基本。

138 :
敵と敵の弾はどうだろうね。
ものすごい大群とかじゃなけりゃその都度new()+add()でいんじゃね?
どうせしょぼいもんだろうしな。

139 :
>>135 でいいと思うけど
その draw がどこから呼ばれるのかちょっとだけ気になったりする

140 :
>>136
時差というか、前者では実行した瞬間から描画されてますよね?(画面にみえてないだけで)
しかし後者はキー入力を受けてからなのでプログラムを実行した時点では描画されていないですよね?
つまり描画メソッドに条件式必要になるとおもうのですが。
>>139
drawはTekiクラスがもっているメソッドです。(オフスクリーンのBufferedImageに描画するため)

141 :
まずメインループがどうなってる?なんか怪しいぞ

142 :
???

143 :
>>135
玉のテクスチャと透明のテクスチャ作っといてまずそれを自由に
切り替えられるようになるべし。まあ画面外に出しといてもいいけど。

144 :
メインループってRunnableのrun()メソッドのことかな・・・。
@Override
public void run() {
updateKey();
updateRendering();
}
みたいにキー入力をアップデイトしてからダブルバッファリングしてます

145 :
俺は>>137の方法でやってるなぁ.自分の弾も,敵の弾も.
発射の都度にnewしたら,たくさん撃ったときにとても処理が遅くなったし.

146 :
>>145
確かに打つ瞬間が遅くなりますが、しかしその方法だとArrayList使う意味がないというか・・・
シューティングを例にあげたので、「初めから数を決めてnewしておく」が最善かと思いますが、
もしそのインスタンスの数がかなり多い場合を仮定すると、それはプログラム全体を重くしますよね?
それで移動だとかその他の処理の優先度を高くしたい場合致命的だと思うのです

147 :
シューティングで弾が多すぎる場合はむしろ処理落ちさせた方がいいんじゃない
避けれないし

148 :
昔はハードの都合で処理落ちしてたけど
それがむしろ迫力のある演出にもなっていたな。
>>146
メモリが枯渇すれば実行例外でアプリが強制終了。
たぶんオブジェクトを配列で100万超えたあたりから
あとメモリを確保する事自体は重さと全く関係ない。
新規確保+捨てるを繰り返すと重くなる。(捨てたものを回収するから
ならば1つのシーンとかステージの間、ずっと捨てなければ良いってのは
C#やJavaでゲーム作る際のコツ。
もし初心者でなければ、オブジェクトプールを作ればいい。

149 :
あとArrayListでadd()したものをremove()していながら
速度がどうとかいってるのはおかしな話だと思う。
敵が1000いて、300番を1体remove()したら後ろ700体を詰めなおす処理が走るけど。

150 :
え!remove()したほうが重くなるんですか。

151 :
>>150
それが中でどういう処理されてるか想像してるか?

152 :
Javaを使うなら少々の処理落ちには目をつぶれ
ど〜〜〜〜しても処理落ちを許せないならJavaなんか捨ててしまえ
まあ >>135 みたいなこと質問してる時点で
前者しかあるめぇ

153 :
そんな使い方したいならLinkedList使え
これならremove()しても軽いはず

154 :
JavaFX使ってますか?

155 :
たま〜に使ってるけどゲーム開発には使ってませぬ
だけど8きたら使うかも

156 :
壁とキャラの当たり判定難しい。タイルでするなら
if (map[y][x] == 1) {
return true;
} else {
return false;
}
だけど、ピクセルなどよくわからない。

157 :
>>156
ピクセル単位?と思ったが恐らくエスパーすると、矩形同士の交差判定をしたいのではと思った
物理的な接触はそうだが、でも論理レベルだとそのタイルと同じことだと思うよ
…最終的にどんな内容なのか知らないが

158 :
すみません。Rectangleのやつではなく、
■■■■■■■
■ □ ■
■■■■■■■ のピクセル単位です。
Javaでゲーム作りますが何か?のやつで、
今現在、ドラクエみたいな全方向移動をピクセル単位で動かして当たり判定を書きたいと思っています。
そこのマリオで配布されているコードを写して、左右”だけ”の当たり判定をやろうとしたのですが挙動が変になりました。(判定なしは問題無し)
左の壁の判定は大丈夫なのですが、右へ行くと途中で何も無い空間で止まってしまいます。
yも下へある一定下がるとエラーがでます。y方向には何も変更は無いはずなのですがどうなっているのでしょうか?
public void update(){
x += vx; // 当たり判定実装の時は消す
vx = 0; // 上に同じ
y += vy; //
vy = 0; //
double newX = x + vx;
Point tile = map.getTileCollision(this, newX, y);
if (tile == null){
x = newX;
} else {
if (vx > 0){
x = Map.tilesToPixels(tile.x) - WIDTH; // 右の壁にぶつかる前に止まる。なんで?
} else if (vx < 0){
x = Map.tilesToPixels(tile.x + 1); // この左の壁の判定は大丈夫。けど数値を10とかにすると変になる
}
//vx = 0; // もともとあったけど、自分のやつじゃ動いてくれなかった。
}
vx = 0; //これで動く
}

159 :
>>158
どういう計算とか、どういう処理が必要とか、そもそも具体的にイメージ出来てるか?
つまり、そのコードの全てのタイミングで、各々どういう計算でどうなればいい、と。
例えば、そのMapクラスのスタティックメンバみたいなメソッド、それ何やってるの?
普通に書くと、単純に式書いて終わりだと思うけど、その中だとか…
何も考えずにコピペ&丸投げとかダメだよ

160 :
キャラクターが1ピクセル単位で動くとしても
マップの当たり判定はマス毎にあるよね?(1マス=32x32ピクセルとか)
だからキャラクターサイズ(32x32)とマスのサイズ(32x32)で
判定するのをベースに、キャラクターのピクセル単位の移動を混ぜる感じになるのでは?

161 :
>>159, 160
確かに、コピペなどマズかったと思います。
そのサイトやdeveloping games in javaで図を使って説明されているので、何となくは理解しているつもりです。
なぜy方向に影響が出ているのかは分かりませんが
基本的にコードはそのままで数値を変えて学んでいるので、MAPクラスもそのサイト(javaでゲーム作りますが何か?)のマリオと同じです。
ttp://aidiary.hatenablog.com/entry/20050616/1255785698
キャラがピクセルで判定がマス毎ピクセルの混じりだから?難しいです。
タイルならまだ幾分やさしいのですが、動きがカクカクなのでピクセルにしたかったからです。

162 :
なんか勘違いしてるようだが、「タイルだからカクカク」で「ピクセルだから滑らか」ってのは君の思い込みだよ。
1マスごとの移動だってピクセルを基準に動かしているわけだが。
おそらくkeyPressedでフラグ立ててkeyReleasedでフラグ折って動かす場合とその判定をしないときの挙動をわかってない。

163 :
そうなのですか?なるほど、確かに1タイルは32X32ピクセルですね。
フラグってこれ?のことですか?keyReleased も同じみたいですが。
public void keyPressed(KeyEvent e){
int key = e.getKeyCode();
if (key == KeyEvent.VK_A){
leftPressed= true;
}
if (key == KeyEvent.VK_D){
rigtPressed= true;
}
if (key == KeyEvent.VK_W){
upPressed= true;
}
if (key == KeyEvent.VK_S){
downPressed= true;
}
}

164 :
>>163
そうそれ。
君がいう「カクカク」な状態って言うのは、そのフラグ判定してるところに直接移動メソッドを書いた場合のことっだとおもう
なぜかっていうとそのkeyPressedメソッドはupdate()されていないよね
だから「押している間動かす」ということをしたければ、キープレスでフラグtrue、キーリリースでフラグfalseにしておいて
メインループに書くupdate()メソッド内で移動処理するわけ

165 :
なるほど。
たしかに、それなら当たり判定はシンプルのままに出来そうですね。
お手本(サイトで配布されているコード)を見てもちょっと混乱してしまったので、もう一度Developing games in javaの当たり判定コードの理解を頑張りたいと思います。当たり判定って難しいです。

166 :
すごい簡単な話で
・移動判定はマス単位
・移動アニメーションはピクセル単位
にするだけじゃないのか?

167 :
いやそれだけじゃないと思う
十字キー押し続けると一回入力あってから少しディレイしてから連打?みたいな挙動になるでしょ?
ようするにこれを「カクカク」した状態と表現したのだと思うよ
だからmousePressedとmouseReleasedでフラグ判定して、メインループでtrueなら移動みたいに、押している間動くようにした状態をなめらかといっているはず

168 :
ぷよぷよ作ってるんだけど移動と回転をどう定義するといいだろうか
とりあえずやったのは
int[][] field = new int[12][6];
のようなフィールドを0に初期化して
int[][] puyo = new int[3][2];

for(int j=0; j<3; j++) {
for(int i=0; i<2; i++) {
if(i == 1) puyo[j][i] = 1;
}
}
のように初期化し、
010
010
で1のときに描画して、移動処理はfield[j+offsetY][i+offsetX] += puyo[j][i];
のようにした
だけどこれじゃプヨを右方向に動かしたらfieldの横幅を超えてしまうよね?だからエラーでてしまう。
C++だと同じやり方でエラーでないんだけど、もしかしてC++の場合は初期化したfieldの幅を超えたら勝手に広げてくれていたのかな?
Javaでこれをするにはどうしたらよいだろう

169 :
>>166, 167,
それもあるのですが、マス(32X32)だと一歩歩くごとに32ピクセルも移動します。
ゼルダの時空の章などはもっと歩幅が小さい(1ピクセルとか?)のでマス移動だと「カクカク」してしまいます。

170 :
>>168
offset足した値が横とか縦を越えていないかチェックしてはじけばいいのでは。
C++の場合はオーバーランしてメモリ壊してるよ。
警告なんて出ない。

171 :
>>168
上下左右に1マスずつ広げて壁の部分もフィールドの一部ということにするのが簡単かと
ちなみにあれ実はフィールドの最上部に見えないけどぷよの置ける部分が存在するから縦は13段だよ

172 :
>>170
>offset足した値が横とか縦を越えていないかチェックしてはじけばいいのでは。
これ、自分も考えたんだけど、そのチェックに加えてpuyo配列自体の1の部分も1列横にシフトとかそういう面倒な操作いるよね・・
だから投げそうになったんだ
>>171
なるほど。だけどそれでもかなり大変なコードになりそうだ・・・。見えているゲーム領域の左上とfield[0][0]が対応しなくなるよねきっと。
やっぱC言語ちっくなpuyoをint型にするような設計はよくないのかな。
fieldの値を基準にpuyoを描画するんじゃなくて、Puyoクラスを作って独立させて描画させるべきか。
でもfieldの状態を更新するのが難しくなりそう・・・

173 :
質問。
http://aidiary.hatenablog.com/entry/20050624/1255786339で、マリオにファイヤーボールを出させたい。
(^o) 〜〜@ な感じ。
どうやったらマリオの場所をスクロール中の画面の場所を特定できるようになるのだろうか?
マップスクロールで大幅に横に移動するー>現在のマリオ場所をとって来るー>ボールにその位置を入力ー>発射ー>ボールは画面外。
ーーーーーーーーーーーーーーーーー
|    (^o)          〜〜|@ <- ボールは画面外
| |
ーーーーーーーーーーーーーーーーー
ボールのクラスで
public void setPos(double x, double y) { // 位置設定
this.x = x;
this.y = y;
}
MainPanelクラスで
Point posX = player.getPos()
weapon.setPos(posX.x + player.getWidth() / 2, posX.y); // posX.x -> 現在のx座標、posX.y -> y座標
これだと、右にいくほどボールの発射場所がマリオから右に遠のいてしまう。

174 :
if(puyo.x % 32 == 0){ // マスのサイズで割った余り0 or not
check(map[x][y]);
}else{
check(map[x][y]);
check(map[x+1][y]);
}
Java以前の初心者スレ化してしまったな。
DXライブラリスレなみのレベルとはなさけない。

175 :
解決しました。
ボールのdraw()にマップスクロール時の座標を書き入れていなかったらかでした。

176 :
ボール発射時:左に向いていたら ー> 左へボール飛んでいく x-= 6;
右に向いていたら ー> 右へボール飛んでいく x+= 6;
private void keyConfiguration() {
if (leftPressed) {
player.move(LEFT);
} else if (rightPressed) { でキーを拾って
public void move(int dir) {
if (dir == LEFT) {
vx = -SPEED;
direction = LEFT; // face to left
} else if (dir == RIGHT) {
vx = SPEED;
direction = RIGHT; // face to right でプレイヤーの向きは分かった。
public void move() {
if (isInStorage()) {
return; // do nothing}
if (player.direction == LEFT){
x -= SPEED;}
if (player.direction == RIGHT){
x += SPEED;}
if (y < 0 || y < -(panel.scrolledHeight())) {
store();
}
コンパイルはokみたいで実行したら
Exception in thread "Thread-2" java.lang.NullPointerException
at theLastSamurai.Weapon.move(Weapon.java:51)
at theLastSamurai.MainPanel.run(MainPanel.java:80)
at java.lang.Thread.run(Thread.java:679) 何故?

177 :
初心者以前に馬鹿じゃねえの。
例外のスタックトレースも読めないとか池沼か。

178 :
javaでRPGをつくりたいのだが、画像の素材は、どこかにかありませんかな
gif,pngの32x32の画像がいい
unityってゲームつくりには役に立つ?

179 :
そうかもしれないし、そうじゃないかもしれない。

180 :
ツクール素材でもググってみれば

181 :
javaをやっていると体にわるいな
過労死、鬱病、倒れそうだ

182 :
javaに関する本を何冊持っていますか?
Javaの本高くて困ります
今の時代amazonがあるから助かっているけどそれでも本代はかさむ
このデフレ時代、値段が下がらなかったのは本と税金、社会保障費ですかね

183 :
良い本知ってるがこれでは教える気にならんな

184 :
>>182
とりあえず三冊かな

185 :
ほとんどネットで十分だからな。
結城のデザインパターンとか役にたたないし、
パーフェクトJavaとサーブレット関連、アンドロイド関連で合計3冊あれば良いだろう。

186 :
ゲームはC++がメイン?
JAVAはサーバーに使われるのがメインですか?

187 :
そうかもしれないし、そうじゃないかもしれない。

188 :
初めJavaでゲーム作るのが難しく感じたけど今やC++よりやりやすく感じる俺は。
やっぱC++はGUIが面白くないしわざわざWINAPI弄ろうという気にもならないしモチベ下がる
あとクラスに分けてちゃんと作っていこうとするとJavaのほうが管理しやすいから好きだ

189 :
>>188
それってJavaが良いわけじゃなくて、Swingとかの
GUIライブラリとか良いってだけじゃん
C++だってクロスプラットフォームのGUIライブラリはあるだろ?
この部分は別にJavaならではって感じがしない

190 :
>>189
いや、そこがでかいんだと思う
同じ「ライブラリ」という概念でもJavaのそれとC++のそれではまるで違うと思う
VC++でライブラリ登録するのだるすぎるし

191 :
マインクラフトみたいなゲームを作りたい。2Dで。
ttps://s3.amazonaws.com/ld48/ld22/index.html
今、プレイヤーとマップは一応出来ている。
プレイヤーに攻撃値を持たせて、壊せるオブジェクト(敵も含める)に耐久値を設定する。
耐久値が0になったら決まったアイテムを落とす。
仮にオブジェがいっぱいあったとして、毎回一個ずつ確認していくのは何か変だ。
こんなゲームを作るときはどうしてます?

192 :
何を確認すんの?

193 :
kdツリーとかRツリーとかオクツリーとかBSPとかそのへんじゃない

194 :
超巨大な一枚マップを8x8分割とかして、各区画オブジェクトがそこにいる
全ての人物などの参照をもっていれば良い。
それでプレイヤーのいる区画以外の全てのオブジェクトを無視できる。

195 :
二分岐探索や二分ヒープ木はhaskellですこし触ったことがある程度。
色々な木を勉強します。
>> 194
もう少し詳しく教えてもらえないでしょうか?
マップを分割することによってオブジェクトの状態検査の数が減るー>メモリ節約?
もしくは、画面に映っているヤツら(プレイヤーからの距離計算で出す)
だけ判定に渡す。<-結局全てのモノを判定しているからボツ?

196 :
http://itpro.nikkeibp.co.jp/article/COLUMN/20070409/267726/

197 :
>>195
あなたの文章がおかしくて推測に苦労しますが、
例えば巨大マップ上に数万のキャラクターがいて、
forループで全部更新するのが重いという話でしょう?
画面外の、それまた遠くにいるようなのが完全に停止していても良いとか、
ゲームの内容しだいで条件もかわるわけで、なんともいえませんなー。

198 :
そうです。
ま〜マインクラフトやゼルダの伝説時空の章などは画面外では完全に停止していると思います。
それで、
敵やオブジェクトが画面内に入った時だけ動くだとうと推測しているノですが。

199 :
マップが1000万x1000万だとして、それを1万x1万エリアに分割すると、1エリアの大きさは1000x1000になる。
それでプレイヤーがいる1エリア内(1000x1000)だけを更新するとすれば次のような形になるはず。
class GameMap {
Area[][] area2D = ...;
}
class Area {
final Point index;// (GameMap.area2D[index.x][index.y] == this)
List<Enemy> enemyList; // エリア内にいるモンスター
List<Item> itemList; // エリア内にいるアイテム
}
Player {
Area area = GameMap.area2D[0][0];
}
class GameScene {
void onUpdate(){
Player player = ApplicationScope.getPlayer();
Area area = player.area;
// プレイヤーのいるエリアを更新する
for(Enemy e : area.enemyList){ ... }
// 例えばプレイヤーがエリア内で西側にいる場合、プレイヤーのいるエリアからひとつ西側にあるエリアも更新する
if(...) {
Area west = GameMap.area2D[area.index.x-1][area.index.y];
for(Enemy e : west.enemyList){ ... }
}
}
}

200 :
おお。すごい!
こんなに丁寧に書いていただきありがとうございます。
これだと、quadtreeを使わなくて済みそうかな?
よし、これで頑張ってみようと思います。

201 :
ゲームボーイの”くにおくん”の様に攻撃ボタンを押した時だけ
キャラの横(キャラの向き)に攻撃画像が表示される。
そしてもし敵がその範囲内であれば敵がダメージを受けるような事をしたいです。
インベーダーの様に弾に攻撃オブジェをいっぱい最初に作って画面外に置いて、
攻撃が呼ばれるたびにそれを取り出す方法ぐらいしか分からないです。
本来?はどうやればいいのでしょうか?

202 :
>>200の人だろうか。まあがんばれよ。

203 :
自分はまだ199で教えてもらったのを勉強してるところですが.
は〜、早くマインクラフトやゼルダみたいなの作りたい。

204 :
Java3Dってなんでこんなに人気ないの・・・

205 :
みんなjavaの基礎文法を習得するだけで疲れるじゃないの?
3DってopenGL,unityがあるからじゃないのか?

206 :
>>204 本気で3Dで色々したいとJavaで頑張る理由が無くて、
むしろJavaで作るのはいろんなデメリットを請け負うから。
3Dだと、いろんな事したくなるとJVMじゃなくてネイティブの方のライブラリを叩きに行く必要があるから、
結局JavaよりもC++なりなんなりの方がずっと素直なんだよ。
そのうえ、結果として、Javaなのに移植性が低くなるし、さらに悪い事にそのくらいの移植性だったら、
C++とかの方がいいライブラリがあったりして、自前で頑張る必要ないし。
ここまでしても、結局の所ゲームだったら素直に対象OSなり固定して、其れに特化したのをC++で作ったほうが性能も生かせる。
さらに今じゃ、C#とかあるんで、選択肢的にJavaは宗教上の理由でもなければ選ぶ利点ないでしょ・・・。

まぁ、単純にJavaなら簡単そうで入ってきた人達が、
3Dをやろうとした途端、とんでもない壁にぶつかって、
その中でやる気のある人はC++なりに行き、そうで無い人はやめた。
って感じがするけどね。

207 :
脇からだけど2Dもどき程度にJava3DやOpenGL使おうって場合はどうかな。

208 :
C#でSlimDXとかやってる人も少ないと思う。
Java3DやJOGLよりLWJGLのほうが海外だと主流みたいだよ。
英語がダメで日本語情報源にしがみつきたいならUnityが良いだろう。

209 :
lwjgl+slick2dが楽で良い

210 :
>>205-209
なるほどありがとう

211 :
組み込みスクリプトにサンドボックスを設定して
ユーザが安全にアドオンを作れるようにしたい
何か良いフレームワークはある?
参考
http://ja.softuses.com/15490

212 :
lwjgl+slick2dほんとに英語しか資料がないからハードルめちゃ高い
日本語の情報なんか個人が作ったブログみたいなの頼りにするしかないもんな
書籍とかいいのあったら教えてほしいわ(日本語の)

213 :
少なくとも書籍があるんなら見つけてると思うぞ。
ちょいと気になったんだけどJOGL、Java3D、lwjgl、slick2D、遊ぶ側の導入が楽なのはどれ?
全部楽だよってなら気にする必要はないけど地味に重要な気がする。

214 :
遊ぶ側ならJVMさえインスコしてあればどれも同じじゃねーの

215 :
slick2Dはlwjglのラッパーだからlwjgl同梱必須だよ
アプレットで動かさなければどれも同じ

216 :
もしかしてJVM+配布側の配慮で全部OKなのか。

217 :
質問があります。よくゲームフィールドを定義するのに
private int[][] map = new [12][24];
のような二次元配列を用意し、
二つのfor文の中で
switch(map[j][i]) {

218 :
}

219 :
おい

220 :
質問
MouseMostionListenerのmouseDragged(MouseEvent e)に関して、
e.getX(), e.getY()で得られる値はどうやらドラッグ開始した地点の座標?
故にドラッグ中マウス移動しててもカレントのマウス座標が得られなくて困った
加えてドラッグ中はmouseMove(MouseEvent e)メソッドのほうのそれらも座標が更新されない(当然?)
e.getXOnScreen()なるメソッドはドラッグ中も更新されるのだけれど、スクリーン基準の座標はどうも扱いづらいしバグを生みそうでできれば避けたい
何か良い方法ないですかね?

221 :
Swingがシングルスレッドなのが原因かもしれない
ドラッグ中は処理が止まって離すときにそれぞれ更新される?
素直に自前でスレッド用意することにします

222 :
うおぉ〜漸く球がキャラの向いている方へ発射されるようになった。
長かった。

223 :
ボンバーマンの爆弾のアルゴリズムってどうすればわかりやすいですかね
爆弾を置くのはボンバーマンだから、ボタン押したときに
ボンバーマンが爆弾クラスをnewする設計でいいのかな
すると、Factoryパターン?
そんなことするより所持可能な最大ボム数(8だっけ?)を、
どのキャラも初めからnewしてリスト登録しておくべきか
・爆弾が時間に左右されること
・爆発の連鎖があること
・後から表示された爆発が先に爆発する可能性があること
この辺りがゲームプログラミング初心者の自分には難しいです

224 :
最初はメインプログラムに全て詰め込んで後々再利用出来そうな処理だけ他クラスで良いんじゃね

225 :
>>130のサイトのマリオカート凄いな
自分の自作ゲームは数十倍もサイズがでかいのに何百倍もクオリティが低くて少し凹む

226 :
かいじょかいじょ

227 :
おお〜やっと規制解除された!

228 :
oggをツクールみたいにループ再生したいんだけど、コメントをどうやって取得すればいいのかわからん

229 :
よかったじゃん

230 :
jnlp を置いたディレクトリの絶対パスが日本語文字を含んでいたら動作しなかった
なんてこった。配布するとき困る

231 :
drawImage とかで指定する ImageObserver って何の意味がありますか?
自分いつも null にしてます。というか this とか指定すると変になりました

232 :
AffineTransform で混乱する…
「座標系」を変換するのか、「座標」を変換するのか
右手系なのか、左手系なのか
どうもはっきりしない

233 :
通常nullだってどっかで読んだ
多分非同期読み込みとかに使うんじゃない

234 :
>>233
サンクス。null で良かったか

235 :
Image をネットワークから読み込んでいる場合、まだダウンロードが完了しておらず、画像を表示できない場合がある
そのような場合に ImageObserver を指定しておくと、読み込みが完了したタイミングを知ることができる
そのタイミングで、例えば、読み込み完了した画像を改めて表示し直すことができる
闇雲に this を指定すれば何か役に立つというわけではない

236 :
>>235
なるほどっす。
Swingのイベントディスパッチスレッドから呼び出されるわけじゃないのかな?
Swingコンポーネント上でImage使ってる時は注意が必要かも

237 :
GCが動いてゲームループがトマトになる現象を防げるか…?
オプション: -XX:MaxGCPauseMillis=200
Sets a target value for desired maximum pause time. The default value is 200 milliseconds.
参照:
http://www.oracle.com/technetwork/articles/java/g1gc-1984535.html

238 :2013/09/19
.classファイルをバイナリエディタで見ると、先頭に
cafe babe
っていうマジックナンバーが見える。凝ってるな
TOP カテ一覧 スレ一覧 2ch元 削除依頼
ロックマンワールド5をFC風にリメイク Part1 (215)
RPGコンストラクションソフトを作りたい (113)
そろそろ本格的にMMORPGつくってみようぜ! (332)
【3Dゲームエンジン】CryENGINE3【商用有料】 (151)
★ギコ猫旅団の『必修!ゲーム製作相談所!』 (492)
【我妻】未来日記のゲームつくろうぜ【由乃】 (266)
--log9.info------------------
【独占禁止法】「Windows RTからIE以外を閉め出すのか」、MozillaがMicrosoftを批判 (148)
【詐欺】Surface価格 当初199ドル → 499ドルから【嘘つき】 (175)
【パクリ】マイクロソフト、アップルの「iTunes Match」に似たサービスを開始か (111)
【失敗でした】Microsoft、Windows 8で「Windows Live」ブランドを無かったことに (219)
Barnes & Noble、マイクロソフトの特許戦略に関し米司法省へ調査を要請 (100)
【笑い者】Windows8 PC発売3日間の販売台数は、Windows7出荷時のわずか3分の1 (170)
■見過ごすと危険なWindows 8セキュリティの落とし穴 (103)
【製品】Windows 8タブレット開発に"面倒な制約"と台湾ベンダー (11/06/01) (167)
■Webアクセス、Windows 7の4%に対しWindows 8は1.18% (181)
【不具合】Windows 8の「没入型」画面表示、IE 10の新機能にセキュリティ上の懸念 (117)
【パクリ】マイクロソフト、「Siri」対抗の音声認識技術を「Windows Phone 8」でデモ (101)
AndroidのパテントをめぐるMicrosoftのやり口に対しGoogleが“それはゆすりだ” (475)
Windowsに危険な脆弱性、動画の再生でウイルス感染の恐れも (196)
Windowsのリモートデスクトップで使うポートへの攻撃が急増中、JPCERT/CCが注意喚起 (179)
■Windows 8には、DVDの再生機能が搭載されていない (133)
Windows8って壮大に大コケしそうだよな (154)
--log55.com------------------
東海実況 他人になすりつける=チョン
東海実況 荒らしは東海地方民でもなく、日本人でもなかったことが判明
東海実況荒らし「立てれば立てるほど最後に手動連投で埋める奴が苦しむわけだがwww」
東海実況 揉め事の原因はいつだってチョン
東海実況 荒らしの目的とは?
東 海 実 況
東海 実況
東海地方実況