Nano Hash - криптовалюты, майнинг, программирование

Остановка объектов при столкновении в наборе спрайтов

Я создаю игру с помощью Apple SpriteKit и SKPhysics, в которой используются квадраты, которые перемещаются по экрану в зависимости от ввода пользователя. У меня проблема со столкновениями, так как квадраты будут двигаться не на своем месте, если они столкнутся. Например, если все блоки перемещаются вправо, любые блоки, находящиеся в одной «строке», должны располагаться рядом друг с другом, а не перекрываться или перемещаться по вертикали. На данный момент они изменят свое вертикальное направление. Вот мой код:

self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.size];
self.physicsBody.dynamic = YES;
self.physicsBody.allowsRotation = NO;
self.physicsBody.affectedByGravity = NO;

Есть ли какие-либо другие настройки, которые мне не хватает?


  • Если вам нужно точное движение, лучше не использовать физику для движения. Вы можете попробовать установить для компонента x или y положения узла фиксированную координату во время обновления на время, когда он не должен перемещаться по определенной оси. Это все, что вы можете сделать. 28.06.2014

Ответы:


1

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

struct PhysicsCategory {
    static let None : UInt32 = 0
    static let All : UInt32 = UInt32.max
    static let block : UInt32 = 0b1
    }

затем установите следующие настройки блоков.

    block.physicsBody?.categoryBitMask = PhysicsCategory.block
    block.physicsBody?.collisionBitMask = PhysicsCategory.None

Это должно предотвратить автоматический расчет столкновений с помощью spritekit.

15.01.2015
  • Это кажется самым простым решением, и оно отлично сработало для моего маленького теста Pong. Это определенно чище, чем ответ с наибольшим количеством голосов. 28.08.2016

  • 2

    Если вы перемещаете свои спрайты с помощью пользовательского ввода (например, SKAction's moveTo), то вы, скорее всего, не используете физику для перемещения своего спрайта. В этом случае вы должны сделать скорость физического тела равной 0 - это сделает спрайт полностью жестким, когда он вступит в контакт с другим объектом.

    Пытаться:

    self.physicsBody.velocity = CGVectorMake(0, 0);
    

    Вы должны поместить этот код в свой цикл обновления.

    18.07.2014
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..