Инициализация
import SpriteKit
import PlaygroundSupport
var myScene = SKScene()
myScene.size = CGSize(width: 800, height: 800)
var rect = CGRect(x: 0, y: 0, width: 800, height: 800)
var myView = SKView(frame: rect)
myScene.backgroundColor = #colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
myView.preferredFramesPerSecond = 1
myView.showsFPS = true
PlaygroundPage.current.liveView = myView
public class agent{
// pos x, y
var x: Double = 0
var y: Double = 0
// velocity
var v: Double = 0
// how far agent can "see"
var r: Double = 0
// orientation
var o: Double = 0
// turning characteristic
var alpha: Double = 0
init(alpha: Double?){
self.alpha = alpha ?? 0
}
// neighborly influence on alpha
var beta: Double = 0
var size: Double = 10
var color: CGColor = #colorLiteral(red: 0.5568627715110779, green: 0.3529411852359772, blue: 0.9686274528503418, alpha: 1.0)
func show(){
Я не уверен, что это лучший способ сделать круг, я использовал здесь чей-то код.
let shapeLayer = CAShapeLayer()
let orientLayer = CAShapeLayer()
if shapeLayer.fillColor != color{
shapeLayer.fillColor = color
shapeLayer.strokeColor = #colorLiteral(red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0)
shapeLayer.lineWidth = 1.0
orientLayer.strokeColor = #colorLiteral(red: 0.2549019753932953, green: 0.27450981736183167, blue: 0.3019607961177826, alpha: 1.0)
orientLayer.lineWidth = 3
}
let circlePath = UIBezierPath(arcCenter: CGPoint(x: x, y: y), radius: CGFloat(size), startAngle: CGFloat(0), endAngle: CGFloat(Double.pi * 2), clockwise: true)
let orientLine = UIBezierPath()
var ox = size * cos(o) + x
var oy = size * sin(o) + y
orientLine.move(to: CGPoint(x: x, y: y))
orientLine.addLine(to: CGPoint(x: ox, y: oy))
orientLayer.path = orientLine.cgPath
// circlePath.append(orientLine)
shapeLayer.path = circlePath.cgPath
Это также может быть проблемойно я не знаю, как еще добавить их в представление.
myView.layer.addSublayer(shapeLayer)
myView.layer.addSublayer(orientLayer)
}
func go(){
var n: Double = 0
var tempV = v
var angle: Double = 0
var neighbors: [agent] = []
func see(){
// 1. Check if there are any other agents in r
for i in 0..<agents.count{
if agents[i] !== self{
var x1 = x
var x2 = agents[i].x
var y1 = y
var y2 = agents[i].y
var d = sqrt(pow((x2 - x1), 2) + pow((y2 - y1), 2))
if d < r{
neighbors.append(agents[i])
}
}
}
// 2. See if more are on left/right
// the line between self and neighbor exist at an angle of more than pi(from self perspective), it is left
}
// 3. Add/ subtract beta from n
see()
if neighbors.count >= 1{
tempV += 50
}
angle = o + n
var newX: Double = 0
var newY: Double = 0
newX = tempV * cos(angle) + x
newY = tempV * sin(angle) + y
x = newX
y = newY
o += alpha
tempV = v
neighbors = []
}
}
var agents: [agent] = []
var a = agent(alpha: M_PI * 1.2)
a.y = 600.0
a.x = 300.0
a.o = M_PI * 3 / 1.93
a.r = 50
a.v = 40
var b = agent(alpha: M_PI * 1 / 7)
b.y = 600.0
b.x = 500.0
b.o = M_PI * 3.25 / 3.93
b.r = 80
b.v = 40
b.color = #colorLiteral(red: 0.9254902005195618, green: 0.23529411852359772, blue: 0.10196078568696976, alpha: 1.0)
agents.append(contentsOf: [a, b])
for i in 0...150{
agents.forEach{agent in
agent.show()
agent.go()
Когда я помещаю 'myView.presentScene (myScene)', 'myView' или myView.setNeedsDisplay 'в этот блок кода, он нене работаетОн выдает одну и ту же ошибку каждый раз.
}
}
myView.presentScene(myScene)
После того, как эта часть кода запускается дважды, он говорит: «Ошибка поиска проблем в вашем коде».Это не указывает на какие-либо ошибки в моем коде.Я использую Swift для iPad, и у меня нет кода. Я не пытаюсь заставить приложение просто заставить его работать.