| | Faire un jeu ressemblant (énormément) à haxball | |
| | Auteur | Message |
---|
saeco Nouveau
Messages : 9
| Sujet: Faire un jeu ressemblant (énormément) à haxball Mar 28 Fév 2012 - 19:24 | |
| Bonjour à tous, J'utilise Game maker pour faire un jeu ressemblant à haxball ( http://haxball.com/ ) mais jouable en réseau local. Pour le réseau j'ai utilisé la 39dll en suivant le tuto de daminetreg ( à télécharger sur un lien d'un post) : https://cbna.forumactif.com/t7133-multijoeur-39dll Je vous conseille de me suivre avec l'exemple gmk fournit dans le tuto pour mieux me comprendre Donc j'ai bien la boule bleu et la boule rouge que je peux controller comme si il y avait deux joueurs en lançant deux fois game maker. Mais j'ai deux GROS problèmes : -D'abord au niveau ds collision, rien à faire les boules passent à travers tout (même entre elles alors que je coche "solide" dans les propriétés des objets). J'ai essayé de modifier l'event piece of code de chaque objet (en parlant des boules) mais cela ne marche pas -ensuite au niveau du moteur physique je ne sais pas comment avoir une physique ressemblant à celle de haxball, j'ai essayé le moteur extreme physics mais j'ai énormément de mal à le configurer, n'existe t-il pas de solutions plus simples ? (car je n'ai pas besoin de la gravité) Voila merci d'avance pour vos réponses |
| | | saeco Nouveau
Messages : 9
| Sujet: Re: Faire un jeu ressemblant (énormément) à haxball Mer 29 Fév 2012 - 21:24 | |
| Bon je commence à maitriser le moteur extrem physics mais j'ai toujours un problème pour la friction. Je ne sais pas quelle fonction (script) du moteur utiliser. |
| | | Caohimin Très bonne participation
Messages : 134 Localisation : Au coeur de cette charmante demoiselle.
| Sujet: Re: Faire un jeu ressemblant (énormément) à haxball Jeu 1 Mar 2012 - 22:22 | |
| Bonjour saeco,
Sans exemple j'ai un peu de mal à suivre ce que tu veux comme solution...
Si cela ne te dérange pas, partage ton GMK en MP pour que je puisse y jeter un rapide coup d'oeil.
Bien à toi.
PS : j'ai vue le jeu, c'est pas mal comme concept, et c'est plutôt bien pensé, avec un peu d’innovation se serait pas mal de lui ajouter le SmartLight. Mais risque de bouffer en ram... _________________ Caohimin Communauté Barbarre Nauséabonde Ahuri
Dernière édition par Caohimin le Mar 6 Mar 2012 - 0:07, édité 1 fois |
| | | saeco Nouveau
Messages : 9
| Sujet: Re: Faire un jeu ressemblant (énormément) à haxball Ven 2 Mar 2012 - 9:15 | |
| Bonjour Caohimin (et merci pour la réponse ) Je t'envoie le gmk par mp, mais j'ai toujours le même problème que lorsque je relâche la touche flèche droite (par exemple) j'aimerai qu'il y ai de la friction qui s'applique sur le joueur pour qu'il s'arrête petit à petit (comme dans le jeu quoi), mais je ne trouve pas le script d'extrem physics qui permet ça. D'ailleurs existe t_il un tuto en français d'extrem physics sur internet ? Parce que je ne trouve rien dessus. Pour le smartLight ça peut être une bonne idée, mais d'abord je vais essayer de gérer les collisions Ah et ne sois pas surpris par le background de mon jeu qui est le copié collé du terrain du vrai jeu |
| | | Mobi Utilisateur confirmé: Rang ****
Messages : 1256 Localisation : Dijon
| Sujet: Re: Faire un jeu ressemblant (énormément) à haxball Ven 2 Mar 2012 - 11:31 | |
| Personnellement, je n'est pas trouvé de solution pour mon jeu : pour la friction. Essai de la faire manuellement en divisant la vitesse par deux à chaque steps ! _________________ |
| | | Caohimin Très bonne participation
Messages : 134 Localisation : Au coeur de cette charmante demoiselle.
| Sujet: Re: Faire un jeu ressemblant (énormément) à haxball Ven 2 Mar 2012 - 12:04 | |
| Bonjour, Je n'aime pas trop prendre les scripts des autres, si j'ai le temps je te monte un script prenant tout en compte tout ce que j'ai vue sur le jeu, tu y a sûrement jouer, alors il me faudrait des précision, je te mp plus tard, je jète un œil après le déjeuner à ton gmk.
_________________ Caohimin Communauté Barbarre Nauséabonde Ahuri |
| | | 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: Faire un jeu ressemblant (énormément) à haxball Dim 4 Mar 2012 - 9:06 | |
| pour la friction pourquoi ne pas utiliser dans le step de la balle par exemple pour speed = 20:
friction += 1
tous simplement ? |
| | | Caohimin Très bonne participation
Messages : 134 Localisation : Au coeur de cette charmante demoiselle.
| Sujet: Re: Faire un jeu ressemblant (énormément) à haxball Dim 4 Mar 2012 - 14:39 | |
| Ce n'est pas exactement la question poser...
Il souhaiterait connaitre la fonction d'extrem physic, permettant de régler ceci.
Il faudrait trouver ou même faire un tuto sur ce moteur. _________________ Caohimin Communauté Barbarre Nauséabonde Ahuri |
| | | Mobi Utilisateur confirmé: Rang ****
Messages : 1256 Localisation : Dijon
| Sujet: Re: Faire un jeu ressemblant (énormément) à haxball Dim 4 Mar 2012 - 17:25 | |
| Comme je l'ai déjà dit, je n'est pas trouvé malgré mes recherches laborieuses _________________ |
| | | Caohimin Très bonne participation
Messages : 134 Localisation : Au coeur de cette charmante demoiselle.
| Sujet: Re: Faire un jeu ressemblant (énormément) à haxball Dim 4 Mar 2012 - 17:28 | |
| C'est pour cette raison que j'avais proposer a saeco de lui faire un moteur pour son jeu, mais je n'ai pas trop de temps a lui accorder non plus, mais c'est pas trop de boulot, donc ça va. Ou d'apprendre le GML et de le faire lui. Mais il préfère utiliser extrem physic... Tant pis. _________________ Caohimin Communauté Barbarre Nauséabonde Ahuri |
| | | Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: Faire un jeu ressemblant (énormément) à haxball Dim 4 Mar 2012 - 19:48 | |
| Pour ce qui est d'un tuto sur EP il y en a un très bien ici. |
| | | Mobi Utilisateur confirmé: Rang ****
Messages : 1256 Localisation : Dijon
| Sujet: Re: Faire un jeu ressemblant (énormément) à haxball Dim 4 Mar 2012 - 20:33 | |
| Autant pour moi ! Supposée friction : ici (ep_shape_set_material) _________________ |
| | | saeco Nouveau
Messages : 9
| Sujet: Re: Faire un jeu ressemblant (énormément) à haxball Mer 7 Mar 2012 - 17:03 | |
| Merci pour vos réponses Les déplacements sont ok mais j'ai un nouveau problème (et oui encore ) Quand je lance deux sessions du jeux les 2 joueurs se voient mais par contre ils ne voient que le sprite de l'autre joueur bouger. C'est à dire que la structure physique de l'adversaire ne bouge pas mais la sienne si, elle bouge avec le sprite. Je pense que le moteur physique n'envoie pas ses donnée x y, et je ne sais pas comment faire. Voici un screen ou je bouge le joueur rouge : https://i.servimg.com/u/f42/17/32/42/86/screen10.jpgSur le screen on peut voir que le sprite ne suit pas tout à fait l'objet, il a un retard. |
| | | saeco Nouveau
Messages : 9
| Sujet: Re: Faire un jeu ressemblant (énormément) à haxball Mar 13 Mar 2012 - 22:44 | |
| Bonjour, La physique de la balle et du joueur sont à peu près ok. Mais j'ai un nouveau soucis avec extreme physics pour tirer la balle dans un angle précis (celui qui suit la droite entre le centre du joueur et le centre de la balle) Explication : quand je controle le joueur et que je suis très proche de la balle, j'appuie sur espace et cela tire la balle un plus loin mais seulement dans l'axe x , voici le code : /*Si le joueur tape dans la balle */ joueurx = ep_body_get_x_center(global.world, body); /*fonction qui permet de savoir la position du centre du joueur 1 dans l'axe x*/ joueury = ep_body_get_y_center(global.world, body); distxx = abs(joueurx - global.ballx) /*le calcule pour savoir quand la balle est collé au joueur pour pouvoir la tirer*/ distyy = abs(joueury - global.bally) if sqrt((distxx * distxx)+(distyy * distyy))< 29 and keyboard_check(vk_space) /*si ils sont assez proches*/ { xballforce=30 yballforce=30 ep_body_apply_impulse(global.world, global.ballbody, x, y, xballforce,0,0,0,true,true) /*fonction qui applique une force sur la balle mais comme vous voyez on ne peut pas régler l'angle*/ } Voici une image montrant la situation : https://i.servimg.com/u/f42/17/32/42/86/dessin10.jpgSi quelqu'un maitrise bien extreme physics qui me le dise merci. |
| | | saeco Nouveau
Messages : 9
| Sujet: Re: Faire un jeu ressemblant (énormément) à haxball Mer 4 Juil 2012 - 18:49 | |
| Bonjour, j'ai repris le développement de mon petit jeu J'ai réussi à synchroniser les sprites des joueurs mais pas leurs "body" crées avec extrem physics (Par exemple joueur2 ne voit pas le body de joueur1 mais celui ci le voit) Mais je n'arrive pas à envoyer la position de la balle à chaque client. Et pourtant ça marche pour les joueurs entre eux. Donc j'ai: -deux joueur : joueur1 (bleu) et joueur2 (rouge) joueur1 est celui qui crée la session. -la balle (qui n'est pas synchronisée) voila une image qui montre la situation : https://i.servimg.com/u/f42/17/32/42/86/proble10.jpgvoila le code : la balle : obj_ballevent create : - Spoiler:
global.ballbody = ep_body_create_dynamic(global.world, false); shape = ep_shape_create_circle(global.world, global.ballbody, 10, 0, 0, 0, 3); ep_shape_set_collision(global.world, global.ballbody, shape, 1, 2, 0); ep_shape_set_material(global.world, global.ballbody, shape, 0.6, 0, 0, 0); ep_body_set_position(global.world, global.ballbody , x, y, 0); /* physique de la balle */ ep_body_set_damping(global.world, global.ballbody, 0, 0.05);
ep_body_set_mass(global.world, global.ballbody, 0.01); ep_body_set_max_velocity(global.world, global.ballbody, 8, 0);
global.ballx=ep_body_get_x_center(global.world, global.ballbody); global.bally=ep_body_get_y_center(global.world, global.ballbody); physics_object_set(global.ballbody);
clearbuffer(); /* Vider le buffer d'envoi */ writebyte(0); /* Définir l'id du type de message (déplacement joueur) */ writeshort(x); /* Ecrire la position x. */ writeshort(y); /* Ecrire la position y. */ sendmessage(global.sock); /* Envoyer le buffer à la socket cliente */ event step :
- Spoiler:
xvel = ep_body_get_xvel_center(global.world, global.ballbody); yvel = ep_body_get_yvel_center(global.world, global.ballbody);
if xvel < 0 and yvel <0 { ep_body_set_velocity_center(global.world, global.ballbody, xvel+0.06, yvel+0.06,0); } if xvel < 0 and yvel >0 { ep_body_set_velocity_center(global.world, global.ballbody, xvel+0.06, yvel-0.06,0); } if xvel > 0 and yvel >0 { ep_body_set_velocity_center(global.world,global.ballbody, xvel-0.06, yvel-0.06,0); } if xvel > 0 and yvel <0 { ep_body_set_velocity_center(global.world, global.ballbody, xvel-0.06, yvel+0.06,0); } global.ballx=ep_body_get_x_center(global.world, global.ballbody); global.bally=ep_body_get_y_center(global.world, global.ballbody); physics_object_update(global.ballbody);
clearbuffer(); /* Vider le buffer d'envoi */ writebyte(1); /* Définir l'id du type de message (déplacement joueur) */ writeshort(global.ballx); /* Ecrire la position x. */ writeshort(global.bally); /* Ecrire la position y. */ sendmessage(global.sock); /* Envoyer le buffer à la socket cliente */ Les joueurs : obj_player1 event create : - Spoiler:
/*creation joueur 1*/
if (global.server == true)//Si je suis le joueur 1 { global.bodyjoueur1 = ep_body_create_dynamic(global.world, true); ep_body_set_position(global.world, global.bodyjoueur1 , x, y, 0);
shape = ep_shape_create_circle(global.world, global.bodyjoueur1 , 15, 0, 0, 0, 0.05); ep_shape_set_collision(global.world, global.bodyjoueur1 , shape, 2, 4, 0); ep_shape_set_material(global.world, global.bodyjoueur1 , shape, 0.1, 0, 0, 0);
/* physique du joueur 1 (bleu) */ ep_body_set_damping(global.world, global.bodyjoueur1 , 0, 0); ep_body_set_mass(global.world, global.bodyjoueur1 , 0.03); ep_body_set_max_velocity(global.world, global.bodyjoueur1 , 5, 0); physics_object_set(global.bodyjoueur1 );
/*initialisation variables force et vitesse du joueur 1 */ global.xforce1=0; global.xvitesse1=0;
global.yforce1=0; global.yvitesse1=0;
clearbuffer(); /* Vider le buffer d'envoi */ writebyte(1); /* Définir l'id du type de message (déplacement joueur) */ writeshort(global.ballx); /* Ecrire la position x. */ writeshort(global.bally); /* Ecrire la position y. */ sendmessage(global.sock); /* Envoyer le buffer à la socket cliente */
}
event step : - Spoiler:
/* ****Synchronisation**** */ if (global.server == false)//Autoriser la reception des données pour le joueur 2 { while (1) //Faire une boucle infinie de lecture des messages. { sock_weight = receivemessage(global.sock); /* Recevoir le message. */ if(sock_weight < 0) break; /* Si le poid du message est inférieur à 0 on abandonne la lecture. */ if(sock_weight == 0) /* S'il est égal à 0 c'est que l'autre joueur s'est déconnecté. */ { show_message("L'autre joueur à quitté le jeu !!"); closesocket(global.sock); /* On ferme la socket utilisée par l'autre joueur */ break; } _id = readbyte(); /* Lire le premier octet pour voir l'id du message */ switch(_id) /* selon l'id effectuer une autre action */ { case 0: x = readshort(); y = readshort(); case 1: global.ballx = readshort(); global.bally = readshort(); break; } } }
/* ****Déplacements**** */ if (global.server == true)//Si je suis le joueur 1 { if keyboard_check(vk_numpad2) { xj2 = ep_body_get_x(global.world, global.bodyjoueur2); yj2 = ep_body_get_y(global.world, global.bodyjoueur2); show_message(xj2) show_message(yj2) } if keyboard_check(vk_left) { xforce1 = -0.15 ep_body_apply_impulse(global.world, global.bodyjoueur1 , x, y, xforce1, 0,0,true,true) clearbuffer(); /* Vider le buffer d'envoi */ writebyte(0); /* Définir l'id du type de message (déplacement joueur) */ writeshort(x); /* Ecrire la position x. */ writeshort(y); /* Ecrire la position y. */ sendmessage(global.sock); /* Envoyer le buffer à la socket cliente */ } yvitesse1 = ep_body_get_yvel_center(global.world, global.bodyjoueur1 ) xvitesse1 = ep_body_get_xvel_center(global.world, global.bodyjoueur1 ) if not keyboard_check(vk_left)and xvitesse1 < 0 { ep_body_set_velocity_center(global.world, global.bodyjoueur1 , xvitesse1+0.2, yvitesse1, 0) clearbuffer(); /* Vider le buffer d'envoi */ writebyte(0); /* Définir l'id du type de message (déplacement joueur) */ writeshort(x); /* Ecrire la position x. */ writeshort(y); /* Ecrire la position y. */ sendmessage(global.sock); /* Envoyer le buffer à la socket cliente */ } if keyboard_check(vk_right) { xforce1 = 0.15 ep_body_apply_impulse(global.world, global.bodyjoueur1, x, y, xforce1, 0,0,true,true) clearbuffer(); /* Vider le buffer d'envoi */ writebyte(0); /* Définir l'id du type de message (déplacement joueur) */ writeshort(x); /* Ecrire la position x. */ writeshort(y); /* Ecrire la position y. */ sendmessage(global.sock); /* Envoyer le buffer à la socket cliente */ } yvitesse1 = ep_body_get_yvel_center(global.world,global.bodyjoueur1) xvitesse1 = ep_body_get_xvel_center(global.world, global.bodyjoueur1) if not keyboard_check(vk_right)and xvitesse1 > 0 { ep_body_set_velocity_center(global.world,global.bodyjoueur1, xvitesse1-0.2, yvitesse1 , 0) clearbuffer(); /* Vider le buffer d'envoi */ writebyte(0); /* Définir l'id du type de message (déplacement joueur) */ writeshort(x); /* Ecrire la position x. */ writeshort(y); /* Ecrire la position y. */ sendmessage(global.sock); /* Envoyer le buffer à la socket cliente */ } if keyboard_check(vk_up) { yforce1 = -0.15 ep_body_apply_impulse(global.world, global.bodyjoueur1, x, y, 0,yforce1,0,true,true) clearbuffer(); /* Vider le buffer d'envoi */ writebyte(0); /* Définir l'id du type de message (déplacement joueur) */ writeshort(x); /* Ecrire la position x. */ writeshort(y); /* Ecrire la position y. */ sendmessage(global.sock); /* Envoyer le buffer à la socket cliente */ } yvitesse1 = ep_body_get_yvel_center(global.world, global.bodyjoueur1) xvitesse1 = ep_body_get_xvel_center(global.world, global.bodyjoueur1) if not keyboard_check(vk_up)and yvitesse1 < 0 { ep_body_set_velocity_center(global.world, global.bodyjoueur1, xvitesse1, yvitesse1+0.2, 0) clearbuffer(); /* Vider le buffer d'envoi */ writebyte(0); /* Définir l'id du type de message (déplacement joueur) */ writeshort(x); /* Ecrire la position x. */ writeshort(y); /* Ecrire la position y. */ sendmessage(global.sock); /* Envoyer le buffer à la socket cliente */ } if keyboard_check(vk_down) { yforce1 = 0.15 ep_body_apply_impulse(global.world, global.bodyjoueur1, x, y, 0,yforce1,0,true,true) clearbuffer(); /* Vider le buffer d'envoi */ writebyte(0); /* Définir l'id du type de message (déplacement joueur) */ writeshort(x); /* Ecrire la position x. */ writeshort(y); /* Ecrire la position y. */ sendmessage(global.sock); /* Envoyer le buffer à la socket cliente */ } yvitesse1 = ep_body_get_yvel_center(global.world, global.bodyjoueur1) xvitesse1 = ep_body_get_xvel_center(global.world, global.bodyjoueur1) if not keyboard_check(vk_down)and yvitesse1 > 0 { ep_body_set_velocity_center(global.world, global.bodyjoueur1, xvitesse1, yvitesse1-0.2, 0) clearbuffer(); /* Vider le buffer d'envoi */ writebyte(0); /* Définir l'id du type de message (déplacement joueur) */ writeshort(x); /* Ecrire la position x. */ writeshort(y); /* Ecrire la position y. */ sendmessage(global.sock); /* Envoyer le buffer à la socket cliente */ } /*Si le joueur 1 tape dans la balle */ joueurx = ep_body_get_x_center(global.world, global.bodyjoueur1); joueury = ep_body_get_y_center(global.world, global.bodyjoueur1); distxx = global.ballx-joueurx distyy = global.bally-joueury distxxabs = abs(global.ballx-joueurx ) distyyabs = abs(global.bally-joueury ) z = sqrt((distxx * distxx)+(distyy * distyy)) if sqrt((distxxabs * distxxabs)+(distyyabs * distyyabs))< 29 and keyboard_check(vk_space) { if distxx>0 and distyy>0 { ep_body_apply_impulse_relative(global.world, global.ballbody, 0, 0, distxxabs, distyyabs,0,0,true,true) } if distxx<0 and distyy>0 { ep_body_apply_impulse_relative(global.world, global.ballbody, 0, 0, -distxxabs, distyyabs,0,0,true,true) } if distxx>0 and distyy<0 { ep_body_apply_impulse_relative(global.world, global.ballbody, 0, 0, distxxabs,- distyyabs,0,0,true,true) } if distxx<0 and distyy<0 { ep_body_apply_impulse_relative(global.world, global.ballbody, 0, 0, -distxxabs,- distyyabs,0,0,true,true) } if distxx=0 and distyy<0 { ep_body_apply_impulse_relative(global.world, global.ballbody, 0, 0, 0, distyyabs,0,0,true,true) } if distxx=0 and distyy>0 { ep_body_apply_impulse_relative(global.world, global.ballbody, 0, 0, 0,- distyyabs,0,0,true,true) } if distxx<0 and distyy=0 { ep_body_apply_impulse_relative(global.world, global.ballbody, 0, 0, -distxxabs,0,0,0,true,true) } if distxx>0 and distyy=0 { ep_body_apply_impulse_relative(global.world, global.ballbody, 0, 0, distxxabs,0,0,0,true,true) } } x = ep_body_get_x(global.world, global.bodyjoueur1); y = ep_body_get_y(global.world, global.bodyjoueur1); }
Les codes des event create et step du joueur2 est sensiblement le même que le joueur 1 donc je ne met que celui du joueur 1 Donc ma question c'est comment synchroniser la balle pour les deux joueurs en sachant que la balle n'est pas un joueur. |
| | | Contenu sponsorisé
| Sujet: Re: Faire un jeu ressemblant (énormément) à haxball | |
| |
| | | | Faire un jeu ressemblant (énormément) à haxball | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |