2016-03-05 2 views
0

Я делаю игру, где главный символ вращается, однако я хочу использовать SKTexture для установки пользовательских границ на узел спрайта символов. Однако, когда я это делаю, мой персонаж не вращается. Когда я использую обычный circleOfRadius (потому что мой спрайт круглый, но не идеально округлый), он вращается, но не точно при столкновениях. Вот мой код:Физический корпус как SKTexture не вращается

var mainSpriteTexture = SKTexture(imageNamed: "Main") 
    mainSprite = SKSpriteNode(texture: mainSpriteTexture) 
    mainSprite.setScale(0.2) 
    mainSprite.position = CGPoint(x: self.frame.width/2, y: 100) 


    mainSprite.physicsBody = SKPhysicsBody(texture: mainSpriteTexture, size: mainSprite.size) 
    mainSprite.physicsBody?.categoryBitMask = PhysicsCatagory.player 
    mainSprite.physicsBody?.collisionBitMask = PhysicsCatagory.platform | PhysicsCatagory.ground 
    mainSprite.physicsBody?.contactTestBitMask = PhysicsCatagory.platform | PhysicsCatagory.ground | PhysicsCatagory.score 
    mainSprite.physicsBody?.affectedByGravity = true 
    mainSprite.physicsBody?.dynamic = true 
    mainSprite.physicsBody?.allowsRotation = true 
    self.addChild(mainSprite) 


override func update(currentTime: CFTimeInterval) { 
    /* Called before each frame is rendered */ 
    updateSpritePosition() 
    if gameStarted == true { 
     if died == false { 
      mainSprite.physicsBody?.velocity = CGVectorMake(direction, (mainSprite.physicsBody?.velocity.dy)!) 
     } 
     else if died == true { 
      mainSprite.physicsBody?.velocity = CGVectorMake(0, (mainSprite.physicsBody?.velocity.dy)!) 
     } 
    } 

Вот форма Я использую: http://imgur.com/JCeEAbv

+0

Можете ли вы добавить фигуру, которую используете, а также код, ответственный за вращение? Или спрайт вращается в результате взаимодействия с другими объектами? Таким образом, никто не может точно сказать, что происходит, потому что ваша проблема не может быть воссоздана ... – Whirlwind

+0

Я добавил еще несколько кодов. Спрайт всегда должен вращаться всякий раз, когда начинается игра. – DevelUpGames

+0

Имейте в виду, что если вас интересует реалистичная физическая симуляция, вы должны перемещать объекты по силам или импульсам (или непосредственно путем изменения вектора скорости). Если вы вручную измените позицию узла с помощью свойства position или используете SKAction, у вас могут возникнуть странные результаты, потому что вы вытаскиваете спрайт из моделирования физики. Физика и ручное перемещение узлов (например, с помощью SKAction) безопасны только в том случае, если вас интересует только обнаружение контактов. Если вы хотите столкновения, вы должны позволить физическому движку перемещать ваши объекты. – Whirlwind

ответ

0

Не совсем уверен, как вы повернете спрайт, или переместить его, но если я даю ему определенное вращение по умолчанию и поместите его на поверхности он вращается для меня так, как должен (я использовал фотографию, которую вы предоставили). Таким образом, он не будет хорошо приземляться на земле (zRotation 0.0).

Попробуйте использовать это:

mainSprite.zRotation = 0.1 //note that these are radians 

и поместите его на плоскую поверхность.

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

Смежные вопросы