SKPhsyics Скорости не происходит - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь создать свою первую игру на основе 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
    }

}
...