Simule a água / faça o sprite “flutuar” na água no kit de sprite

Estou tentando adicionar água ao meu jogo. Exceto por uma cor de fundo diferente, não há muito o que fazer. No entanto, eu gostaria doplayer-sprite flutuar em cima dele (ou na metade dele). Se o jogador entrar na água por baixo, eu gostaria que ele flutuasse até o topo. Se ele cair, eu gostaria que ele mudasse lentamente de direção e flutuasse de volta.

Tentei fazer a gravidade negativa quando ele está na água, mas isso me dá alguns efeitos um pouco indesejados. Por exemplo, quando ele (o jogador) aparece, a gravidade normal o empurra de volta, a água o empurra para cima e assim por diante. Por fim, o jogador estará "pulando" na água, sendo empurrado de uma ponta a outra. Eu gostaria que ele permanecesse calmamente em cima da água quando ele surgisse. Como posso conseguir isso?

Aqui está o código que tenho no meuupdate-loop:

SKNode *backgroundNodeAtPoint = [_bgLayer nodeAtPoint:_ball.position];
  if ([backgroundNodeAtPoint.name isEqualToString:@"WATER"]) {
    self.physicsWorld.gravity = CGVectorMake(self.physicsWorld.gravity.dx, 2);
  } else {
    if (self.physicsWorld.gravity.dy != -4) {
        self.physicsWorld.gravity = CGVectorMake(self.physicsWorld.gravity.dx, -4);
    }
}

Basicamente, isso muda minha gravidade para2 quando o jogador está na água e o altera para-4 a menos que já esteja-4.

Obrigado!

questionAnswers(2)

yourAnswerToTheQuestion