2016-10-03 7 views
1

Итак, я создал игрока, который перемещает плитки и стену, окружающую карту, чтобы держать игрока на игровой площадке. Оба имеют в них физическое устройство. Я предполагаю, что мое движение игрока неправильное, и поэтому игрок врезается в стены. Позвольте мне просто показать вам мой код:SpriteKit: Спрайты перемещаются друг с другом с уже установленным физикой.

Так что это physicsBody Игрока:

self.physicsBody!.usesPreciseCollisionDetection = true 
self.physicsBody!.categoryBitMask = PhysicsCategory.Player 
self.physicsBody!.contactTestBitMask = PhysicsCategory.House 
self.physicsBody!.collisionBitMask = PhysicsCategory.Wall 

И это physicsBody Стены:

self.physicsBody!.usesPreciseCollisionDetection = true 
self.physicsBody!.categoryBitMask = PhysicsCategory.Wall 
self.physicsBody!.contactTestBitMask = 0 
self.physicsBody!.collisionBitMask = PhysicsCategory.Player 
self.physicsBody!.isDynamic = false 

Они оба наследуют от класса Объекты:

self.physicsBody = SKPhysicsBody(rectangleOf: size) 
self.physicsBody!.affectedByGravity = false 
self.name = name 

Итак, позвольте мне дать вам мой код для движения игрока, если это Причина:

func move(direction: String, width: CGFloat){ 
    //Choosing the direction based of the users touch 
    switch direction{ 
     case "South": 
     //Decreasing the position of the player by 1 Tile 
     pos.y -= width 

     //Flipping the picture the right way to make the player look in the right direction 
     yScale = 1.0 

     //Rotates the picture 
     let rotateAction = SKAction.rotate(toAngle: -1.57, duration: 0.0) 
     run(rotateAction) 

     //All the other directions just change the x and y value of pos corresponding to the direction 
    } 

    //Moves the player to the calculated position 
    let moveAction = SKAction.move(to: pos, duration: 0.0) 
    run(moveAction){ 
     //Sound 
    } 

Edit:

Значения PhysicsCategory.Player и PhysicsCategory.Wall

struct PhysicsCategory{ 
    static let Wall:UInt32 = 0x1 << 0 
    static let Player:UInt32 = 0x1 << 1 
    static let House:UInt32 = 0x1 << 2 
} 

Edit 2:

Основная проблема заключается, чтобы получить столкновения с SKAction работает должным образом

+0

Какие значения: PhysicsCategory.Player, PhysicsCategory.House и PhysicsCategory.Wall? – Confused

+0

Отредактировано. Дом - это цель, куда должен идти игрок. То же самое происходит и с ошибками. –

+0

Нам нужен гораздо больший ум, чем мой. Мой смущен. – Confused

ответ

3

Вы на самом деле не описали свой p кроме того, что «Спрайты движутся друг к другу ...» и «поэтому игрок впадает в стены»

Чтобы проверить все ваши контакты и столкновения, ознакомьтесь с моим ответом здесь: iOS SpriteKit - collisions and contacts not working as expected и попробуйте реализовать checkPhysics() и вызвать его, как только вы думаете, что настроили все свои физические тела и их взаимодействия.

Вы уверены, что:

  • игрок и стена на самом деле имеют физические тела?
  • сцена является SKPhysicsContactDelegate
  • Вы установили physicsWorld.contactDelegate = self
  • Вы реализован один из дополнительных методов SKPhysicsContactDelegate:
    • didBeginContact
    • didEndcontact

ли этот корр ect:

  • Вы хотите, чтобы игрок столкнулся со стеной?
  • Вы хотите, чтобы стена столкнулась с игроком?
  • Вы хотите получать уведомление (позвонил по телефону), когда игрок и прикосновение к дому?
  • Вы не хотите получать уведомления, если стена касается чего-либо?
+0

Да, я это сделал. Выше я связал чат, где я загрузил видео, показывающее проблему. Я посмотрю на ваш checkPhysics funktion –

+0

Ah OK - сделайте ссылку чата более очевидной. –

+0

Извините. Правильно. –

3

Это не перечислен в вопрос здесь, но причина столкновения контакта не происходит, потому что метод didBeginContact был изменен на didBegin

+0

Как насчет конфликтов? Было ли это хорошо или было что-то еще? –