У меня есть проект, в котором мяч катится между двумя холмами, и я хочу, чтобы он продолжал катиться вечно.Холмы создаются с помощью точек сплайна (есть 3 точки: (0,300), (375,0) и (750,300)).Я позаботился о том, чтобы на мяче и земле трения и восстановления были установлены на 0, но он все еще катится взад и вперед, поднимаясь в гору меньше, чем в предыдущий раз.
Вот что такое холмы и шарвыглядеть так: Изображение
Редактировать: Меня попросили добавить код, вот мой файл GameScene.swift:
import SpriteKit
import GameplayKit
class GameScene: SKScene {
var ball = SKShapeNode()
func createView(){
removeAllActions()
removeAllChildren()
ball = SKShapeNode(circleOfRadius: 20)
ball.position = CGPoint(x:0, y:350)
ball.physicsBody = SKPhysicsBody(circleOfRadius: 20)
ball.physicsBody?.restitution = 0
ball.physicsBody?.friction = 0
ball.physicsBody?.mass = 0.1
ball.physicsBody?.linearDamping = 0
ball.physicsBody?.angularDamping = 0
ball.physicsBody?.isDynamic = true
ball.fillColor = .red
addChild(ball)
ball.physicsBody?.velocity = CGVector(dx: 0, dy: -400)
ball.physicsBody?.allowsRotation = true
self.physicsWorld.gravity = CGVector(dx: 0, dy: -9.8)
var splinepoints = [CGPoint(x: 0 , y: 0),
CGPoint(x: 0, y: 300),
CGPoint(x: 375, y: 0),
CGPoint(x: 750, y: 300)]
let ground = SKShapeNode(splinePoints: &splinepoints, count: splinepoints.count)
ground.physicsBody = SKPhysicsBody(edgeChainFrom: ground.path!)
ground.physicsBody?.restitution = 0.0
ground.physicsBody?.friction = 0.0
addChild(ground)
let border = SKPhysicsBody(edgeLoopFrom: self.frame)
border.friction = 0
border.restitution = 0
self.physicsBody = border
}
override func didMove(to view: SKView) {
createView()
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
ball.physicsBody?.friction = 0
ball.physicsBody?.restitution = 0
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(2), execute: {
})
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(5), execute: {
self.createView()
})
}
}