2016-06-24 2 views
0

나는 공간 사수 게임을 만들고 모든 노드가 아닌 특정 노드와 상호 작용할 때 내 노드 중 하나를 동적으로 만들고 싶습니다. 본질적으로, 나는 하나의 지정된 노드와 상호 작용할 때 노드가 동적으로 행동하기를 원한다. 어떻게해야합니까?오직 하나의 객체 Swift와 Spritekit만을위한 노드 만들기

감사합니다.

나는이 질문이 혼란 스럽다는 것을 알고 있지만, 누군가 아이디어가 있다면 그것은 매우 도움이 될 것입니다 !!

let Bullet = SKSpriteNode(imageNamed: "BulletGalaga.png") 
      Bullet.zPosition = -5 

      Bullet.position = CGPoint(x: ship.position.x, y: ship.position.y) 
      Bullet.zRotation = ship.zRotation 


      //let action = SKAction.moveTo(CGPointMake(400 * cos(Bullet.zRotation),(400 * -sin(Bullet.zRotation))), duration: 0.8) 

      let action = SKAction.move(
       to: CGPoint(
        x: 1200 * -cos(Bullet.zRotation - 1.57079633) + Bullet.position.x, 
        y: 1200 * -sin(Bullet.zRotation - 1.57079633) + Bullet.position.y 
       ), 
       duration: 2.4) 

      //let action = SKAction.moveToY(self.size.height + 30, duration: 0.8) 
      //let action = SKAction.moveTo(self.ship.size.height, duration: 0.8) 
      let actionDone = SKAction.removeFromParent() 
      Bullet.run(SKAction.sequence([action, actionDone]), withKey: "bulletAction") 

      Bullet.physicsBody = SKPhysicsBody(rectangleOf: Bullet.size) 
      Bullet.physicsBody?.affectedByGravity = false 
      Bullet.physicsBody?.isDynamic = false 
      self.addChild(Bullet) 

내가 추가 한이 :

ship.physicsBody?.categoryBitMask = shipCategoryBitMask 
    Bullet.physicsBody?.categoryBitMask = bulletCategoryBitMask 
    enemy.physicsBody?.categoryBitMask = enemyCategoryBitMask 
    enemyBullet.physicsBody?.categoryBitMask = enemyBulletCategoryBitMask 

    ship.physicsBody?.collisionBitMask = enemyBulletCategoryBitMask 
    Bullet.physicsBody?.collisionBitMask = enemyCategoryBitMask 
    enemyBullet.physicsBody?.collisionBitMask = shipCategoryBitMask 
    enemy.physicsBody?.collisionBitMask = bulletCategoryBitMask 
+0

@claassenApps 아직 작동하지 않습니다. –

+0

죄송합니다. 지금은 코드를 작성하지 못했습니다. 오늘 저녁에 고마워. 고마워. – claassenApps

+0

@claassenApps great !! 고맙습니다. –

답변

0

당신이 SpriteNode의 물리학 몸을 설정 한 후에, 당신이 충돌 할 다른 어떤 SpriteNodes 지정 collisionBitMask를 사용할 수 있습니다. 먼저 각 노드의 물리 구조 바디의 categoryBitMask를 설정해야합니다.

let node1CategoryBitMask = 0x1 << 0 
let node2CategoryBitMask = 0x1 << 1 
let node3CategoryBitMask = 0x1 << 2 

node1.physicsBody.categoryBitMask = node1CategoryBitMask 
node2.physicsBody.categoryBitMask = node2CategoryBitMask 
node3.physicsBody.categoryBitMask = node3CategoryBitMask 

이 시점에서 세 개의 스프라이트는 categoryBitMask가 설정되어 있습니다. 이것이 물리학 자 본문을 식별합니다. 이제 collisionBitMasks를 설정하십시오.

node1.collisionBitMask = node2CategoryBitMask 
node2.collisionBitMask = node1CategoryBitMask | node3CategoryBitMask 

이렇게하면 node1이 node2가 아닌 node3과 충돌합니다. Node2는 node1과 node3과 충돌합니다.

희망이 도움이됩니다.

+0

나는 모든 역동적 인 것을 만들어야합니까? –

+0

중력에 의해 끌어 당기는 것과 같이 장면의 다른 오브젝트가 노드를 이동 시키거나 다른 오브젝트에 부딪 힐 때 하나의 오브젝트가 움직이게하려면, dynamic = yes를 설정하십시오. 노드가 항상 완전하게 유지되도록하려면 dynamic = false를 설정하십시오. – claassenApps

+0

노드가 동적 솔루션을 제공하게됩니까? –

관련 문제