1

J'ai commencé un petit jeu de plateforme mais j'ai un problème pour gérer les collisions : si j'utilise une fonction genre pixel_test, ça marche mais comment puis-je différencier un mur d'une case à taper (genre champignon pour mario)? Je précise que c'est du déplacement pixel par pixel et que c'est pour l'instant le bonhomme qui bouge et pas la mapwink(ça a sans doute pas d'importance mais je le dis quand même.
Merci à tous ceux qui me répondront!top
Sylvain

2

Passe par un tableau de collision ....

style un tableau à 2 dimensions (matrice), avec un 0 si tu peux pas y aller, et n'importe quoi d'autre si c bon. wink
Ensuite tu teste, ton perso est au position X et Y au début, si se déplace de + de 16 pxl par ex, on fait X++ (car il a avancé dans le tableau/niveau), et ensuite on teste :

if(droite && mat[y][X])
avance_droite++;

ect ect ...
Tu vois le truc ?

ton tableau de collisions est != de celui de tile (pour savoir quel sprite afficher dans le décort) évidemment , même si certain arrivent à les regrouper en un seul smile
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

3

ouai mais ça ferait quand même une matrice de 160*100 pour un seul écran (alors pour une map de plusieurs écrans t'imagines la matrice?) et quand tu "scroll" la map, il faut scroller aussi la matrice de collisions et donc tout décaller d'un pixel! ça va ramer non? et comment tu décale la matrice de collisions?
Sylvain

4

Mais non ça fait une matrice de 160/8 x 100/8 (en supposant que les éléments soient placés avec une "résolution" de 8 pixels) !

Et y'a pas à décaler cette matrice. Comme la matrice décrivant le niveau, elle est plus large que l'écran, donc on gère simplement un pointeur sur la première colonne visible à l'écran.

Question : tu utilises quelle bibliothèque graphique pour ton jeu ?
(grin)
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

5

Minable la questionsmile
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

6

Fout-moi la paix toi fuck
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

7

meuh non, pour un niveau grand comme l'écran, tu fais un tableau de 6*10 !!!

10* sprite_16x16 = 160 pxl

6* sprite_16x16 ~= 100 pxl

Quand tu scrolles, déjà la map de collision bouge pas smile, c les coordonnées de ton perso qui augmente dedant, mais pour l'affichage pur (map de tile), là tu affiches tout "nbre_décallage" pxl plus loin,

Sprite16(0 + xdécallage, 0 + ydecallage, 16, ....};

quand tu vas vers la droite/gauche , bah tu augmentes/soustraits xdécallage/ydécallage de N pixels, et comme ça ton décort scroll ...

vas voir là si tu veux mieux comprendre :

topics/15011-theorie-de-scrolling et le post #1
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

8

Pim89 a écrit :
Passe par un tableau de collision ....

style un tableau à 2 dimensions (matrice), avec un 0 si tu peux pas y aller, et n'importe quoi d'autre si c bon. wink


Hum d'un point de vu programmation c le plus simple a utilise, mais d'un point de vu logique, je mettrait plutot

0 -> Rien
1 ou > -> Bloqué
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

9

C'est ce que je pensais aussi embarrassed
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

10

Et pi meme encore mieux :

Tu fait qu'un seul tableau avec

0 > Pas de "bloc"
X > Sprite n°X

(ou X >= 1)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

11

Ouai et à côté on construit une table de pointeurs vers les sprites, dont chaque "case" a pour index le numéro du sprites. C'est la méthode la plus utilisée je crois.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

12

Et c la méthode que g utilisé pour tt mes jeu en tibasic qui utilisait des maps
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

13

godzil a écrit :
Hum d'un point de vu programmation c le plus simple a utilise, mais d'un point de vu logique, je mettrait plutot

0 -> Rien 1 ou > -> Bloqué


c pareil roll, l'avantage du 0, c'est que pour aller qq part, on fait juste if(collision_map(&perso)) { scroll_droite(); .... }

(perso = structure quelconque pour plus de simplicité wink).

Du coup on ne fait pas un test plus lourd (enfin, je crois) comme if(collision_map(&perso) !=1) ...

Mais bon, à chacun le soin de choisir ces numéros wink
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

14

ouais mais ya toujours un prob :

le bonhomme(16x16) se déplace en px par px et la variable x_ds_map (par exemple) est incrémentée si le bonhomme a avancé de 16 px ou est décrémenté si il a reculé de 16 px(jusque là tout est clair). Mais lorsqu'il saute, il se trouve forcément à un moment donné entre deux sprites du décort(verticalement ou horizontalement) et c'est à ce moment là qu'il passe à travers les murs! comment faire?tsss
Sylvain

15

Si il est au milieu, tu doit pouvoir facilement le déterminer avec un petit calcul, tu test sur les 2 cas au dessus du décros en x_ds_map et x_ds_map +1 (en suposant qu'il avance vers la droite)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

16

Oui, là il faut tester pour 2 case wink

par ex, si tu sais que x_perso_map = 2;, et qu'il s'est décallé de 4 pxl (x_decall = 4), et bien tu sais que pour le saut, il faudra tester la case x_perso_map et x_perso_map+1 pour bien entrer en collision avec tout le plafond.

avec une fonction du style :

char sign(char i)
{
  return (i < 0 ? -1 : (i>0 ? 1 : 0));
}


que tu utilises comme ça (enfin là c pour l'algo, après faut optimiser)

if(saut)
 if(map[y_perso_map][x_perso_map] != mur && map[y_perso_map][x_perso_map +[b] sign(x_decal)[/b]] != mur)
  y_decal--; // ordonnée diminue, il monte


et ensuite test bien si y_decal == -16, comme ça tu fait y_perso_map--; pour dire qu'il a franchi une case en hauteur wink
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^