タグ付けされた質問 「java」

Javaは人気のあるオブジェクト指向プログラミング言語であり、ほとんどのハードウェアおよびソフトウェアプラットフォームでJavaプログラムを変更せずに実行できるランタイム環境です。

12
ゲーム内通貨に使用するデータ型は何ですか?
単純なビジネスシミュレーションゲーム(Java + Slick2Dで構築)で、プレーヤーの現在の金額を、floatまたはint、または他の何かとして保存する必要がありますか? 私のユースケースでは、ほとんどのトランザクションはセント(0.50ドル、1.20ドルなど)を使用し、単純な金利計算が含まれます。 私はあなたがfloat通貨のために決して使うべきでないと言う人々を見て、同様にあなたが通貨のために決して使うべきでないと言う人々を見ましたint。int必要なパーセンテージ計算を使用して丸める必要があるように感じます。何を使うべきですか?
96 java  data  economy 

8
Javaは深刻なゲーム開発に適していますか?[閉まっている]
私はインターネットを精査しましたが、Javaゲーム開発用のリソースはそれほど多くなく、C ++ほど多くはありません。実際、ほとんどのエンジンはC ++で記述されています。jMonkeyEngineで作成したゲームをプレイしようとしましたが、ゲームが非常に遅く、コンピューターがフリーズするほどでした。他のJavaアプリケーションは実行していませんでした。対照的に、私のコンピューターは最新の3Dゲームのほとんどを簡単にプレイできます。今すぐJavaの学習と改善を続けて、後でC ++を学習する必要があることが判明した場合、切り替えを行うのは難しいかもしれません。 Javaは深刻なゲーム開発に受け入れられる言語ですか?真面目な言い方をすれば、私は現代のコンピューターで大きな遅れのない高品質のグラフィックスを意味します。また、コンソール用のゲームの作成を検討したいと思います。

5
ゲームの俳優は自分自身を描く責任がありますか?
私はゲーム開発は初めてですが、プログラミングは初めてです。 私は(再び)JavaScriptのcanvas要素を使用してPongタイプのゲームで遊んでいます。 Paddle次のプロパティを持つオブジェクトを作成しました... width height x y colour 次のPongようなプロパティを持つオブジェクトもあります... width height backgroundColour draw()。 draw()現在、メソッドはをリセットしてcanvasおり、そこで問題が発生しました。 必要があるPaddleオブジェクトが持つdraw()その描画方法は責任、または必要があるdraw()のPongオブジェクトがその役者を描くための責任がある(私が間違ってる場合、私はそれが正しい用語であると仮定し、私を修正してください)。 私はのためにそれがadvantagousだろうと考え出しPaddle自体を描画するために、私は2つのオブジェクトをインスタンス化するように、PlayerとEnemy。それはでなかった場合Pongのdraw()、私は二度同様のコードを記述する必要があると思います。 ここでのベストプラクティスは何ですか? ありがとう。


6
ゲームデータを保存するのに適したファイル形式は何ですか?[閉まっている]
いくつかのカスタムゲームデータを保存する必要があります。地図、プレーヤーなど それらすべてに「サブオブジェクト」があります。たとえば、マップとマップにはタイルの「配列」があります。すなわち、階層データ。うまくいけばバイナリはありません。 これらに適したフォーマットは何でしょうか? これまで私は考えてきました: シリアル化:これは高速で簡単ですが、基になるクラスを変更すると壊れる傾向があります:( XML:これを解析するのは本当に嫌いです。私のテストケースは100行以上のコードであり、非常に単純な形式でさえ、「忙しい仕事」のように思えました。 INI:階層データにとっては本当に不器用です。 Protobuf:使用したことはありませんが、クラスを変更した場合は、手作業で何度もいじり、中断する必要があることを読んでください。 別のオプション?だから私はここにいる! 編集:これはJava btwです。 編集2: 「Controlled Binary Serialization」に決めました(以下を参照)。 長所: これは速い (ディスク上)小さく、読み取り/書き込み中に簡単に圧縮/解凍できます。 ゲームやツールセットからの読み取り/書き込みは非常に簡単です。 オブジェクトに含める/除外するものを決定できます。 オブジェクト/データはネストできます。 短所: 手動で編集することはできません(XML、YAMLなど) スクリプトで簡単に読み取り/変更できない デフォルトでは、Javaシリアル化は他の実装に比べてかなり遅い/肥大化していますが、安定して動作します
37 java  file-format  xml  data  file 

7
ボクセル/マインクラフトタイプのゲームのレンダリング速度を改善するにはどうすればよいですか?
Minecraftの独自のクローンを作成しています(Javaで作成されています)。今はうまく機能します。40メートルの視聴距離で、MacBook Pro 8,1で60 FPSを簡単に達成できます。(Intel i5 + Intel HD Graphics 3000)。しかし、視距離を70メートルにすると、15〜25 FPSにしか達しません。実際のMinecraftでは、問題なく遠方(= 256m)に表示距離を置くことができます。だから私の質問は、ゲームをより良くするために何をすべきですか? 私が実装した最適化: ローカルチャンクのみをメモリに保持します(プレーヤーの視聴距離に応じて) 錐台カリング(最初にチャンクで、次にブロックで) ブロックの実際に見える面のみを描く 可視ブロックを含むチャンクごとのリストを使用します。表示されるチャンクは、このリストに追加されます。それらが非表示になると、このリストから自動的に削除されます。ブロックは、隣接するブロックを構築または破壊することにより、見えなくなります。 更新ブロックを含むチャンクごとのリストを使用します。表示可能なブロックリストと同じメカニズム。 newゲームループ内ではステートメントをほとんど使用しません。(私のゲームは、ガベージコレクターが呼び出されるまで約20秒実行されます) 現在、OpenGL呼び出しリストを使用しています。(glNewList()、glEndList()、glCallList())ブロックの種類の各側に。 現在、私は照明システムを使用していません。私はすでにVBOについて聞いたことがあります。しかし、私はそれが何であるかを正確に知りません。ただし、それらについてはいくつか調査します。パフォーマンスが向上しますか?VBOを実装する前にglCallLists()、呼び出しリストのリストを使用して渡したいと思います。代わりに千回使用しglCallList()ます。(実際のMineCraftはVBOを使用していないと思うので、これを試してみたいと思います。正しいですか?) パフォーマンスを改善する他のトリックはありますか? VisualVMプロファイリングはこれを私に示しました(わずか70フレームのプロファイリング、70メートルの視聴距離): 40メートル(246フレーム)のプロファイリング: 注:別のスレッドでチャンクを生成しているため、多くのメソッドとコードブロックを同期しています。ゲームループでこれを行う場合、オブジェクトのロックを取得することはパフォーマンスの問題だと思います(もちろん、ゲームループのみがあり、新しいチャンクが生成されない時間について話します)。これは正解? 編集:いくつかのsynchronisedブロックといくつかの他の小さな改善を削除した後。パフォーマンスはすでにはるかに優れています。70メートルの新しいプロファイリング結果は次のとおりです。 それがselectVisibleBlocksここの問題であることはかなり明らかだと思います。 前もって感謝します! マルティン 更新:いくつかの追加の改善(for eachの代わりにforループを使用する、ループ外で変数をバッファリングするなど)後、60の距離を表示できるようになりました。 できるだけ早くVBOを実装するつもりだと思います。 PS:すべてのソースコードはGitHubで入手できます:https : //github.com/mcourteaux/CraftMania

3
チームはソースファイルの上書きをどのように防止しますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Game Development Stack Exchangeで話題になるようにします。 4年前に閉鎖されました。 たとえば、ゲームエンジンなどが複数の人によって同時に処理されているときに、上書きをどのように防ぐことができるのか、ということが起こりました。 開発者1が作業してAudio.cppおり、開発者2も作業をしているとしましょう。Audio.cppこれは、一般的に大規模なチームで上書きに対処するためにどのように管理されていますか?(つまり、開発者2がファイルを開くのを停止して、開発者1が終了するまで)
26 project-management  version-control  teamwork  java  2d  collision-detection  vector  collision-resolution  unity  directx  directx11  directx10  xna  ios  monogame  windows-phone-8  xamarin  design-patterns  oop  xna  collision-detection  collision-resolution  bounding-boxes  rotation  collision-detection  mathematics  javascript  algorithm  separating-axis-theorem  xna  2d  monogame  image  xna  directx  graphics  performance  opengl  2d  3d  c++  directx11  unity  c#  scale  c#  xna  collision-detection  collision-resolution  leaderboards  scoring  glsl  srgb  tilemap  three.js  tiled  unity  physics  xml  dialog-tree  xna  c#  .net  opengl  lwjgl  vbo  physics  graphics  procedural-generation  simulations  water  opengl  java  textures  lwjgl  frame-buffer  unity  unity  2d  collision-detection  collision-resolution  trigonometry  java  android  libgdx  xna  c#  frame-rate  c++  unreal-4  procedural-generation  java  graphics  lwjgl  slick  c++  software-engineering 

4
再起動しないテストワールドを実装する方法
次のことを行う方法についてのアイデアを探しています。Javaで単純な「世界」を書きたいです。既存のオブジェクト間のさまざまな動作をシミュレート/観察するために、後から新しいオブジェクトを開始してから追加できるもの。その後、古いオブジェクトをしばらく見てから新しいオブジェクトをコーディングし、それらを既存の世界にロード/ドロップします。問題は、一度世界を開始または停止して再起動したくない、数週間実行したいが、オブジェクトをドロップして、やり直し/書き換え/削除/作成/変更する機能が必要なことです再起動を必要とせずに時間をかけて。世界は、世界を視覚的に表すタイルマップGUIを使用して、X / Yロケーションの100 x 100配列のようにシンプルにすることができます。オブジェクトを監視し、それぞれに「行動するチャンス」を与えるために、何らかの種類のティックタイマープロセスが必要であることを知っています 例:月曜日にWorld.javaをコーディングし、実行したままにします。それから火曜日に、Rock.javaと呼ばれる新しいクラスを作成します(動かない)。次に、既に実行中のワールドにロード/ドロップします(ワールドアレイ内のランダムな場所にドロップし、移動することはありません)。それから水曜日にCat.javaという新しいクラスを作成し、再びランダムに配置して世界にドロップしますが、この新しいオブジェクトは(時間単位で)世界中を移動でき、木曜日にDogというクラスを作成します。また、移動しますが、隣の場所にある場合は別のオブジェクトに「作用」することができ、逆もまた同様です。 ここにあります。将来の(および現在存在しない)オブジェクトを検出/ロード/追跡する方法を知るために、実際のワールドクラスをコーディングするのにどのような構造/設計が必要かはわかりません。 Javaを使用してこのようなことをどのように行うかについてのアイデアはありますか?

2
JavaゲームのようにRPGでアイテムを定義するにはどうすればよいですか?
私は何気なくJavaでRPGタイプのゲームに取り組んでいますが、アイテムごとに異なるクラスを作成せずに、さまざまなことを実行できるアイテムをどのように持つことができるかを理解するのに苦労しています。 例として、木を切り刻んでモンスターを攻撃できるxを作成するにはどうすればよいですか? チョッピングまたは武器クラスのいずれかを拡張すると、他のクラスを拡張できません。 チョッピングがあり、武器がインターフェイスである場合、短剣がモンスターを攻撃し、別のaが木を切ることができるときに、多くの重複したコードがあります。 単一のItemクラスを持ち、ファイルからアイテムとそれぞれの機能をロードする方法があることを望んでいます。それが可能な場合、どうすればできますか?そうでない場合、ゲームにアイテムを入れる最良の方法は何ですか?
21 java 

3
障害物の周りの多くの群がっている敵を効率的に経路探索する
私はゲームの敵の経路探索を改善しようとしています。現在、彼らは基本的に、プレイヤーとプレイヤー間の角度を計算し、その方向に移動することにより、プレイヤーの正確な位置に向かって絶えず移動しています。また、敵が互いの上に積み重なるのを防ぐ群れアルゴリズムを持っているので、敵が互いを挟むのではなくグループになります。 ただし、タイルベースのマップを追加したので、たとえば障害物や壁の周りを敵が通過できるようにする必要があります。私は最初、群れアルゴリズムが壁や障害物を遠ざけるオブジェクトと見なすように、「歩行不可能な」タイルに分離値を追加しようとしました。私の最初のテストでは、敵が歩くことのできないタイルのない目に見えない「壁」にぶつかったことが示されたので、これが実現可能かどうかはまだ解明していません。 A *を使用してプレーヤーへのパスを計算し、群れを防ぐために群れアルゴリズムを使用するには、パフォーマンスが重すぎるのではないかと考えていました。もともと私のゲームは波ベースのシューティングゲームになる予定でしたが、代わりにホットラインマイアミの静脈内でレベルベースにすることを決めたので、たまに大群とともに敵を減らし、それらが強くなります。 これは実行可能なソリューションですか?ゲームエンジンとしてSlick2DでJavaを使用しています。または、これら両方の問題に取り組むより良い解決策/アルゴリズムがありますか?

4
メインゲームループが制御されずに実行されても問題はありませんか?
私のゲームループがシステムの許す限り高速で実行されたときに、害が生じる可能性があるかどうか疑問に思っていましたか? 現在、ナノ秒単位で経過時間を測定することで、問題なく事前定義された速度でゲームロジックとレンダリングロジックを実行するループがあります。実際、私がループ内で行うロジックは、毎秒一定量の呼び出しに合わせてクロックされます。 ループ自体は、私のマシンでは1秒間に約1,170万のループに達するのと同じくらい高速で実行されます。 ループ(単純な擬似コード): while(!isGameOver){ if(canPollInputs){ pollInputs() } while(canStepLogic){ stepLogic() } if(canRender){ render() } } 私の質問は、基本的に、その単純なループが、制御された速度で実行されていない場合、システムに害を及ぼすことができるかどうかです。 編集:つまり、ロジックは1秒に30回(30 tps)で実行され、レンダラーは60 fpsで実行され、入力を1秒に100回ポーリングしています。 。ただし、ループ自体は調整されません。 編集:Thread.sleep()たとえば、メインループを1秒あたり250ループまでスロットルすると、削減につながりますが、ループは目的の250ではなく、1秒あたり約570ループで実行されます(デスクトップマシンにいるときにコードを追加します。) 編集:ここで、物事を明確にするために動作するJavaゲームループに行きます。また、自由に使用できますが、あなたのものではありません;) private void gameLoop() { // Time that must elapse before a new run double timePerPoll = 1000000000l / targetPPS; double timePerTick = 1000000000l / targetTPS; double timePerFrame = …

3
ポーリングとイベント駆動入力
入力メソッドにポーリングを使用してゲームを開発しています。しかし、ゲームメニューやその他のUIコンポーネントをさらに深く掘り下げているので、おそらくイベントドリブンの入力が必要なことがわかりました。おそらく、UIにイベントドリブンを使用し、「world」入力をポーリングすることで、両方を持つこともできます。どうすればいいのか興味があります。 私はポーリングを次のように定義しています:更新ループごとに、どのキーが押されているか、マウスがどこにあるか、ボタンが押されているかを確認し、収集した情報に基づいてアクションを実行します。 イベント駆動型を定義しています:割り込みベースのイベント、イベントが発生し、割り込みがトリガーされ、イベントに基づいてコードブロックが実行される場合。 すべてのイベント駆動型、すべてのポーリングに行くのが最善だと思いますか、それとも両方の組み合わせが受け入れ可能ですか?どちらかの長所と短所がある場合は、それらをリストしてください。ありがとう。 編集 ゲームはJava / OpenGLベースであるため、Windows / Mac / Linuxにリリースされます。それをモバイルデバイスに拡張する可能性は低いです。ゲームはRTSスタイル、3人称3Dです。 編集2 私はこれを実装した方法にまだ完全に満足していませんが、私が向かっているのはUIでイベントをキャッチすることであり、イベントがUIコンポーネントのいずれかによって処理されない場合、イベントをピッキング/選択のための「世界」。何かのようなもの: @Override private boolean handleEvent(Event event) { if(hud.handleEvent(event)) { return true; } return WORLD.handleEvent(event); } この方法では、ボタンの背後にあるオブジェクトを選択するためにUIからクリックが漏れることはありません。 現在、私のカメラコントロールはまだポーリングに基づいており、今のところ機能しているようですが、後で更新する可能性があります。 すべての回答に感謝します。申し訳ありませんが、1つしか選択できません。
19 java  input  events  polling 

8
不完全なポンAI
だから、私はLWJGLを使用しながらJavaとOpenGLを学び始めています。簡単に始めるために、私はAtari Pongのクローンを書いています。ゲーム画面、衝突検出を正しくセットアップし、すべてのゲームが実際に動作しています。実際に2プレーヤーのゲームであれば、これまでにやるつもりですが、これをシングルプレーヤーのゲームにすることを計画しているので、2番目のプレーヤーを制御するシンプルなAIを考え出す必要があります。 ボールがどこにヒットするかを知ることは非常に簡単なようであり、常にボールにヒットするAIを作成するのは簡単なように思えますが、ゲームに勝つことができるようにしたいので、IAを常にヒットさせることはできません玉。 そこで、人間のような欠陥をAIに追加するために、これをどのようにコーディングすればよいかという質問があります。AIが特定のポイントで失敗するかどうかをランダムに決定する必要がありますか?または、私がここで見逃しているよりスマートな(またはおそらく明白な)ものがありますか? どうもありがとうございました。
19 java  ai 

14
初年度CS専攻へのアドバイス[終了]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 2年前に閉店しました。 主にJavaベースのコースであったCSの1年目の終わりに近づいています。ゲーム開発で足を踏み入れたいのですが、どこから始めればいいのかわかりません。 一部の人々は、おそらく最も簡単であり、主にゲームの設計とゲーム全体がどのように適合するかに焦点を当てることができるため、Cスタイルのスクリプト言語(簡単に習得できるはずです)を備えたゲームメーカーから始めることを提案しています。 APIを介したopenglとdirectXの抽象化が優れているため、多くの人がXNAを推奨しているようです。また、C#はJavaに非常に似ていると聞きます。 また、Javaでのゲームプログラミングも非常に快適であり、マルチスレッドおよび2DグラフィックスAPIについての追加の読書を行っているため、Javaでのゲームプログラミングも検討しています。 最後に、友人が最近私にpygameを見せてくれました。 C ++が良い出発点であるかどうかはわかりません。初心者のゲーム開発者向けに私が見た投稿の多くは、最初のゲームプロジェクトにC ++を推奨していません。 特にJavaのバックグラウンドからゲーム開発に携わった人たちからのインプットに感謝します。
17 game-design  java 

1
OpenGL:ディスプレイとglOrtho / glViewportのサイズ変更
私はいくつかのソースからこの質問を調査しましたが、「はい、それは正しい思考です」または「いいえ、ここでそれが行われた方法です」という確固たる答えをまだ見つけていません。 OpenGLレンダリングで解像度の独立性を確保しようとしています。私がそれについて行くべきだと思う方法は、glOrtho私が世界座標にしたいものを使って投影を作成することです。たとえば、glOrtho(-50.0, 50.0, -50.0, 50.0, 1.0, -1.0)。次に、ビューポートを画面解像度、つまり-に設定しglViewport(0, 0, 800, 600)ます。最後に、ウィンドウのサイズが変更されるたびに、glViewport更新された画面解像度でを呼び出します。これにより、フィギュアが拡大縮小されます。 これは、モデルが異なる解像度で同じ割合の画面スペースを取ることを保証する正しい方法ですか?解像度と同じ投影法を使用する必要がありますか?glOrtho他の人がウィンドウの解像度を使用するべきであると言っているのに対して、異なる必要があると答えた人もいました。 考え?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.