UrWorld, le retour du retour

Le problème exposé dans ce sujet a été résolu.

J'ai vraiment du mal à voir comment, de nos jours, un jeu 2D (même pas d'ombres !) n'arrive pas à dépasser les 60FPS. Est-ce que ça vient de la librairie que tu utilises ou de ton utilisation de la librairie ?

Ce n'est pas une critique, mais une remarque que je me faisais. ;)

C'est un jeu en 2D, donc je pense qu'il existe une solution : tu crées une grille principale, dont la valeur est 1 et qui vaut x pixels et une sous grille qui vaut x/n pixels (ton x doit être un multiple de n). Le x doit être assez petit pour rendre le x/n assez petit et donc le déplacement fluide et assez grand pour ne pas avoir trop de cases à gérer (et un bloc doit faire x de long évidemment ;) ).

EDIT :
Du coup, pour les trucs autres que le déplacement, tu te bases sur la grande grille, pour le déplacement sur la petite. :)

+0 -0

Je ne vois pas trop ce que tu veux faire, poliorcetics.

Le plus simple est de gérer une classe de base ou un composant qui peut entrer en collision avec la grille. Tu peux le gérer en plusieurs étapes:

  • dans un premier temps, il faut le faire bouger simplement et fluidement, avec une formule qui prend en compte le framerate du jeu. Pour cela, le mieux est d'avoir une position (x, y) en pixel et en float (et pas integer). Tu as donc un perso qui peut aller partout, à travers les tiles,

  • ensuite, il faut détecter la collision entre cet objet et la map: par exemple, déterminer sur quels tiles il se trouve (ou plutôt sa hitbox se trouve). Il te faut également une "règle" qui dit quel tile est passant et quel ne l'est pas (tu peux aussi passer par une grille logique). Tu auras donc un perso qui peut aller partout, et un feedback quand il est en collision (par exemple, tu affiches un texte, ou tu lui colles un cadre rouge),

  • ensuite, tu dois interdire la collision - donc ne déplacer le personnage que s'il n'entre pas en collision (et ça, tu sais le détecter),

  • après, tu dois détecter si le personnage est sur le sol (par exemple, tu teste s'il entre en collision si tu le descends d'un pixel). S'il est sur le sol, il a le droit de sauter, s'il n'est pas sur le sol, tu lui appliques une physique gravitationnelle.

Essaie de valider toutes ces étapes - je suis sûr que tu y arriveras ;) - et tu auras un système qui fonctionne avec des sprites de toutes les tailles.

+2 -0

Pour les collisions, il n'y a pas de "saut de case" et de décalage: soit le personnage est en collision, soit il ne l'est pas, c'est tout.

Pour le FOV, tu peux le gérer par case en définissant le "centre" de ton personnage, centre qui indiquera dans quelle case il se trouve, mais la question est plutôt celle-ci: qu'apporte un FOV dans un jeu de ce style ? Je pense qu'il ne sert pas à grand-chose, à part rendre le rendu "dégueu" comme tu l'as écrit plus haut, et d'ailleurs, très peu de jeux de plateforme ont implémenté cette fonctionnalité.

EDIT: Sinon, il y a la technique du lancer de rayon qui peut indiquer, à partir d'une origine en pixel, quelle case est "visible" ou pas.

+0 -0

Ah OK ! Je pensais à un field of vision du point de vue du perso :P

Et bien… Il suffit de bouger la caméra avec le perso, donc au pixel près.

Bon, je télécharge :)

EDIT: Alors, j'ai réussi à le lancer :) J'ai essayé de créer un pseudo avec une majuscule, mais le jeu s’arrête… J'ai créé un pseudo sans majuscule et ça passe. Le jeu à démarre, j'ai un perso toujours à gauche de l'écran (je pense qu'il devrait être centré, sauf à la rigueur s'il est à une des extrémité du monde). Je me suis un peu promené, puis j'étais bloqué. J'ai essayé de créer un pont ou un escalier ou un truc comme ça, mais le perso passait à travers les tiles, puis une tile est devenue magenta, puis je me suis enfermé… :)

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte