Author Topic: Morbak  (Read 4631 times)

0 Members and 1 Guest are viewing this topic.

nick_zen

  • Soldier
  • **
  • Posts: 165
Morbak
« on: February 28, 2008, 10:57:31 PM »
Aujourd'hui, j'ai bossé sur un deuxième petit jeu ... le morpion.
J'ai cherché, cherché oh cherché comment faire pour cliquer sur une zone
pour faire la croix ou le rond. Mais comment faire?

J'avais fait un 'plan' avec le dessin des cases du morpion et le rond était un 'disc'
et la croix a été remplacée par un carré... Ca devenait le boulot de Sisyphe déjà dès le début.

Alors voilà que l'âme de MacGyver est venu m'habiter et j'ai trouvé comment faire.
En gros, un 'plan' noire dans le fond et pour chaque carré un 'plan' blanc. Donc 9 carré blanc en tout.
Donc c'est assez facile pour faire la croix et le rond.... juste en changeant l'image texturée

Voilà à quoi ce ressemble pour l'instant:



Steph3D

  • Capo Regime
  • ***
  • Posts: 399
Re: Morbak
« Reply #1 on: February 28, 2008, 11:59:19 PM »
Bientôt tu vas nous faire un Tetris en 3D ?  :thumbup:

le casse brique, je me le réserve  :twisted: j'aime bien casser du pixel shader  :king:

shadow

  • Capo Regime
  • ***
  • Posts: 353
Re: Morbak
« Reply #2 on: February 29, 2008, 12:16:46 AM »
Quote
J'ai cherché, cherché oh cherché comment faire pour cliquer sur une zone
pour faire la croix ou le rond. Mais comment faire?
Solution bricolée : au lieu de faire un plan, tu peux peut-être en utiliser 9, un pour chaque case... Et éventuellement tu refais un "cadre" en 3D qui refait le fameux dessin en relief ... si tu comptes faire un jeu 3D, bien entendu. Auquel cas tu peux même imaginer des actions un peu poussées, du style cliquer sur une case fait apparaître une croix ou un rond en l'air, au-dessus de la case, et avec un peu de physique, hop ça tombe.
Enfin bon, en commençant avec un jeu qui fonctionne, ce sera déjà très bien. ;)
3D, photos panoramiques : http://www.shadows.fr

nick_zen

  • Soldier
  • **
  • Posts: 165
Re: Morbak
« Reply #3 on: February 29, 2008, 09:07:46 AM »
pouur cliquer sur une case et la changer d'état, je voulais faire un tableau à 2 entrées ( [1][1]).
 Dans un j'aurais l'id du mesh sur lequel j'ai cliqué et sur l'autre sont état(0=vide, 1=croix, 2=rond)

une idée comment faire un tableau?

nick_zen

  • Soldier
  • **
  • Posts: 165
Re: Morbak
« Reply #4 on: February 29, 2008, 09:37:15 AM »
2e petit soucis, j'essaye d'appliquer une nouvelle texture quand je clique sur un mesh.
Pour ce faire j'utilise: HYP_Object.AttachTexture.
Est-ce la bonne fonction? car perso ca marche pas!

shadow

  • Capo Regime
  • ***
  • Posts: 353
Re: Morbak
« Reply #5 on: February 29, 2008, 10:47:56 AM »
Ca dépasse mes compétences en Demoniak, là...

http://www.ozone3d.net/demoniak3d/devguide-v1/api_hyp_lua_objects.php#HYP_AttachTexture
Je vois sous attach une fonction pour détacher les textures, peut-être qu'il faut l'utiliser avant d'attacher une nouvelle texture ?  ???
3D, photos panoramiques : http://www.shadows.fr

nick_zen

  • Soldier
  • **
  • Posts: 165
Re: Morbak
« Reply #6 on: February 29, 2008, 10:59:46 AM »
je pensais aussi,

mais lorsque je crée un 'plan' je ne lui applique pas de texture, mais juste un matériaux blanc.
Donc s'il n'y a pas de texture appliquée au mesh, il ne devrait rien avoir à detacher...

je cherche alors:)

Steph3D

  • Capo Regime
  • ***
  • Posts: 399
Re: Morbak
« Reply #7 on: February 29, 2008, 11:51:20 AM »
pas le temps de voir, mais de tête, essaye un truc comme ça 

Code: [Select]
HYP_Mesh.CreateSphere( "sphere", 2.0, 2.0, 2.0 );

HYP_Material.Create("mat01");
HYP_Material.SetDiffuse("mat01", 0.2, 0.9, 0.3, 1.0);

tid = HYP_Texture.LoadTex2D("texture.jpg", 3 ,1 )
HYP_Material.AttachTexture( "mat01", tid, 0 );

HYP_Object.SetMaterial( "sphere", "mat01" );

j'attache la texture au mat, et le mat à l'objet  :roll:

nick_zen

  • Soldier
  • **
  • Posts: 165
Re: Morbak
« Reply #8 on: February 29, 2008, 04:21:55 PM »
Steph3D... tu es un grand.... c'est ca qui me fallait. et ca marche comme je veux.

Alors tu dis "de tête"? Chapeau  :medite:

Si ca te vient si facilement as tu une idée au sujet du tableau(plus haut)?
Quote
pour cliquer sur une case et la changer d'état, je voulais faire un tableau à 2 entrées ( [1][1]).
 Dans un j'aurais l'id du mesh sur lequel j'ai cliqué et sur l'autre sont état(0=vide, 1=croix, 2=rond)

une idée comment faire un tableau?

nick_zen

  • Soldier
  • **
  • Posts: 165
Re: Morbak
« Reply #9 on: March 03, 2008, 03:21:55 PM »
J'ai un soucis avec mon morbak. En fait, j'en ai 2. Ca va être dur d'expliquer mais je vais essayer, accrochez vous!

1. des fois ca plante des fois pas
J'arrive pas à trouver pourquoi. Mais pour l'instant quand je clique sur une case, des fois la case vide se transforme en x .
Et ca dépend sur laquelle je clique, des fois c'est demoniak qui plante CHOUETTE, ca doit surement être un truc dans
mon script qui fait ca mais je sais pas pourquoi!!!

2. quand c'est fini pas possible de recommencer
Chaque case a un état 0=vide 1=X 2=O (le dernier n'est pas encore fait). Au tout début j'initialise toutes les case comme étant 0,
pour qu'elles soient vide. Ensuite, quand je clique sur une case, elle change d'état et devient 1 et donc X. Quand le jeu est fini
toutes les cases reviennent à 0. Ce qui se passe, en effet elles deviennent toutes vides, cependant quand je clique sur une
elle devient =1 mais visuellement pas X.... Je ne comprend pas.

Je ne vais pas mettre tout le code car ca va faire très long, mais juste le bout du script qui peut être la  raison de ces problèmes:
Quote
<script name="update_scene" run_mode="EXECUTE_EACH_FRAME" >
   <raw_data><![CDATA[   
   

   if(HYP_Input.GetMouseButtonState(1)==1)then
      
      mesh_name = HYP_Scene.PickMesh();
      --HYP_Object.SetMaterial( mesh_name, "matX" );
      state[mesh_name]= 1;
      -- table.foreach(state, print);   
      state_change=1;      
   end
   

   if(youwon==1)then
      for i=1,9
         do
         name = "carre"..i;
         state[name]=0;
      end
   HYP_Wait( 2000 );
      youwon=0;
      state_change=1;
   end



   if(state_change==1)then
      for j=1,9
         do
         check_name = "carre"..j;
         
         if(state[check_name]==1)then
            HYP_Object.SetMaterial( check_name, "matX" );
         end
         
         if(state[check_name]==0)then
            HYP_Object.SetMaterial( check_name, "vide" );
         end
         
      end
      state_change=0;
   end

   
        if(state["carre1"]==1 and state["carre2"]==1 and state["carre3"]==1)then
   
      HYP_Object.SetMaterial( "carre1", "matXwon" );
      HYP_Object.SetMaterial( "carre2", "matXwon" );
      HYP_Object.SetMaterial( "carre3", "matXwon" );
      
      
   
      youwon=1;
   end
   
   
      ]]></raw_data>
</script>

   

nick_zen

  • Soldier
  • **
  • Posts: 165
Re: Morbak
« Reply #10 on: March 03, 2008, 04:34:05 PM »
... suite de mon problème

est-ce que théoriquement on a le droit de faire cela?
Quote
if(HYP_Input.GetMouseButtonState(1)==1)then
      
      mesh_name = HYP_Scene.PickMesh();
      if(last_draw==2  and new_draw==0 )then
         state[mesh_name]= 1;
         state_change=1;
         last_draw=1;
         new_draw=1;
      end
      
      if(last_draw==1  and new_draw==0 )then
         state[mesh_name]= 2;
         state_change=1;
         last_draw=2;
         new_draw=1;
      end
      
      
   end
   
   if(HYP_Input.GetMouseButtonState(1)==0)then
      new_draw=0;
   end

J'ai fait ainsi avec last_draw=2;     new_draw=1;, car si dans le premier if je ne mets pas cette contrainte, ca qu'il va se passer c'est; quand je clique sur une case, son état va passer en 1 et tout de suite après en 2. Donc l'effet pour l'utilisateur sera 2...

le new_draw sert juste à permettre de re-changer d'état  que si on lève le doigt du bouton de souris. Sinon lorsqu'on laisse appuyé à chaque boucle on repasse par le changement d'état.

Voilà

Alors mon problème se situe là je clique une fois parfait le x apparait. Je clique une deuxième fois ca plante :(

nick_zen

  • Soldier
  • **
  • Posts: 165
Re: Morbak
« Reply #11 on: March 04, 2008, 09:45:48 AM »
Désolé d'insister, mais qqun une idée sur les messages au-dessus. Je sais que d'hab on ne s'attache pas trop aux morbaks  ;)
Mais j'ai besoin de conseils pour pouvoir avancer.