сблъсъци в swift и spritekit

Работя с проста игра, използвайки Swift и Spritekit.

Имам 4 възела в моята сцена: възел A1, възел A2, възел B1 и възел B2.

Така че възел A1 може да докосне възел A2 И възел B1 може да докосне възел B2.

аз искам

nodeA2 докосване nodeB2 без nodeA1 докосване nodeB1 и nodeB2 и nodeB1 е същото.

Това възможно ли е ?


person mazen    schedule 14.12.2017    source източник
comment
Имате предвид сблъсъци, т.е. искате ли възел A1 и възел A2 да отскачат един от друг и възел B1 и възел B2 също да отскачат един от друг, но възлите A1 и A2 да преминават направо през възли B1 и B2? Или имате предвид контакти, т.е. искате да бъдете уведомени, когато възел A1 и възел A2 се докоснат, а също и когато възел B1 и възел B2 се докоснат, но не се интересувате дали A1 или A2 докоснат B1 и B2?   -  person Steve Ives    schedule 14.12.2017
comment
хей @SteveIves (имам предвид сблъсъци), да възел A1 и A2 отскачат един от друг, възел B1 и B2 отскачат един от друг и и важната част A2 и B2 отскачат един от друг   -  person mazen    schedule 14.12.2017


Отговори (1)


Да, определено е възможно, независимо дали имате предвид сблъсъци или контакти ????

Ако можете да изясните това, ще ви кажа как да го направите. (Мога да ви кажа и за двете, но това би бил допълнителен код.)

РЕДАКТИРАНЕ - кодирайте тук за сблъсъци, както е описано:

  1. Дефинирайте уникални категории, уверете се, че вашият клас е SKPhysicsContactDelegate и направете себе си делегат за контакт по физика:

    // Категории по физика нека nodeA1Category: UInt32 = 1 ‹‹ 0 // b'00001' нека nodeA2Category: UInt32 = 1 ‹‹ 1 // b'00010' нека nodeB1Category: UInt32 = 1 ‹‹ 2 // b'00100' нека nodeB2Category: UInt32 = 1 ‹‹ 3 // b'01000'

    клас GameScene: SKScene, SKPhysicsContactDelegate { physicsWorld.contactDelegate = себе си

  2. Задайте категориите (обикновено в didMove(to view:) :

    nodeA1.physicsBody.catgeoryBitMask = nodeA1Category nodeA2.physicsBody.catgeoryBitMask = nodeA2Category nodeB1.physicsBody.catgeoryBitMask = nodeB1Category nodeB2.physicsBody.catgeoryBitMask = nodeB2Category

(Уверете се, че сте създали физически тела за всеки възел със свойството isDynamic, зададено на true)

  1. Настройте сблъсъци:

    nodeA1.physicsBody?.collisionBitMask = nodeA2Category // A1 се сблъсква с A2 nodeA2.physicsBody?.collisionBitMask = nodeA1Category // A2 се сблъсква с A1

    nodeB1.physicsBody?.collisionBitMask = nodeB2Category // B1 се сблъсква с B2 nodeB2.physicsBody?.collisionBitMask = nodeB1Category // B2 се сблъсква с B1

    nodeA2.physicsBody?.collisionBitMask = nodeB2Category // A2 се сблъсква с B2 nodeB2.physicsBody?.collisionBitMask = nodeA2Category // B2 се сблъсква с A2

Сега трябва да получите всички сблъсъци, които искате, но без известия за контакт. Ако искате да направите нещо, което тези възли се сблъскват, ще трябва да внедрите contactTest битови маски, а също и метода didBeg(contact:).

person Steve Ives    schedule 14.12.2017