Xcode Can';t将PhysicsBody添加到SKSpriteNode(游戏崩溃)

Xcode Can';t将PhysicsBody添加到SKSpriteNode(游戏崩溃),xcode,swift,sprite-kit,skspritenode,Xcode,Swift,Sprite Kit,Skspritenode,我刚刚研究了XCode/Swift的一些特性,并构建了一个简单的游戏。我很难在SKSpriteNode中添加物理实体。 我创建了一个'Bullet'类和一个'Tank'类(它的属性之一是一个包含10个'Bullets'的数组) 正在使用纹理正确指定精灵属性。然而,physicsBody恢复为“零” class Tank { var position = CGPoint() var speed = CGPoint(x: 0, y: 0) var sprite = SKSpriteNode() va

我刚刚研究了XCode/Swift的一些特性,并构建了一个简单的游戏。我很难在SKSpriteNode中添加物理实体。 我创建了一个'Bullet'类和一个'Tank'类(它的属性之一是一个包含10个'Bullets'的数组)

正在使用纹理正确指定精灵属性。然而,physicsBody恢复为“零”

class Tank {
var position = CGPoint()
var speed = CGPoint(x: 0, y: 0)
var sprite = SKSpriteNode()
var viewSize = CGPoint()    // width, height
var bullets: [Bullet] = []
var bulletNumber = 0
let TOTAL_BULLETS = 10

// ***Tank class constructor
init(playerNum: Int, filename: NSString, tankName: NSString) {
    var spaceshipTexture = SKTexture(imageNamed: "Spaceship")
    self.sprite = SKSpriteNode(texture: spaceshipTexture, size: spaceshipTexture.size())
    self.sprite.physicsBody? = SKPhysicsBody(texture: spaceshipTexture, size: spaceshipTexture.size())
    println(self.sprite.physicsBody)
}

//**Bullet类
等级子弹{
var位置=CGPoint(x:-50,y:-50)
var速度=CGPoint(x:0,y:0)
变量sprite=SKSpriteNode()
var viewSize=CGPoint()//宽度、高度
var isBeingFired=false
init(){
//self.sprite=SKSpriteNode(图像名为:“子弹”)
var spaceshipTexture=SKTexture(图像名为:“Spaceship”)
self.sprite=SKSpriteNode(纹理:spaceshipTexture,大小:spaceshipTexture.size())
self.sprite.xScale=0.04
self.sprite.yScale=0.04
self.sprite.physicsBody?=SKPhysicsBody(纹理:spaceshipTexture,大小:spaceshipTexture.size())
self.sprite.physicsBody?.affectedByGravity=false
println(self.sprite.physicsBody)
}
//***游戏场景
类游戏场景:SKScene{
var tank1=坦克(玩家编号:1,文件名:“太空船”,坦克名称:“坦克1”)
设myLabel=SKLabelNode(FontName:“粉笔掸子”)
覆盖func didMoveToView(视图:SKView){
self.addChild(tank1.sprite)
对于0中的i..<坦克1.总子弹数{
self.addChild(tank1.bullets[i].sprite)
}
为了简单起见,我对坦克和子弹使用了相同的图像(只是大小不同)来创建SKSpriteNode


我不确定这是否有帮助,但我在游戏场景中添加了一个坦克实例及其所有10颗子弹。

你的问题是,你没有向你的
SKSpriteNode
中添加
SKTexture
,而是添加一个图像。如果你想访问
SKTexture
你需要像这样将它添加到你的节点中:

var spaceshipTexture = SKTexture(imageNamed: "Spaceship")

var sprite = SKSpriteNode(texture: spaceshipTexture, size: spaceshipTexture.size())

然后,您将能够访问精灵的纹理来创建有意义的
SKPhysicsBody

,但是它没有解释为什么我不必向“Tank”类添加纹理(我可以向其应用physicsBody)。此外,当我添加代码和println()时“Bullet”的physicsBody返回了“nil”。我尝试了不同的图像,但无论出于何种原因,我都可以添加图像并使其可见,但我无法附加physicsBody。您不需要添加可以设置physicsBody的纹理。您可以将physicsBody设置为空的skspritenode。但您尝试访问了prite为零,因为未设置。我感谢您的帮助Chrisitan,但我一定遗漏了什么。我修改了上面的代码,但仍然无法添加PhysicsBody。您尚未在坦克类中更改它。我修改了上面的代码以显示新的坦克类。但是,现在我的坦克类“sprite”的物理值为“零”icsBody,而在它实际工作之前?纹理被正确地指定给精灵,但是出于任何原因,它没有基于纹理创建physicsBody。
var spaceshipTexture = SKTexture(imageNamed: "Spaceship")

var sprite = SKSpriteNode(texture: spaceshipTexture, size: spaceshipTexture.size())