2017-10-06 4 views
0

안녕하세요 여러분에게 질문이 있습니다.충돌 후 스위프트 설정이 동적으로 거짓이됩니다.

내 게임에서 나는 톰이 하늘에서 떨어지는 것을 허용하고, 땅이나 다른 블록을 추락시켜 고정/제자리에 머물러있게하거나 더 이상 움직이지 않게하려고합니다.

하늘에서 떨어지는 블록을 무작위로 생성하는 함수를 만들었습니다.

func spawnItems() { 

    var item = SKSpriteNode() 

     item = SKSpriteNode(imageNamed: "block3"); 
     item.name = "block"; 
     item.size = CGSize(width: 90, height: 90) 
     item.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 89.8, height: 89.8)) 

    item.physicsBody?.isDynamic = true 
    item.physicsBody?.affectedByGravity = true 
    item.physicsBody?.allowsRotation = false 
    item.physicsBody?.restitution = 0 

    item.physicsBody?.categoryBitMask = ColliderType.BLOCK 
    item.physicsBody?.collisionBitMask = ColliderType.PLAYER | ColliderType.BLOCK | ColliderType.GROUND 

    item.physicsBody?.contactTestBitMask = ColliderType.PLAYER | ColliderType.BLOCK | ColliderType.GROUND 

    item.zPosition = 30; 
    item.anchorPoint = CGPoint(x: 0.5, y: 0.5); 
    item.position.x = CGFloat(getKoordinates()); 
    item.position.y = 800; 

self.scene?.addChild(item) 
} 


override func didMove(to view: SKView) { 

    Timer.scheduledTimer(timeInterval: TimeInterval(1), target: self, selector: #selector(GameplayScene.spawnItems), userInfo: nil, repeats: true); 



} 

블록이지면/블록에 닿아 서 자리를 유지할 때 isDynamic을 false로 설정하려고합니다.

어떻게하면됩니까?

당신은 당신의 클래스가 SKPhysicsContactDelegate입니다 확인해야

답변

0

, 당신은 장면의 physicsworld delegate 속성이 self로 설정해야 다음은 contactTestBitMask를 통해 올바르게 설정이 스프라이트 호출 될 didBegin(contact:) 방법을, (구현해야 및 categoryBitMask) 연락하십시오.

+0

나는 그것을 시도했다. 그러나 문제는 객체가 충돌 할 때마다 isdynamic을 false로 설정할 때마다 미래에 생성 될 모든 다른 항목도 isdynamic 세트를 false로 설정한다는 것입니다. 내가 뭐라는지 알 겠어? – Chief

+0

질문을 편집하여'didBegin' 함수의 코드를 게시 할 수 있습니까? –

관련 문제