2016-06-23 9 views
0

나는 두 개의 우주선이 화면 주위를 떠돌아 다니지 만 화면 상단과 좌우명을 뚫을 수없는 코드를 가지고 있습니다. 그러나 그들은 i 쪽을 통해 날 수 있습니다. 나는 끝없이 사이트를 보았고 많은 다른 유형의 skphysicsbodys를 만들었지 만 그 중 누구도 도움을주지 못합니다. 코드 예.Swift 2 PhysicsBody not working

class GameScene: SKScene, SKPhysicsContactDelegate { 

var player = SKSpriteNode(imageNamed: "spaceship.png") 
var player2 = SKSpriteNode(imageNamed: "spaceship.png") 
var timer = NSTimer() 
var tapsValid:Bool? 
var playerRight:Bool? 
var playerChange:Bool? 

override func didMoveToView(view: SKView) { 

    let sceneBody = SKPhysicsBody(edgeLoopFromRect: self.frame) 
    sceneBody.friction = 0 
    self.physicsBody = sceneBody 

    physicsWorld.gravity = CGVector(dx: 0.0, dy: 0.0) 


    tapsValid = true 
    playerRight = true 

    self.scene?.backgroundColor = UIColor.whiteColor() 

    player.position = CGPointMake(self.size.width/2, self.size.height/1.8 + 280) 
    player.physicsBody = SKPhysicsBody(rectangleOfSize: player.size) 
    player.physicsBody?.dynamic = false 
    player.physicsBody?.affectedByGravity = false 
    player.physicsBody?.restitution = 1 
    player.physicsBody?.friction = 0 
    player.physicsBody?.linearDamping = 0 
    player.physicsBody?.angularDamping = 0 

    player2.position = CGPointMake(self.size.width/2, self.size.height/14) 
    player2.physicsBody = SKPhysicsBody(rectangleOfSize: player2.size) 
    player2.physicsBody?.affectedByGravity = false 
    player2.physicsBody?.dynamic = false 
    player2.physicsBody?.restitution = 1 
    player2.physicsBody?.friction = 0 
    player.physicsBody?.linearDamping = 0 
    player.physicsBody?.angularDamping = 0 

    self.addChild(player) 

    self.addChild(player2) 

누구든지 나를 도와 줄 수 있습니다. 난 단지 물리학을 화면의 가장자리에 추가하고 싶습니다. 고마워,

답변

0

노드에 대한 colliderTypes 및 범주를 정의해야합니다. 그렇게하면 무엇을 볼 수 있는지 확인할 수 있습니다.

enum ColliderType: UInt32 { 
    case Spaceship = 0 
    case CornerCategory = 1 
} 

self.physicsBody!.categoryBitMask = ColliderType.CornerCategory.rawValue 


player.physicsBody?.contactTestBitMask = ColliderType.CornerCategory.rawValue 
player2.physicsBody?.contactTestBitMask = ColliderType.CornerCategory.rawValue 

func didBeginContact(contact: SKPhysicsContact) { 
if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask { 
     //If it is true. Means that bodyA is the spaceship. Because it's 0 
     firstBody = contact.bodyA 
     secondBody = contact.bodyB 
    }else{ 
     //Either way. firstBody will always be the spaceship 
     firstBody = contact.bodyB 
     secondBody = contact.bodyA 
    } 

    if firstBody.categoryBitMask == ColliderType. Spaceship.rawValue && secondBody.categoryBitMask == ColliderType.CornerCategory.rawValue{ 
     //means that Spaceship and wall touches 
     print("Spaceship hits wall") 

     } 
}