У меня есть SKTextureAtlas с 7 кадрами анимированного спрайта с прозрачным фоном.
Мне удалось использовать один кадр из атласа в качестве границ физического тела, но я хотел бы знать, как, если это возможно, заставить физическое тело обновлять свой контур для каждого кадра в атласе .
Здесь у меня есть физическое тело, использующее фрейм под названием «Run0», и оно применяется правильно. Я просто хотел посмотреть, возможно ли это, или было бы совершенно нецелесообразно, чтобы физическое тело использовало каждый кадр от «Run0» до «Run7» в атласе.
Изображение физического тела с контуром "Run0"
Это код, над которым я работаю:
import SpriteKit
класс GameScene: SKScene {
let dogSpriteNode = SKSpriteNode(imageNamed: "Run0")
var dogFrames = [SKTexture]()
override func didMove(to view: SKView) {
physicsWorld.gravity = CGVector(dx: 0, dy: -9.8)
physicsBody = SKPhysicsBody(edgeLoopFrom: frame)
dogSpriteNode.setScale(0.1)
dogSpriteNode.position = CGPoint(x: frame.midX, y: frame.midY)
addChild(dogSpriteNode)
let textureAtlas = SKTextureAtlas(named: "Dog Frames")
for index in 0..<textureAtlas.textureNames.count {
let textureName = "Run" + String(index)
dogFrames.append(textureAtlas.textureNamed(textureName))
}
dogSpriteNode.physicsBody = SKPhysicsBody(
texture: textureAtlas.textureNamed("Run0"),
alphaThreshold: 0.5,
size: dogSpriteNode.frame.size)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
dogSpriteNode.run(SKAction.group([SKAction.repeatForever(SKAction.animate(with: dogFrames, timePerFrame: 0.1))]))
dogSpriteNode.run(SKAction.applyImpulse(CGVector(dx: 0, dy: 1000), duration: 0.1))
}
}