Используйте ?
только в том случае, если вы хотите разрешить ноль / ноль
block.physicsBody!.affectedByGravity = false
block.physicsBody!.isDynamic = false
block.physicsBody!.velocity.dy = 0
block.physicsBody!.categoryBitMask = 0
Это произойдет сбой, когда physicsBody
не существует, что вы хотите проверить (илиВы могли бы сделать правильные проверки, используя guard
.)
Если это не удастся, вы знаете, что у вашего блока нет физического тела (что означало бы, что вы захватили не тот блок.)
Вопрос, который вам нужно задать себе сейчас, заключается в том, что в вашей сцене существует множество block
спрайтов, потому что, каков ваш код, он будет тянуть только первый найденный.
Чтобы отключить всю гравитацию на блочных спрайтах,Вы можете сделать:
enumerateChildNodes(withName:"block")
{
block,finished in
block.physicsBody!.isDynamic = false
}
Если наш код не работает в том месте, где физический элемент не равен нулю, тогда нам нужно переосмыслить, как называются наши узлы, так как не рекомендуется иметь 2 разныхузлы с тем же именем.