2016-05-17 107 views
0

我试图制作一个简单的2D平台游戏。我决定使用SpriteKit引擎提供的引擎,而不是导入精灵:在GameScene.sks中,我拖放了一个名为“wall”的精灵(简单的红色正方形)。我复制并粘贴它有2个墙壁,玩家可以跳上。在代码部分我写了下面几行:具有相同名称的GameScene.sks中的多个节点

var wall = SKSpriteNode() 

,然后,在“didMoveToView”功能:

wall = self.childNodeWithName("wall") as! SKSpriteNode 
    wall.physicsBody = SKPhysicsBody(rectangleOfSize: wall.size) 
    wall.physicsBody?.affectedByGravity = false 
    wall.physicsBody?.dynamic = true 
    wall.physicsBody?.allowsRotation = false 
    wall.physicsBody?.pinned = true 
    wall.physicsBody?.categoryBitMask = physicsCategories.wall 
    wall.physicsBody?.contactTestBitMask = physicsCategories.player 

,因为我已经创建的类之外的结构(“physicsCategories”)持有各种类别位掩码,当我检查了接触它工作得很好:

//CONTACT 
func didBeginContact(contact: SKPhysicsContact) { 
    let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask 

    switch contactMask { 
    case physicsCategories.player | physicsCategories.wall: 
     isGrounded = true 
    default: 
     print("Some other contact") 
    } 
} 

我的问题是,这仅适用于2个精灵名为“墙”之一。有没有办法在代码中引用具有相同名称的场景中的所有精灵?就像一个标签或类似“self.childrenNodesWithName(...)”,我知道这并不是不幸存在的。 或者我做错了什么? 预先感谢您。

+0

创建一类像“类墙:SKSpriteNode”,然后在里面GameScene壁对象引用它。 sks –

+0

感谢您的提示。但我不确定如何从GameScene.sks中的对象引用一个类,你能帮助我吗? – Jules

回答

0

我已经不是我和我的MAC,这是从网站截图:

enter image description here

+0

我的GameScene.sks中没有该功能。可能这是由于我没有使用最新版本的Xcode(我在6.4)?如果是这样,这是有点问题,因为我无法设法更新到OSX El Capitan(我在这里发布了一个问题:http://superuser.com/questions/1063825/issue-upgrading-from-osx-yosemite - 对 - el-capitan-10-11-4在imac,但stil我无法解决问题)。在此期间,我编写了这样的代码: – Jules

+0

对不起,我不知道哪一个版本可用 –

+0

噢好吧。你能用这种方式帮助我吗?现在我创建了一个墙的数组,并用“self.children中的child”来检查孩子的名字是否是“wall”,然后将它添加到数组中。这种方式似乎工作,但:A)我不知道这是“好代码”B)我非常有兴趣按照你的方式做(这似乎并不适合我)。你认为我的方法好吗?再次感谢您提供的帮助 – Jules

相关问题