問題タブ [gameplay-kit]
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.
ios - GKGoal 境界障害物を回避
次の方法で設定したマップ境界内にスプライト ノードを保持するのが難しいようです。
iOS 9のおかげで、目標と動作によってSKNode *enemy
動き回る があります。現在、ノードはさまよい、定義されたオブジェクトである障害物を回避します。ノードが衝突するように指示されたカテゴリwallと見なされるように、ビットマスクを設定しました(別名、通過を許可しません)。SKScene
GameplayKit
GKPolygonObstacle
私didBeginContact:(SKPhysicsContact *)contact
はこれらの衝突を処理しています。すべてが計画どおりに機能しており、この敵を手動で動かしても問題はありません。
しかし、問題は、敵がシーンの周りをうろついているときに始まりますSKGoal *wanderGoal
。
敵は予想どおりランダムに移動し、ほとんどの場合障害物を回避しているように見えますが、敵が実際にマップ バリアを通過する場合があります。これについて詳しく説明します。
マップ バリアは基本的に長方形で、この形状の左半分と右半分を表すシェルとして機能する 2 つのノードを設定しました。これらのノードの太さは 100 ポイントであるため、単なるCGPath
参照ではなくシェイプです。それらは、これらの 2 つのブラケットが機能するのと同じように機能します: [] (私の半分は真ん中で平らに接触しています)。
私の質問は次のとおりです。
- ビットマスク カテゴリの物理演算またはゴール ビヘイビアを使用して、敵がこれらの障害物を通過するのを防ぐにはどうすればよいですか? (または両方一緒に)
a は推奨される動作ですが、この目標が達成されることを保証するGKGoal
ものではないことを理解しています (ただし、 Apple の AgentsCatalogが示すように、それが起こらないことは ~ 95% である可能性があります)。しかし、私が理解していないのは、ゴールがそのような境界を「通過する」ように(しようとする)ように指示するときに、敵が境界の端に沿って単に「滑る」だけではない理由です。
この「スライド」動作は、手動で敵をシーン内で動かしたときに発生します。障害物と見なされる境界を越えて移動しようとすると、移動させている方向に向かってスライドします (他のビデオゲームと同じように)マップの境界があります)。
それで
誰かがこれを防ぐのを手伝ってくれたり、敵がこれらの(おそらく)「通行不能」エリアを通過するのを防ぐ方法を説明したりできるなら、私は最も感謝しています.
参考までに:私が何を説明しているのか、どのようにオブジェクトを作成したのかが不明な場合は、質問してください。役立つ情報を提供します。
ios - xcode 8 beta 4 の GKBehaviour により、gkagent の位置がおかしくなります
GKGoal
だから私は自分のGKAgent
行動にいくつか追加したいゲームを作成しています。
何時間も戦った後、次のプロジェクトをダウンロードしました。今回は Apple Agents Catalogからのもので、Xcode 7.3 で動作します。GKGoal(toWander:)
私はそれをSwiftに書き直して、これが私のコードである基本的なGKAgentを作成します:
シーンに追加すると
動作がなければ位置は静的ですが、追加すると位置が狂い、更新の各反復で値が次のようになります
- 位置 == (-10051366.0, 251672512.0)
- 位置 == (1368370.0, 259904576.0)
- 位置 == (-131583.0, 264841120.0)
それは単なる Xcode 8 ベータ版のバグですか、それとも私が何か間違ったことをしているのですか。私はそれを解決しようと多くの時間を費やしています。ありがとう:)
swift - ECS 内のコンポーネント間で機能を分割する方法を選択する
現在ゲームを作成しており、 Gameplaykitを使用して要素を整理し たいと考えています。
ECS (エンティティ コンポーネント システム) の概念を発見しました。これにより、機能をエンティティに追加してエンティティに追加できる小さなブロック (コンポーネントと呼ばれます) に機能を配置できます。
SpriteKit と組み合わせて使用したいのですが、私の最初のアイデアはもちろん SpriteComponent を作成することでしたが、SpriteKit の物理エンジンも使用しているため、PhysicsBodyComponent をどのように作成すればよいか疑問に思っています。 SpriteKit ノードの物理本体に直接アクセスする必要があるため、SpriteComponent に依存しますが、コンポーネントが相互に依存するのは間違っていませんか?
どうすればいいですか?
ありがとうございました。
swift - ゲーム内の 1 つの ViewController に対する複数のシーン
1 つのタイプのゲーム (特定のパズル) のメカニズムを 1 つのシーン ファイル (mygamescene.swift) にセットアップしました。同じゲームを 2 つの異なる方法 (異なるノード テクスチャを使用するなど) で異なるスタイルにし、ゲーム内でこれらを異なる方法で表示し、メイン画面からアクセスできるようにしたいと考えています。
同じゲームの仕組みを使用して、MyGameViewController をセットアップしてゲーム シーンを異なる方法で表示する方法がよくわかりません。通常、次のようなものです。
ここで何をするのが最善ですか?2 つの異なるゲーム シーンを完全にセットアップしてから、別のファイルでゲーム メカニクスをサブクラス化しますか (そして、両方のゲーム シーンでこれを使用しますか)。メニューで選択した内容に応じて、各シーンを異なる方法で表示するにはどうすればよいですか?
ios - presentScene が原因で間違ったビューが読み込まれる
NeighborhoodViewController という viewController が 1 つあります。これは、NeighborhoodScene.sks という名前のシーンを viewController にロードします。これは絶対にうまくいきます。NeighborhoodViewController を使用して、シーン内の特定のノードからセグエを作成しました。これらの 2 つの関数がこれを制御します。
これはすべてうまくいきます。セグエが呼び出されています。セグエは、SearchViewController と呼ばれる別の VC を起動することを目的としています。この VC は、独自のシーンである SearchScene1.sks を起動することになっています。
これはそのためのコードです:
skView の restoreidentifier を出力すると、それは SearchViewController 内のビューに関連しているため、完璧です。skView.presentScene(chosenScene) がランダムに NeighborhoodViewController をセットアップしているように見えるまで、すべて正常に動作しているようです。SearchViewController と関連する sks シーン (SearchScene1) を呼び出すにはどうすればよいですか?
gameplay-kit - GamePlayKit GKObstacleGraph の保存と読み込み
GKObstacleGraph をファイルに保存して、そこからロードできますか? これについては何も見つかりません。
レベルの計算済みグラフを保存してロードしたいと考えています。
私はこれまでに試しました
しかし、これは私が得たものです:
-[GKObstacleGraph encodeWithCoder:]: 認識されないセレクターがインスタンス 0x6180000432d0 に送信されました
sprite-kit - GKScene と SKNode.entity
Xcode 8 用の SpriteKit/GameplayKit プロジェクトと、Entity-Component 情報をシーンに追加できる新しい Scene Editor を更新しています。エンティティ コードをシーンに移動しましたが、対応するノードからエンティティにアクセスできません。Appleのドキュメントによると:
エンティティまたはコンポーネントをアタッチしたシーン内の SpriteKit ノードには、ノードとそれが表す GKEntity オブジェクトとの間の関係を管理するための GKSKNodeComponent オブジェクトが自動的に含まれます。
と
GKSKNodeComponent オブジェクトをエンティティに追加すると、コンポーネントの SpriteKit ノード (SKNode オブジェクト) のエンティティ プロパティが自動的に更新され、そのエンティティを指すようになります。
シーンをロードするために必要な新しいコードは、基本的に次のとおりです。
オブジェクトにアクセスするGKScene
と、正しく読み込まれたエンティティの配列が返されますが、接続されたノードからエンティティにアクセスしようとすると、GKEntity.entity
nil が返されます。GKSKNodeComponent.node
ノードは、 内のエンティティからのアクセスによって接続されGKScene
ます。
のプロパティを期待どおりに取得GKSKNodeComponent
しGKScene
て自動的に更新するにはどうすればよいですか?SKNode
entity
random - Swift 3 のより良い乱数範囲
Swift 3 (Xcode 8) にアップグレードする前に、ランダムな位置の開始は次のようになりました。
これは次のように更新されたため、変換後に機能しなくなりました。
最終的にGamePlayKitについて学んだので、これはうまくいきました:
開始:
次に、GamePlayKit を使用して新しい確率変数を簡単に作成できます。
アップルのサイトで読むことができますが、基本的にこれにより、途中でより多くの「ヒット」が得られます。
そして、これはすべて消費されるまでランダムな値を循環し、その後再び開始します。
最後に、完全にランダムな値のジェネレーター:
使用方法の例:
これにより、オブジェクトが画面の右端から外れ、Y 軸上の完全にランダムな位置に配置されます。