swiftを使用してスプライトキットにメッシュのトポロジ(グラフ)を描画しようとしています。 私はスプライトキットの新機能です。提案やサンプルコードを入力してください。swiftを使用してスプライトキットにメッシュトポロジを描画する方法
答えて
私がコメントで述べたように、私は完璧な地形アルゴリズムの作り方を知らないが、私はあなたの絵を複製できるものを考え出した。
基本的には、SKノードのプロットを追加し、.position
プロパティを使用して、CGPath
で描画された線の開始点と終了点として使用します。そのパスから、SKShapeNode(path: CGPath)
を作成できます。
また、ここでは委任を使用するカスタムボタンを追加しましたが、トポグラフィの実際の「勇気」とは完全に別です。単なるボタンです。
// Overly complex way of creating a custom button in SpriteKit:
protocol DrawLinesDelegate: class { func drawLines() }
// Clickable UI element that will draw our lines:
class DrawLinesButton: SKLabelNode {
weak var drawLinesDelegate: DrawLinesDelegate?
init(text: String, drawLinesDelegate: DrawLinesDelegate) {
super.init(fontNamed: "Chalkduster")
self.drawLinesDelegate = drawLinesDelegate
self.text = text
isUserInteractionEnabled = true
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
print(drawLinesDelegate)
drawLinesDelegate?.drawLines()
}
required init?(coder aDecoder: NSCoder) { fatalError("") }
override init() { super.init() }
};
class GameScene: SKScene, DrawLinesDelegate {
var plots = [SKShapeNode]()
// var lines = [SKShapeNode]() // This may be useful in a better algorithm.
var nodesDrawnFrom = [SKShapeNode]()
var drawLinesButton: DrawLinesButton?
func drawLine(from p1: CGPoint, to p2: CGPoint) {
let linePath = CGMutablePath()
linePath.move(to: p1)
linePath.addLine(to: p2)
let line = SKShapeNode(path: linePath)
line.strokeColor = .red
line.lineWidth = 5
// lines.append(line) // Again, may be useful in a better algo.
addChild(line)
}
func drawLines() {
// Remove all lines: // Again again, may be useful in a better algorithm.
/*
for line in lines {
line.removeFromParent()
lines = []
}
*/
// The plot that we will draw from:
var indexNode = SKShapeNode()
// Find indexNode then draw from it:
for plot in plots {
// Find a new node to draw from (the indexNode):
if nodesDrawnFrom.contains(plot) {
continue
} else {
indexNode = plot
}
// Draw lines to every other node (from the indexNode):
for plot in plots {
if plot === indexNode {
continue
} else {
drawLine(from: indexNode.position, to: plot.position)
nodesDrawnFrom.append(indexNode)
}
}
}
}
func addNode(at location: CGPoint) {
let plot = SKShapeNode(circleOfRadius: 50)
plot.name = String(describing: UUID().uuid)
plot.zPosition += 1
plot.position = location
plot.fillColor = .blue
plots.append(plot)
addChild(plot)
}
override func didMove(to view: SKView) {
drawLinesButton = DrawLinesButton(text: "Draw Lines", drawLinesDelegate: self)
drawLinesButton!.position.y = frame.minY + (drawLinesButton!.frame.size.height/2)
addChild(drawLinesButton!)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let location = touches.first!.location(in: self)
addNode(at: location)
}
}
不完全アルゴ:
ここあなたは中間点を持っていたとき、他に1から引き出されている複数の行があることがわかります(つまり、ストレートを遮断するものです)
これを確認するには、別のセクション全体をアルゴリズムに追加する必要があります。
もう1つ重要なことは、SKShapeNode()が非常に不適格であることです。これらのすべてをSpriteNodesに変換するか、シーン全体を静的テクスチャにビットブレットすることをお勧めします。
しかし、ShapeNodeとしてすべての機能を使用すると、最も柔軟性があり、ここで説明するのが最も簡単です。
あなたの貴重な返事に感謝します。あなたのコードでは、その後、私はノードを描画することができます画面をタップします。私は完全なジェネリック、10のノードと特定のノードに接続して平均ロードトポロジを探しています。まだ私は解決策を探しています。 –
- 1. Swiftを使用して720データポイントを描画する方法
- 2. スプライトキットを使用してSKSpriteNodeの画像を徐々にぼかす方法は?
- 3. scenekitにSCNNodeRendererDelegateでOpenGLを使用して描画する方法
- 4. SwiftでNSOpenGLViewに画像を描画する方法は?
- 5. リストを使用してpowershellを使用して図を描画する方法
- 6. VC++でCxImageを使用して円を描画する方法
- 7. pdfboxを使用して円グラフを描画する方法は?
- 8. CAGradientLayerを使用してグラデーションカラーホイールを描画する方法は?
- 9. glDrawTexiOESを使用してテクスチャを描画する方法は?
- 10. XLSXWriterを使用して図形を描画する方法
- 11. "*"を使用して線を描画する方法
- 12. Pythonを使用してグリッドワールドを描画する方法
- 13. Leaflet.heatを使用してヒートマップを再描画する方法は?
- 14. Handles.Labelを使用してシーンビューでテキストを描画する方法
- 15. androidのデータベースデータを使用してキャンバスを描画する方法
- 16. GTK3とPyGObjectを使用してGdkPixbufを描画する方法
- 17. ファイルパスを使用してイメージを描画する方法
- 18. デルファイを使用してVLCサーフェイスを描画する方法
- 19. カラーティントを使用してBufferedImageを描画する方法
- 20. ハイチャートを使用して単線グラフを描画する方法
- 21. Eclipseを使用してUML図を描画する方法
- 22. 描画を使用してグラフを配置する方法は?
- 23. Pygletを使用して透明プリミティブを描画する方法
- 24. SVGグラフィックスを使用してRGBカラーピッカーグラデーションを描画する方法
- 25. WPFパスを使用してポーズボタンを描画する方法
- 26. QPainterを使用して効率的に画像を描画する方法は?
- 27. LWUITフレームワークを使用してVideoComponentコントロールに画像を描画する方法は?
- 28. ビットマップコンテキストを使用して描画する方法
- 29. Swift 3を使用してApple MapsでGeoJSONをオーバーレイとして描画する方法
- 30. smart gwt beginner- drawImg.setSrc()を使用して描画パネルに画像を描画する方法
私はあなたのおおまかな答えに取り組んでいますが、実際の 'drawLines()'アルゴリズムはわかりません。私はあなたが地形のラインを描くためのアロゴリズムを知っていると思いますか?私が作ったものは非常に基本的で不完全です。 – Fluidity
ねえ、私の答え+プロジェクトソリューションはあなたのために働いたのですか?そうでない場合は、私にお知らせください。私はそれを更新しようとすることができます。 – Fluidity