Я создал класс, поведение которого действительно простое: каждый объект этого класса будет квадратом с именем вверху, и они будут случайным образом перемещаться по экрану.
class XSquare: SKNode {
private var squareShape: SKSpriteNode
private var text: SKLabelNode
init() {
// Sets up the square
squareShape = SKSpriteNode(color: .red, size: CGSize(width: 100, height: 100))
// Sets up the text
text = SKLabelNode(text: "Here goes the name")
text.position = CGPoint(x: 0, y: 100)
// Calls the super initializator
super.init()
// Sets up the square
squareShape.physicsBody = SKPhysicsBody(rectangleOf: squareShape.size)
squareShape.physicsBody?.categoryBitMask = squareBitMask
squareShape.physicsBody?.collisionBitMask = wallBitMask
squareShape.physicsBody?.velocity = CGVector(dx: 10, dy: 10)
squareShape.physicsBody?.angularVelocity = CGFloat(5)
squareShape.physicsBody?.allowsRotation = true
squareShape.physicsBody?.pinned = false
squareShape.physicsBody?.affectedByGravity = false
addChild(squareShape)
addChild(text)
}
}
Причина, по которой я использовал SKNode
для этого класса, потому что я хотел предоставить небольшой текст прямо в верхней части каждого квадрата (индикатор имени). Все выглядит хорошо, но когда я запускаю код, имя остается неизменным, в то время как квадраты перемещаются случайным образом по экрану (вероятно, потому, что я перемещаю квадрат не с SKAction
, а с PhysicsBody
). С другой стороны, если я использую squareShape.addChild(text)
, текст также будет вращаться в соответствии с физикой квадрата.
Я новичок ie, использующий SpriteKit, и я уверен, что что-то упустил. Может ли кто-нибудь помочь мне понять?