Я пытаюсь создать свою первую игру на основе SpriteKit, используя Xcode 10.1 и Swift 4.2. Прямо сейчас я просто пытаюсь заставить красный шар подпрыгивать вокруг экрана и по краям. Я собираюсь добавить синий шар дальше. В данный момент нет взаимодействия с пользователем, я просто хочу, чтобы шары отскакивали и сталкивались прямо сейчас.
Тем не менее, я пытаюсь начать с RedBall в движении, и это не работает. Я попытался установить скорость, применить силу и применить импульс. Я попытался установить массу RedBall и его трения до 0,0. Я знаю, что физика в моей игре работает иначе. Если я включу гравитацию, мяч падает к нижнему краю, отскакивает и останавливается.
Я предполагаю, что есть кое-что простое, что мне не хватает, но я не могу понять, что это такое.
import SpriteKit
enum PhysicsCategory {
static let none: UInt32 = 0
static let redBall: UInt32 = 0x1 << 0
static let blueBall: UInt32 = 0x1 << 1
static let edge: UInt32 = 0x1 << 2
static let all: UInt32 = UInt32.max
}
class GameScene: SKScene, SKPhysicsContactDelegate {
override func didMove(to view: SKView) {
let redBall = SKSpriteNode(texture: SKTexture(imageNamed: "ball"), color: .red, size: CGSize(width: 40.0, height: 40.0))
redBall.colorBlendFactor = 1.0
redBall.position = CGPoint(x: frame.midX, y: frame.midY)
redBall.physicsBody = SKPhysicsBody(circleOfRadius: redBall.size.width/2)
redBall.physicsBody?.categoryBitMask = PhysicsCategory.redBall
redBall.physicsBody?.collisionBitMask = PhysicsCategory.all
redBall.physicsBody?.contactTestBitMask = PhysicsCategory.blueBall | PhysicsCategory.edge
//redBall.physicsBody?.velocity = CGVector(dx: 1.0, dy: 1.0)
//redBall.physicsBody?.applyImpulse(CGVector(dx: 1.0, dy: 1.0))
redBall.physicsBody?.applyForce(CGVector(dx: 1.0, dy: 1.0))
//redBall.physicsBody?.mass = 0.0
//redBall.physicsBody?.friction = 0.0
addChild(redBall)
let edgeRect = CGRect(x: 0, y: 0, width: frame.size.width, height: frame.size.height)
physicsBody = SKPhysicsBody(edgeLoopFrom: edgeRect)
physicsBody?.categoryBitMask = PhysicsCategory.edge
physicsBody?.collisionBitMask = PhysicsCategory.all
physicsBody?.contactTestBitMask = PhysicsCategory.redBall | PhysicsCategory.blueBall
setupPhysics()
}
func setupPhysics() {
physicsWorld.gravity = CGVector(dx: 0, dy: 0)
physicsWorld.contactDelegate = self
}
}