Je suis récemment entré dans XNA et je dois dire que j'adore ça. Comme une sorte de jeu bonjour, j'ai décidé de créer le jeu classique "Snake". La version à 90 degrés était très simple et facile à mettre en œuvre. Mais alors que j'essaie d'en faire une version qui permet une rotation à 360 degrés à l'aide des flèches gauche et droite, je suis entré dans une sorte de problème.
Ce que je fais maintenant découle de la version à 90 degrés: itération à travers chaque partie du corps de serpent commençant à la queue et se terminant juste avant la tête. Cela fonctionne très bien lors du déplacement toutes les 100 millisecondes. Le problème est que cela crée un style de jeu saccadé car techniquement le jeu progresse à seulement 6 images par seconde plutôt que son potentiel de 60.
Je voudrais déplacer le serpent à chaque boucle de jeu. Mais malheureusement, parce que le serpent bouge au rythme de sa taille, il va beaucoup trop vite. Cela signifierait que la tête devrait se déplacer à un incrément beaucoup plus petit tel que (2, 2) dans sa direction plutôt que ce que j'ai maintenant (32, 32). Parce que je travaille sur ce jeu de temps en temps pendant quelques semaines tout en gérant l'école, je pense que j'ai trop réfléchi à la façon d'y parvenir. C'est probablement une solution simple, je ne la rattrape pas.
Voici un pseudo-code pour ce que j'ai essayé basé sur ce qui est logique pour moi. Je ne peux pas vraiment penser à une autre façon de le faire.
for(int i = SnakeLength - 1; i > 0; i--){
current = SnakePart[i], next = SnakePart[i - 1];
current.x = next.x - (current.width * cos(next.angle));
current.y = next.y - (current.height * sin(next.angle));
current.angle = next.angle;
}
SnakeHead.x += cos(SnakeAngle) * SnakeSpeed;
SnakeHead.y += sin(SnakeAngle) * SnakeSpeed;
Cela produit quelque chose comme ceci: Code en action . Comme vous pouvez le voir, chaque partie reste toujours derrière la tête et ne fait pas d'effet "Trail".
Un exemple parfait de ce que je fais peut être trouvé ici: Data Worm . Pas la rotation de la fenêtre mais l'effet de fuite des triangles.
Merci pour toute aide!
la source