Третий раз обращаюсь за помощью в этом вопросе. У меня есть имя класса BallNode
вида SKShapeNode
. Внутри моего кода у меня также есть функция создания шара каждые 3 секунды с верхней стороны экрана. Теперь я хочу установить функцию, которая определяет положение мяча каждую 1 секунду, и поэтому, если ball.position.y > 200
, чтобы вывести сообщение на консоль.
Цель этого состоит в том, что если какой-либо мяч окажется в этой позиции (не во время его падения), я вызову другую функцию. Я пытался сделать это через SKAction
, update(_ currentTime: CFTimeInterval)
, Timer
, но у меня ничего не получилось, и я действительно понятия не имею, что делать...
обновить - мой текущий код:
var timeType1: CFTimeInterval = 0.0
var timeType2: CFTimeInterval = 2.0
override func update(_ currentTime: CFTimeInterval) {
if (currentTime - timeType1 > timeType2){
print("time")
self.checkBallsPosition()
self.timeType1 = currentTime
}
self.enumerateChildNodes(withName: "color.BallNode") { node, _ in
self.checkBallsPosition()
}
}
func checkBallsPosition() {
self.enumerateChildNodes(withName: "BALL") { (node: SKNode, nil) in
let x = self.createTopBorder()
x.isHidden = true
let wait2 = SKAction.wait(forDuration: 1)
let action2 = SKAction.run {
let position = Double(node.position.y)
if position < 200 {
}
else if position > 200 {
print("bolbo")
node.removeFromParent()
}
}
self.run(SKAction.sequence([wait2,action2]))
}
}
это то, что я пытаюсь делать до сих пор, как я уже сказал, проблема в том, что я хочу получить мяч последней позиции. поскольку мяч падает на экран, последняя позиция должна быть, когда он касается нижней границы экрана или когда он касается другого мяча. если я установлю его на update
, я буду получать положение мяча каждый кадр или (как я) каждую секунду, но не последний. другая проблема заключается в том, что положение мяча всегда может измениться в зависимости от других шаров (когда происходит столкновение).
обновление №2 - другие функции:
func spawnBalls() {
let wait = SKAction.wait(forDuration: 3)
let action = SKAction.run {
self.createBall()
}
run(SKAction.repeatForever((SKAction.sequence([wait, action]))))
}
func createBall(){
let ball = BallNode(radius: 65)
print(ball.Name)
print(ball._subName!)
ball.position.y = ((frame.size.height) - 200)
let ballXPosition = arc4random_uniform(UInt32(frame.size.width))
ball.position.x = CGFloat(ballXPosition)
ball.physicsBody?.categoryBitMask = PhysicsCategory.ball
ball.physicsBody?.collisionBitMask = PhysicsCategory.ball
ball.physicsBody?.contactTestBitMask = PhysicsCategory.topBorder
ball.delegate = self
addChild(ball)
}
update
- person Pietro Pepe   schedule 26.11.2017