| | Namcap | |
| | Auteur | Message |
---|
Shrom Débutant
Messages : 18
| Sujet: Namcap Lun 26 Déc 2011 - 15:12 | |
| Bonjour tous le monde, Il y a quelque temps, j'ai posté sur ce forum pour avoir de l'aide quand a la création d'un moteur de déplacement de type Pacman et "onilink_" m'avait bien dépanné et je l'en remercie. Voici mon script : - Code:
-
// ############################################# // #### Script de déplacement de Namcap V 1 #### // #### Made By Shrom & Doyou #### // #### Special thanks to : onilink_ #### // #############################################
//Gestion de déplacement de Nampac en dehors de la room if (bbox_left>room_width) or (bbox_right<0) or (bbox_top>room_height) or (bbox_bottom<0) // si l'objet sors de la room alors il rentre de l'autre coté de la room { move_wrap(true,true,32) }
// Déplacement si il n'y a pas de collision for(i=0; i<4; i+=1) // Pour i allant de 1 à 4 en fonction de la direction choisit { if(keyboard_check(key[i]) && place_snapped(32,32)) // Si l'on a appuyé sur une touche et que Namcap est placé dans une grille de 32*32 { if(place_free(x+lx[i], y+ly[i])) // Si il y a de la place entre Namcap et un objet de type "solid" en position X et Y calculé dans l'evénement "Create" { Coll = 0 // Variables de debug affichant si il y a une collision ou non ( 1 = oui 0 = non ) place_free_X= x+lx[i] // Variable de Debug place_free_Y =y+ly[i] // Variable de Debug switch(i) // On fonction de la direction, on choisit le sprite à afficher. { case 0: sprite_index = Namcap_R_spr // Sprite Droite break case 2: sprite_index = Namcap_L_spr // Sprite Gauche break case 1: sprite_index = Namcap_H_spr // Sprite Haut break case 3: sprite_index = Namcap_B_spr // Sprite Bas break } direction = i*90 // on va dans la direction choisit en fonction de la touche préssée. speed = 2 // On fixe la vitesse break } } }
//Si il y a une collision, donc si il n'y a pas de place, on arrete Namcap if(place_snapped(32,32) && !place_free(x+lx[direction div 90], y + ly[direction div 90])) { speed = 0 Coll = 1 // Variables de debug affichant si il y a une collision ou non ( 1 = oui 0 = non ) not_place_free_X =x+lx[direction div 90] // Variable de Debug not_place_free_Y = y + ly[direction div 90] // Variable de Debug }
//Gestion du fait que Namcap rentre en collision avec des "Balles" //Lors il rencontre l'objet Namcap_dot_obj alors on execute ce code dans l'instance rencontréé( grâce a son ID) //et on détruit l'instance en rajoutant des point a chaque fois. with (Namcap_dot_obj) { if place_meeting(x,y, Namcap_obj) { instance_destroy() } } Mon problème est le suivant, ; Si je l'aisse la valeur de la variable "speed" a "2", tout va bien, mais lorsque je veut la passé a 3, ou plus, je passe à travers certain mur, mais déplacement ne sont plus correctement géré, etc... J'ai bien sur chercher avant de posté ici, mais je ne comprends pas... Someone can help me ? |
| | | onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Namcap Lun 26 Déc 2011 - 16:09 | |
| Le problème est simple, avec speed = 1, ta position s'incrémente de 1 en 1, donc si ton x=0 tu passeras de 0, a 1, puis 1 a 2, jusqu'a la taille de la case. Avec 2 pareil si la taille de ta case est paire. Mais imagine, si ta case fait 16, bah 16 n'étant pas multiple de 3, si t'incrémente de 3 en 3 tu va dépasser avant les tests de collisions. C'est pour ça qu'on fait toujours les tests de collisions de 1 en 1, répétés 'speed' fois. - Code:
-
repeat(mySpeed) { if(free(x+incr_x, y+incr_y)) { x += incr_x y += incr_y } } |
| | | Shrom Débutant
Messages : 18
| Sujet: Re: Namcap Lun 26 Déc 2011 - 18:35 | |
| Merci encore de ton aide onilink_, Voici mon script : - Code:
-
if (bbox_left>room_width) or (bbox_right<0) or (bbox_top>room_height) or (bbox_bottom<0) // si l'objet sors de la room alors il rentre de l'autre coté de la room { move_wrap(true,true,32) }
// Déplacement si il n'y a pas de collision for(i=0; i<4; i+=1) // Pour i allant de 1 à 4 en fonction de la direction choisit { if(keyboard_check(key[i]) && place_snapped(32,32)) // Si l'on a appuyé sur une touche et que Namcap est placé dans une grille de 32*32 { if(place_free(x+lx[i], y+ly[i])) // Si il y a de la place entre Namcap et un objet de type "solid" en position X et Y calculé dans l'evénement "Create" { Coll = 0 // Variables de debug affichant si il y a une collision ou non ( 1 = oui 0 = non ) place_free_X= x+lx[i] place_free_Y =y+ly[i] switch(i) // On fonction de la direction, on choisit le sprite à afficher. { case 0: sprite_index = Namcap_R_spr // Sprite Droite break case 2: sprite_index = Namcap_L_spr // Sprite Gauche break case 1: sprite_index = Namcap_H_spr // Sprite Haut break case 3: sprite_index = Namcap_B_spr // Sprite Bas break } direction = i*90 // on va dans la direction choisit en fonction de la touche préssée. speed = Myspeed // On fixe la vitesse break } } }
//Si il y a une collision, donc si il n'y a pas de place, on arrete Namcap repeat (Myspeed) { if(place_snapped(32,32) && !place_free(x+lx[direction div 90], y + ly[direction div 90])) { speed = 0 Coll = 1 // Variables de debug affichant si il y a une collision ou non ( 1 = oui 0 = non ) not_place_free_X =x+lx[direction div 90] not_place_free_Y = y + ly[direction div 90] x += lx[direction div 90] y += ly[direction div 90] } } //Gestion du fait que Namcap rentre en collision avec des "Balles" //Lors il rencontre l'objet Namcap_dot_obj alors on execute ce code dans l'instance rencontréé( grâce a son ID) //et on détruit l'instance en rajoutant des point a chaque fois. with (Namcap_dot_obj) { if place_meeting(x,y, Namcap_obj) { instance_destroy() } } Malheusement, mon problème persiste, peut tu me guider quand au placement de cette fonction dans mon code ? PS : la valeur de la variable 'Myspeed' est égal a 3 est incorporé dans l'événement create de l'objet Namcap. |
| | | onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Namcap Lun 26 Déc 2011 - 20:40 | |
| Bon voila ce que j'aurais fait : #create - Code:
-
key[0]=vk_right key[1]=vk_up key[2]=vk_left key[3]=vk_down for(i=0; i<4; i+=1) { lx[i]=lengthdir_x(1, i*90) ly[i]=lengthdir_y(1, i*90) } myspeed = 0 SPEED = 3 dir = 3
sprite[0] = Namcap_R_spr sprite[1] = Namcap_H_spr sprite[2] = Namcap_L_spr sprite[3] = Namcap_B_spr #step - Code:
-
getdir()
repeat(myspeed) { getdir() if(place_free(x+lx[dir], y+ly[dir])) { x += lx[dir] y += ly[dir] } }
if(place_snapped(16, 16) && !place_free(x+lx[dir], y+ly[dir])) myspeed = 0 #script getdir - Code:
-
for(i=0; i<4; i+=1) { if(keyboard_check(key[i]) && place_snapped(16, 16)) { if(place_free(x+lx[i], y+ly[i])) { dir = i myspeed = SPEED sprite_index = sprite[i] break } } } De tête ça devrais marcher |
| | | Shrom Débutant
Messages : 18
| Sujet: Re: Namcap Mar 27 Déc 2011 - 13:18 | |
| Merci onilink_ !!! J'ai adapter ta solution a mon contexte, et cela fonctionne parfaitement ! désolé du dérangement... |
| | | Contenu sponsorisé
| Sujet: Re: Namcap | |
| |
| | | | Namcap | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |