chopsuey Utilisateur confirmé: Rang ***
Messages : 523 Localisation : saint etienne Projet Actuel : All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
...
| Sujet: pacman image_angle Jeu 26 Déc 2013 - 11:11 | |
| Je fais un jeu pacman et je tombe sur un problème étrange. Enfaite je m'en fou un peu de faire ce jeu je pourrais laisser tomber mais je reste bloqué sur ce problème par ce qu'il faut que je comprenne. Mes déplacements marchent bien, mais si je change l'angle de l'image pour chaque direction il se bloque dans le mur. Pourtant c'est du 32x32 avec un point d'origine à 16x16 et la boite de collision est rectangulaire en 32x32 donc changer image_angle ne devrait pas perturber les collisions puisque dans n’importe quel sens la boite reste la même. Les bloques font eux aussi 32x32 et le chemin qui sépare les bloques fait également 32x32. J'ai essayé en créant 2 sprites un verticale et l'autre horizontal et en jouant avec xscale et yscale mais c'est pareil. J'ai pas essayé mais normalement ça devrait fonctionner en faisant 4 sprites différent mais je vois pas pourquoi je serrais obligé de faire ça et j'ai envie de comprendre où est mon erreur. mon code: D=direction DF=direction futur, c'est la direction que le joueur prévoit de prendre. - Code:
-
if x<0{x=room_width} if x>room_width{x=0}
image_angle=D
for (i=0;i<vitesse;i+=1) { if keyboard_check(vk_right)and not position_meeting(x+(sprite_width/2)+1,y,obj_bloc) { if D==180{D=360} DF=360 } if keyboard_check(vk_left)and not position_meeting(x-(sprite_width/2)-1,y,obj_bloc) { if D==360{D=180} DF=180 } if keyboard_check(vk_down)and not position_meeting(x,y+(sprite_height/2)+1,obj_bloc) { if D==90{D=270} DF=270 } if keyboard_check(vk_up)and not position_meeting(x,y-(sprite_height/2)-1,obj_bloc) { if D==270{D=90} DF=90 }
if D==360 //droite { if not place_free(x,y-1) or not place_free(x,y+1) { if place_free(x+1,y) {x+=vitesse/vitesse} } if place_free(x,y-1)or place_free(x,y+1) { if DF==270{D=270;} if DF==90{D=90;} if DF==360 { if place_free(x+1,y) {x+=vitesse/vitesse} } } }
if D==180 //gauche { if not place_free(x,y-1)or not place_free(x,y+1) { if place_free(x-1,y) {x-=vitesse/vitesse} } if place_free(x,y-1)or place_free(x,y+1) { if DF==270{D=270;} if DF==90{D=90;} if DF==180 { if place_free(x-1,y) {x-=vitesse/vitesse} } } }
if D==270 //bas { if not place_free(x-1,y) or not place_free(x+1,y) { if place_free(x,y+1) {y+=vitesse/vitesse} } if place_free(x-1,y) or place_free(x+1,y) { if DF==180{D=180;} if DF==360{D=360;} if DF==270 { if place_free(x,y+1) {y+=vitesse/vitesse} } } }
if D==90 //haut { if not place_free(x-1,y) or not place_free(x+1,y) { if place_free(x,y-1) {y-=vitesse/vitesse} } if place_free(x-1,y) or place_free(x+1,y) { if DF==180{D=180;} if DF==360{D=360;} if DF==90 { if place_free(x,y-1) {y-=vitesse/vitesse} } } } }
_________________ - Spoiler:
|
|
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: pacman image_angle Jeu 26 Déc 2013 - 11:14 | |
| - chopsuey a écrit:
- Pourtant c'est du 32x32 avec un point d'origine à 16x16 et la boite de collision est rectangulaire en 32x32 donc changer image_angle ne devrait pas perturber les collisions puisque dans n’importe quel sens la boite reste la même.
Ben non justement, vu qu'on ne peut couper un pixel en deux. Si ça avais été du 33x33 ça aurais pu passer, mais dans tous les cas on ne modifie jamais image_angle si on veux juste modifier l'affichage. image_angle tourne aussi le masque de collision, donc a n'utiliser que quand on en a vraiment besoin a ce niveau. Et j'ai du mal a comprendre ton vitesse/vitesse. Pourquoi ne pas juste mettre 1? |
|
chopsuey Utilisateur confirmé: Rang ***
Messages : 523 Localisation : saint etienne Projet Actuel : All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
...
| Sujet: Re: pacman image_angle Jeu 26 Déc 2013 - 11:42 | |
| Ha mais oui ok donc il ne peut pas y avoir de centre avec du 32x32. Mais du coup j'avais essayé en faisant un draw_sprite et en utilisant un autre mask mais ça changeait rien. Au pire je change juste la taille, mais c'est dommage ça serrait bien d'avoir une fonction image_angle qui ne modifie pas le mask par ce que c'est pas la 1er fois que ça me pose des problèmes. Pour vitesse/vitesse effectivement dans ce cas ça sert à rien. Je fais ça par habitude par ce que en principe j'utilise toujours des variables d'accélération et de décélération qui change la valeur de vitesse et donc je met vitesse/vitesse_max pour i<vitesse_max Mais ouais la ça sert à rien j'y est juste pas réfléchit ^^ Et merci _________________ - Spoiler:
|
|
Contenu sponsorisé
| Sujet: Re: pacman image_angle | |
| |
|