問題タブ [artemis]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
entity - アルテミス エンティティ システム フレームワーク
私は Artemis Entity Systems フレームワークを初めて使用します。特定のコンポーネントを含むすべてのエンティティを取得する方法があるかどうかを知りたいですか? (あるはずなのですが、見つけられませんでした。)
たとえば、 を持つすべてのエンティティを見つけて、その中EnemyComponent
にあるエンティティと衝突するかどうかを確認したいとBulletComponent
します。これどうやってするの?
java - アルテミスで使用するタイル マップのデータ構造
artemis-odbとlibGDXを使用して、ターン ベースのタイル マップ ベースのゲームに取り組んできました。
草、砂、水、山など、マップにさまざまな地形タイプが必要でした。これらのさまざまな地形タイプごとに、通過する移動コストが異なり、ゲーム プレイに関連するさまざまな追加プロパティがありました。
現在、いくつかの異なるアプローチを検討しています。
マップをシステム
GameMapSystem
にして、各タイプの地形に関連するコンポーネント (TerrainStats
、場合によってはスペル エフェクト コンポーネントExploding
など) を持つエンティティによって表される各タイプの地形を持つことができます。私の主な関心事は、地形タイプのエンティティへのタイルのマッピングを管理する方法です。int[][]
概念的には、地形エンティティの ID に対応する値でを維持するのと同じくらい簡単なはずですが、その場合、一時的なマーカー コンポーネント (Exploding
) が特定の地形タイプすべてに一度にアタッチされます。これは最適とは言えません。それでは、タイルごとに個別のエンティティが必要になるのでしょうか? その場合、エンティティ フレームワークに追加のオーバーヘッドを作成していませんか?また、ゲーム マップと地形タイプを POJOS にして、特殊効果用のマーカー コンポーネントを使用してマーカー エンティティを作成することも検討しました。ただし、このように
GameMap
すると、さまざまなシステムがオブジェクトを処理できるようにするために、オブジェクトを勝手に渡しているように見えます(レンダリング、衝突、パスなど)。さらに、ゲーム マップは、パス ロジックを実行するために、その時点でマップ上にあるエンティティをその位置で追跡する必要もありませんか? 可能であれば、エンティティ フレームワークのドメインの下でエンティティの管理を完全に維持することをお勧めします。メンテナンスが少し簡単になるからです。
まだ調べていないアプローチがあるかどうか興味があります。それ以外の場合は、見落としていた方法 1 を修正する方法がない限り、方法 2 に傾倒しています。
java - JRuby で Artemis ESF を使用する
JRubyのArtemis エンティティ システム フレームワークを使用しようとしています。JRuby に変換しようとしている Java コードは次のとおりです。
これを実行すると、出力は次のようになります。
ConsoleOutputSystem.process() メソッドは 10 回呼び出されます。ここに私のJRubyコードがあります:
出力は次のとおりです。
したがって、ConsoleOutputSystem コンストラクターは呼び出されますが、ConsoleOutputSystem.process() は呼び出されません。@world.initialize と @world.java_send :initialize の両方を使用しようとしましたが、出力は同じです。私が試したもう 1 つのことは、java_signature 'protected void process(Entity)' を ConsoleOutputSystem.process() メソッドに追加することです。
Artemis パッケージの他のいくつかのクラスには、initialize() という名前の保護メソッドがありますが、それが私の問題に関連しているかどうかはわかりません。
[編集]
質問を投稿してから、私はいくつかの進歩を遂げました。@world.java_send :initialize が機能し、正しいメソッドが呼び出されます。うまくいかないのは Aspect.get_aspect_for_all() です。Java Aspect.getAspectForAll() では、
引数として。JRuby では、これらのどちらも Aspect.getAspectForAll() の引数として機能しません。
機能する唯一の方法は、最初に Position インスタンスを作成し、そのクラスを Aspect.getAspectForAll() に渡すことでした。
動作するコードは次のとおりですが、おかしな感じがします。
の出力
は:
では、私の問題は、Position クラスのインスタンスを作成せずに org.jruby.proxy.com.artemis.Component$Proxy0 にアクセスする方法ですか?
[編集2]
Namek's answer のおかげで、動作するコードがここにあります。それは使用しています
そのため、JRuby クラスのインスタンスを作成してその Java クラスにアクセスする必要はありません。
libgdx - エンティティ システム ベースのゲームでのレベル パーツの変更
私は現在、artemis と libgdx を使用してエンティティ システム ベースのゲームに取り組んでおり、そのような構成でレベルの変更をどのように処理すればよいか疑問に思っています。
たとえば、マリオのようなプラットフォーマーの場合:
最初にマリオがレベルを開始すると、エンジンが新しい World() をインスタンス化し、タイルマップをロードしてすべてのオブジェクトを初期化します。
マリオがパイプを通ったら?パイプ内の世界は new World()? それとも、カメラは世界の別の部分だけに焦点を合わせていますか?
新しいワールドがある場合、アルテミスはエンティティをワールドから切り離すことを許可していないので、プレイヤー エンティティのクローンを作成して新しいワールドに追加できますか?
この種のレベルのパーツ変更 (マリオのパーツ/エイブのオデッセイ画面) を処理する方法を知っている人はいますか? アルテミスのようなフレームワークを使用してこれを達成する一般的な方法は何ですか?
clickonce - ClickOnce 配置後の例外 AppData\Local\Temp FileNotFoundException
Click once のインストール後、この例外が発生します。システム内のほとんどのユーザーはこのエラーに遭遇せず、アプリケーションは正常に動作します。このエラーに遭遇する少数のユーザーがいます。どのマシンにインストールするかは問題ではありません。
グループポリシーの問題だと思います。どんな助けでも大歓迎です。
詳細: ファイルが見つかりませんでした'C:\Users\USERNAME\AppData\Local\Temp\Deployment\Q4NW1PKL.OT1\A740DGRA.6EL\MyHelperEXEFile.exe'.
スタックトレース:
更新 - 解決済み
イベント ビューアーでアプリケーション イベントを調査したところ、クリック ワンスがインストールを実行している間に、McAfee がこのファイルを削除していたことが判明しました。ウイルスに感染したと主張。アルテミス トロイの木馬
community.mcafee.com/thread/2016
マカフィーを無効にすると、インストールを完了することができました。
c# - モノゲームまたはxnaでArtemisを使用してマウスクリックの長方形を追加するための推奨される方法またはスポットは何ですか
Artemis、Visual Studio、C#、Monogame を使用。
Artemis を理解し始めたばかりですが、クリック可能な四角形/領域をエンティティに追加する適切な場所を探していると、画面に複数のエンティティが表示されます。
基本的な単純なアイデア、2D プレイエリアでランダムに表示および移動する小さな正方形のスプライトがあります。それらをクリックしてシンプルに保ち、正方形を削除できるようにする必要があります。
Artemis には、コンポーネント、エンティティ、システムがあります。
この長方形の領域を Texture2D 正方形に追加することはわかっていますが、それは独自のコンポーネントである必要があると推測しています。
理解しようとしている
- 正方形のサイズの長方形を取得し、移動するときに正方形にとどまります。
- 一部のシステムで、この四角がクリックまたはタッチされたことを検出する方法。
アップデート
私の DrawableGameComponent エンティティで。DrawPosition は vector2 であり、メイン ゲーム ルーチンで設定されます。私の広場の場所です。それとテクスチャ サイズを使用して、長方形のサイズと位置を計算します。
AreItemsIntersecting 関数は、画面がクリックされたときにマウスの位置を取得し、それを使用して小さな四角形を作成し、2 が交差するかどうかを確認しました。クリックされた場合、オブジェクトはクリックされています。