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

CCSprite не отвечает на Collision

Я новичок в Spritebuilder и пытаюсь сделать прототип игры MARIO. Что я делаю, так это то, что у меня есть 2 спрайта, один спрайт имеет характер быстрой ходьбы, а другой - характер обычной ходьбы. Я меняю спрайт через кнопку. Когда я нажимаю на кнопку, обычно ходячий спрайт заменяется быстрым ходячим спрайтом, и снова нажав на эту кнопку, появляется обычный спрайт.

Проблема :

  1. Впервые при запуске игры обнаруживается столкновение между землей и персонажем при прыжке. Но как только я меняю спрайт на быстро гуляющего персонажа, при прыжках не обнаруживается столкновение. Когда я снова переключаюсь на обычный ходячий персонаж, при прыжках также не обнаруживается столкновение.

  2. Когда я заставляю спрайт прыгать, и он начинает падать вниз, на землю наблюдается какая-то активность (я бы предпочел сказать, что она отскакивает), о которой я также не могу сказать, отскакивает она или нет. Я не знаю, почему это происходит и как это исправить. Я искал переполнение стека и некоторые форумы. То, что я нашел, было использовать

CCphysicsBody.iterations

Но я не знаю, как его использовать. Для более подробного объяснения вы можете посмотреть видео по этой ссылке, чтобы понять всю проблему. https://www.dropbox.com/s/0fz3qehie76r60k/Game.mp4?dl=0< /а>

Пожалуйста помоги. Любые предложения приветствуются.

Изменить: вот код, в котором я меняю спрайты:

-(void)setCharacterAnimationFast
{
    if (_turboButton.selected)
    {
        //changing button state;
        _turboButton.selected=NO;

        //changing value of background speed from screen;
        speeedParameter = 50.0;
        speedParameterOfBackgroundObjects=10.0;

        //loading new chracter
        _character =(RightCharacter*)[CCBReader load:@"RightCharacter"];

        //position the laser at helicopter origin
        CGPoint _characterPosition = _fastCharacter.position;

        //transform the world position to the node space to which the laser will be added (_physicsNode)
        _character.position = [_physicsNode convertToNodeSpace:_characterPosition];

        //defining zorder for moving it to background
        _character.zOrder= _fastCharacter.zOrder;

        // add the laser to the physicsNode of this scene (because it has physics enabled)
        [_physicsNode addChild:_character];

        //removing the existing character
        [_fastCharacter removeFromParentAndCleanup:YES];



        CCLOG(@"ground : %@", _ground);
        CCLOG(@"ground : %@", _ground.physicsBody);
        CCLOG(@"ground : %@", _ground.physicsNode);



        _ground.physicsBody.collisionMask=@[@"character"];
        _character.physicsBody.collisionMask=@[@"ground"];
        _ground.physicsBody.collisionType=@"ground";
        _ground.physicsBody.elasticity=0;
        _character.physicsBody.collisionType=@"character";
        _character.physicsBody.elasticity=0;
        _physicsNode.iterations=1000;

        _fastCharacter=nil;
    }
    else
    {
        //changing button state
        _turboButton.selected=YES;

        //changing value of background speed from screen;
        speeedParameter = 80.0;
        speedParameterOfBackgroundObjects= 20.0;

        //loading new fast character
        _fastCharacter =(RightCharacterFast*)[CCBReader load:@"RightCharacterFast"];

        //position the laser at helicopter origin
        CGPoint _fastCharacterPosition = _character.position;

        //transform the world position to the node space to which the laser will be added (_physicsNode)
        _fastCharacter.position = [_physicsNode convertToNodeSpace:_fastCharacterPosition];

        //defining zorder for moving it to background
        _fastCharacter.zOrder= _character.zOrder;

        // add the laser to the physicsNode of this scene (because it has physics enabled)
        [_physicsNode addChild:_fastCharacter];

        //removing the existing character
        [_character removeFromParentAndCleanup:YES];



        CCLOG(@"ground : %@", _ground);
        CCLOG(@"ground : %@", _ground.physicsBody);
        CCLOG(@"ground : %@", _ground.physicsNode);


        _ground.physicsBody.collisionMask=@[@"fastCharacter"];
        _fastCharacter.physicsBody.collisionMask=@[@"ground"];
        _ground.physicsBody.elasticity=0;
        _ground.physicsBody.collisionType=@"ground";
        _fastCharacter.physicsBody.collisionType=@"fastCharacter";
        _fastCharacter.physicsBody.elasticity=0;
        _physicsNode.iterations=1000;

        _character=nil;
    }
}

А вот ссылка на видео отладочной отрисовки: https://www.dropbox.com/s/vt557ngpyj6z9g3/DebugDraw.mp4?dl=0


  • Пожалуйста, опубликуйте код, связанный с проблемами. Также вы можете записать это видео, но с включенным отладочным рисованием физики, чтобы лучше видеть, что представляют собой формы столкновения и почему они перекрываются, когда игрок падает на землю. 29.08.2014

Ответы:


1

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

characterNode.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:sprite.size.width/2];
fastWalkingCharacterNode.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:sprite.size.width/2];
29.08.2014
Новые материалы

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

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

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

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

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

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

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