Swift 如何将物理实体添加到SkatlastTexture或通过Images.xAssets创建动画?

Swift 如何将物理实体添加到SkatlastTexture或通过Images.xAssets创建动画?,swift,animation,sprite-kit,skspritenode,skphysicsbody,Swift,Animation,Sprite Kit,Skspritenode,Skphysicsbody,我想制作一个汽车在路上行驶的小动画,所以我制作了一个包含9幅不同图片的地图册。这辆车看起来只是车轮在转动,在行驶中有点反弹。我已经制作了一个带有图像的SKSpriteNode,并在上面添加了一个物理体,这样它就可以跳跃并受到重力的影响 所以我想知道如何将物理实体添加到SkatlastTexture中,或者通过我的image.xcsets文件夹创建动画。我试图将SKSpriteNode更改为SKAtlasTexture,但这显然不起作用,因为SKAtlasTexture中没有物理体。这就是我的目的

我想制作一个汽车在路上行驶的小动画,所以我制作了一个包含9幅不同图片的地图册。这辆车看起来只是车轮在转动,在行驶中有点反弹。我已经制作了一个带有图像的SKSpriteNode,并在上面添加了一个物理体,这样它就可以跳跃并受到重力的影响

所以我想知道如何将物理实体添加到SkatlastTexture中,或者通过我的image.xcsets文件夹创建动画。我试图将SKSpriteNode更改为SKAtlasTexture,但这显然不起作用,因为SKAtlasTexture中没有物理体。这就是我的目的。如有任何建议或解决方案,将不胜感激

下面是我代码的一些部分:

class PlayScene: SKScene, SKPhysicsContactDelegate {

let road = SKSpriteNode(imageNamed: "road")
var origRoadPositionX = CGFloat(0)
var maxRoad = CGFloat(0)
var groundSpeed = 3
var carBaseLine = CGFloat(0)
let car = SKSpriteNode(imageNamed: "car")




enum ColliderType:UInt32{
    case car = 1
    case tower = 2
}



override func didMoveToView(view: SKView) {
    self.backgroundColor = UIColor(hex: 0x80E8FF)

    self.physicsWorld.contactDelegate = self
    //Car
    self.car.position = CGPointMake(CGRectGetMinX(self.frame)-20 + self.car.size.width, self.carBaseLine)
    self.car.physicsBody = SKPhysicsBody (rectangleOfSize: self.car.size)
    self.car.physicsBody?.allowsRotation = false
    self.car.physicsBody?.affectedByGravity = false
    self.car.physicsBody?.categoryBitMask = ColliderType.car.rawValue
    self.car.physicsBody?.contactTestBitMask = ColliderType.tower.rawValue
    self.car.physicsBody?.collisionBitMask = ColliderType.tower.rawValue
    self.addChild(car)

如果需要更多代码才能找到解决方案,请告诉我,我可以提供更多代码。

您可以使用atlas文件夹执行图像动画

考虑以下示例:

import SpriteKit

class GameScene: SKScene {
    
    var bombFrames : [SKTexture]!
    var bomb : SKSpriteNode!
    let NoneCategory   : UInt32 = 0x1 << 0
    let ProjectileCategory  : UInt32 = 0x1 << 2
    let bombCategory : UInt32 = 0x1 << 7
    
    override func didMoveToView(view: SKView) {
        /* Setup your scene here */
        runAction(SKAction.repeatActionForever(SKAction.sequence([SKAction.runBlock(addBomb), SKAction.waitForDuration(5.0)])))
    }
    
   
    override func update(currentTime: CFTimeInterval) {
        /* Called before each frame is rendered */
    }
    
    func addBomb() {
        
        let Name = "Bomb"
        let AnimatedAtlas = SKTextureAtlas(named: Name)
        var Framese = [SKTexture]()
        let numImages = AnimatedAtlas.textureNames.count
        for var i=1; i<=numImages; i++ {
            let TextureName = "\(i)"
            Framese.append(AnimatedAtlas.textureNamed(TextureName))
        }
        bombFrames = Framese
        
        let firstFrame = bombFrames[0]
        bomb = SKSpriteNode(texture: firstFrame)
        let actualY = random(min: bomb.size.height/2, max: size.height - bomb.size.height/2)
        bomb.position = CGPoint(x: size.width + bomb.size.width/2, y: actualY)
        bomb.physicsBody = SKPhysicsBody(texture: bomb.texture, size: bomb.texture!.size())
        bomb.physicsBody?.dynamic = true
        bomb.physicsBody?.categoryBitMask = bombCategory
        bomb.physicsBody?.contactTestBitMask = ProjectileCategory
        bomb.physicsBody?.collisionBitMask = NoneCategory
        bomb.physicsBody?.usesPreciseCollisionDetection = true
        addChild(bomb)
        
        let actualDuration = random(min: CGFloat(2.0), max: CGFloat(4.0))
        let actionMove = SKAction.moveTo(CGPoint(x: -bomb.size.width/2, y: actualY), duration: NSTimeInterval(actualDuration))
        let actionMoveDone = SKAction.removeFromParent()
        bomb.runAction(SKAction.sequence([actionMove, actionMoveDone]))
        playBombAnimation()
    }
    
    func random() -> CGFloat {
        return CGFloat(Float(arc4random()) / 0xFFFFFFFF)
    }
    
    func random(#min: CGFloat, max: CGFloat) -> CGFloat {
        return random() * (max - min) + min
    }
    
    func playBombAnimation() {
        
        bomb.runAction(SKAction.repeatActionForever(SKAction.animateWithTextures(bombFrames, timePerFrame: 0.1, resize: false, restore: true)), withKey:"bombAnimation")
    }
}
导入SpriteKit
类游戏场景:SKScene{
var bombFrames:[SKTexture]!
var炸弹:斯普林泰诺德!

让NoneCategory:UInt32=0x1高兴地帮助您……)