Forum d'entraide à la création de jeux d'aventure
 
PortailAccueilFAQRechercherS'enregistrerMembresConnexion

Partagez | 
 

 [Résolu] probleme d'objets d'intentaire non actifs...

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Threepwood
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 144

Age : 44

Localisation : Hyères

Date d'inscription : 29/12/2012


MessageSujet: [Résolu] probleme d'objets d'intentaire non actifs...   Ven 12 Avr 2013 - 9:54

Souhaitant changer la configuration du gameplay de mon jeu je me retrouve bloqué..

Le systeme que j'avais d'office sur mon jeu avec le template lucasarts par defaut ( curseur walkto > click droit > curseur Interraction > click droit > curseur Regarder > Click droit >curseur parler > click droit >curseur Objet en main

beaucoup de click pour beaucoup trop de manip et action de souris

et là c'est la cata...En y reflichissant il est vrai que lorsqu'on regarde le gameplay d'un jeu comme Resonance, c'est bien plus pratique et plus allégé en terme d'action/reaction

Resonance : curseur fleche > click gauche = marcher vers/actionner/prendre et click droit = examiner)

J'ai donc voulu faire encore mieux pour mon jeu actuel et tenté de faire cette function au lieu du balet traditionnel que j'avais par defaut.

Me voici parti pour tenter de configurer mon gameplay comme resonance
Click gauche = marcher/prendre/actionner et click droit = regarder

En fouinant à droite et a gauche sur le forum j'ai trouvé un code interessant de Shei-là que j'ai tenté cette nuit de mixer a mon global script que j'ai cotoyé toute la nuit a cet effet...

Dans l'ensemble ça fonctionne sauf que

1) il faut obligatoirement que je click quelque part sur le jeu pour que les items inventaires soit selectionables au debut du lancement (bon pas forcement dramatique)

2) quand je clique sur les objet de l'inventaire, le curseur prend bien en effet l'image de l'objet mais quelque soit l'endroit où je click avec l'objet, celui-ci active simplement la meme fonction interract classic et non l'interraction liée à l'objet qui devrai se faire...

bref l'objet prend juste l'image mouse mais ne fonctionne pas.

j'ai tenté de bidouiller avec des fonctiosn trouvées a droite et a gauche et j'ai abandonné apres 1 nuit blanche et une matinée de recherche...

il ne me reste plus que l'espoir d'obtenir , comme vous l'avez deja si bien fait auparavant a mes debuts laborieux , votre aide quand à ce bout de code qui me manque là dedans pur que les objets soient actifs sur les hotspots du decors/personnage/autres objets...

Je suis sur que c'st juste une ligne de code a placer quelque part, mais je ne sais pas laquelle, et où la placer !

merci

voici mon code qui sera utile pour le debut à ceux qui voudraient utiliser le systeme de Resonance de même que si de vos coté pour les tests vous pouvez le rendre encore plus pratique, vous genez pas pour moi ! lol


Code:



function on_mouse_click(MouseButton button) {
 
 
 
  // called when a mouse button is clicked. button is either LEFT or RIGHT
  if (IsGamePaused() == 1) {
    // Game is paused, so do nothing (ie. don't allow mouse click)
  }
  else if (button == eMouseLeft) {
      mouse.Mode= eModeInteract  ;
      mouse.ChangeModeGraphic (eModeInteract, 1368);
          ProcessClick(mouse.x, mouse.y, mouse.Mode );
     
      if(GetLocationType(mouse.x, mouse.y)==eLocationHotspot){
 ProcessClick(mouse.x, mouse.y, eModeWalkto);
 }
 if(GetLocationType(mouse.x, mouse.y)==eLocationCharacter){
 ProcessClick(mouse.x, mouse.y, eModeTalkto);
 }
 if(GetLocationType(mouse.x, mouse.y)==eLocationObject){
 ProcessClick(mouse.x, mouse.y, eModeWalkto);
 }
 
else mouse.ChangeModeGraphic (eModeWalkto, 85) ;
ProcessClick(mouse.x, mouse.y, eModeWalkto);
 

  }
     
     
     
 
  else if (button == eMouseRight || button == eMouseWheelSouth){
    // right-click our mouse-wheel down, so cycle cursor
    mouse.Mode = eModeLookat ; 
mouse.ChangeModeGraphic (eModeLookat, 183);
   
   
    ProcessClick(mouse.x, mouse.y, mouse.Mode );
   
    if(GetLocationType(mouse.x, mouse.y)==eLocationHotspot){

 }
 if(GetLocationType(mouse.x, mouse.y)==eLocationCharacter){

 }
 if(GetLocationType(mouse.x, mouse.y)==eLocationObject){

 }
  }
 
}

function interface_click(int interface, int button) {
  // This function is obsolete, from 2.62 and earlier versions.
}

function btnInvUp_Click(GUIControl *control, MouseButton button) {
  invCustomInv.ScrollUp();
}

function btnInvDown_Click(GUIControl *control, MouseButton button) {
  invCustomInv.ScrollDown();
}

function btnInvOK_Click(GUIControl *control, MouseButton button) {
  // They pressed the OK button, close the GUI
  gInventory.Visible = false;
  gInventory2.Visible = false;
  gInventory22.Visible = false;
  gInventory222.Visible = false;
  mouse.UseDefaultGraphic();
}

function btnInvSelect_Click(GUIControl *control, MouseButton button) {
 
   // They pressed SELECT, so switch to the Get cursor
   mouse.Mode = eModeInteract;
   // But, override the appearance to look like the arrow
   mouse.UseModeGraphic(eModeInteract);
}

function btnIconInv_Click(GUIControl *control, MouseButton button) {
 
  show_inventory_window();
  mouse.Mode=eModeInteract ;
 
  }

function btnIconCurInv_Click(GUIControl *control, MouseButton button) {
 
  if (player.ActiveInventory != null)
    mouse.Mode = eModeUseinv;
}


J'ai l'impression que ça vient de

function btnIconInv_Click(GUIControl *control, MouseButton button) {

show_inventory_window();
mouse.Mode=eModeInteract ;}


mais il me manque ce que je dois mettre à la place de
mouse.Mode=eModeInteract ;

j'ai remplacé par
mouse.Mode = eModeUseinv; ça change rien




_________________
Projet en cours : KINGEEKS QUEST
http://kingeeks.blogspot.fr/


Dernière édition par Threepwood le Dim 14 Avr 2013 - 16:10, édité 3 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue


Nombre de messages : 1275

Date d'inscription : 10/05/2012


MessageSujet: Re: [Résolu] probleme d'objets d'intentaire non actifs...   Ven 12 Avr 2013 - 17:02

Je n'ai malheureusement pas joué à Resonance, mais j'essaye d'implémenter la même interface dans mon petit projet secret.
Rassures toi, tu n'es pas le premier a lutter sur ce sujet. Il y a eu Valoulef et moi, mais c'est aussi un sujet récurent sur le forum anglophone.

Plutôt que d'essayer de corriger ton code (je laisse Kitai s'en occuper clin d\\\\'oeil ), je propose plutôt de soumettre le miens. Il n'est pas tout à fait finis, et il y a quelques bizarrerie car j'essaye d'implémenter le double clic, mais je n'ai pas finit cette partie là. Il y a plusieurs façon d'implémenter cette interface, alors n'hésitez pas à poster la votre. Quand j'aurais finis la démo de mon projet actuelle (c'est à dire dans très longtemps...), j’essaierai de faire un tutoriel, ou au moins un template, pour faire ce type de gameplay.
Sans plus attendre, voici donc la partie concernant le curseur de mon global script:
Code:
function repeatedly_execute()
{
  CursorAspect();
}

function on_mouse_click(MouseButton button) // called when a mouse button is clicked. button is either LEFT or RIGHT
{
  if (IsGamePaused() == 1) {// Game is paused, so do nothing (ie. don't allow mouse click)
  }
  else if (button == eMouseLeft)
  {
      if(CursorOnWalkableArea) {
          player.ActiveInventory=null; //If player click with an InvItem on a WalkableArea, then he lose it.
          CursorOnWalkableArea=false; }
      else {
          ProcessClick(mouse.x,mouse.y, mouse.Mode);
      }
  }
  else if (button == eMouseRight) {// right-click, so look at spot, and loss active.inventory
    if(player.ActiveInventory != null) {
    player.ActiveInventory = null;
    }
    else {
      ProcessClick(mouse.x, mouse.y, eModeLookat);
    }
  }
}


Quoi, comment ça, ça ne t'aide pas beaucoup si je ne donne pas le code de la fonction CursorAspect() ? grand sourire
Code:

function CursorAspect()  //Change MouseMode in fonctions of underlying object
{
  if (DefaultMouseBehavior) { //juste un bool pour quand je veux désactiver cette fonction, dans les minijeux par exemples
    int x = mouse.x;
    int y = mouse.y;
    if (player.ActiveInventory == null) {
      if (GetLocationType(x, y) == eLocationNothing) {
        if (mouse.Mode != eModeWalkto)
          mouse.Mode = eModeWalkto; // WalkTo mode if nothing under mouse
      }
      else if (GetLocationType(x, y) == eLocationHotspot) {
        Hotspot* OnMouseHotspot = Hotspot.GetAtScreenXY(x, y);
        if (!OnMouseHotspot.GetProperty("ChangeRoomOnClick")) {
          if (mouse.Mode != eModeInteract) {
            mouse.Mode = eModeInteract; // Interact mode on Object
          }
        }
        else {
          if (mouse.Mode != eModeChangeRoo) {
            mouse.Mode = eModeChangeRoo;
          }
        }
      }
      else if (GetLocationType(x, y) == eLocationObject) {
        Object* OnMouseObject = Object.GetAtScreenXY(x, y);
        if (!OnMouseObject.GetProperty("ChangeRoomOnClick")) {
          if (mouse.Mode != eModeInteract) {
            mouse.Mode = eModeInteract; // Interact mode on Object
          }
        }
        else {
          if (mouse.Mode != eModeChangeRoo) {
            mouse.Mode = eModeChangeRoo;
          }
        }
      }
      else if (GetLocationType(x,  y) == eLocationCharacter) {
        if (mouse.Mode != eModeTalkto) {
          mouse.Mode = eModeTalkto; // TalkTo mode on character
        }
      }
      if (InventoryItem.GetAtScreenXY(x, y)!= null) { //no else if here
        if (mouse.Mode != eModeInteract) {
          mouse.Mode = eModeInteract; //Take inventory item
        }
      }
    }
    else {
      if (GetLocationType(x,  y) == eLocationNothing) //if player have an AcitiveInv item and mouse is on Nothing, then bool became true
        CursorOnWalkableArea = true;
      else
        CursorOnWalkableArea = false;
    }
  }
}

Désolé pour l’absence de commentaires. Si quelque chose n'est pas claire, n'hésites pas à demander. Dans les bizarreries, on peut noter la variable globale booléenne CursorOnWalkableArea qu'il faudra sans doute que je retravaille. Il faut la déclarer comme variable globale.
A noter aussi un nouveau type de curseur eModeChangeRoo (eModeChangeRoom) pour les objets et hotspots qui font changer de room, ainsi que la propriété personnalisé associée "ChangeRoomOnClick", fausse par défaut.

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nothingaboutthedog.blogspot.fr/
Threepwood
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 144

Age : 44

Localisation : Hyères

Date d'inscription : 29/12/2012


MessageSujet: Re: [Résolu] probleme d'objets d'intentaire non actifs...   Ven 12 Avr 2013 - 19:12

Merci clin d\\\\'oeil
J'ai testé, bouigué...ça ne change rien a mon problème d'inventaire et de config
mais je je mix, melange et trifouilles pour tenter de trouver quelque chose de fonctionnel. langue

_________________
Projet en cours : KINGEEKS QUEST
http://kingeeks.blogspot.fr/
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Threepwood
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 144

Age : 44

Localisation : Hyères

Date d'inscription : 29/12/2012


MessageSujet: Re: [Résolu] probleme d'objets d'intentaire non actifs...   Ven 12 Avr 2013 - 19:17

ps: tu devrai telecharger et tester la version demo de Resonance.. il est bien sympa et agreable a jouer....

_________________
Projet en cours : KINGEEKS QUEST
http://kingeeks.blogspot.fr/
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue


Nombre de messages : 1275

Date d'inscription : 10/05/2012


MessageSujet: Re: [Résolu] probleme d'objets d'intentaire non actifs...   Ven 12 Avr 2013 - 20:02

Bon, je me suis penché sur ton code. J'ai pas tout compris à ta logique. perplexe
A mon avis, il faut que tu mette un
Code:
if (player.ActiveInventory == null) {
dans ton code avant de vérifier l’élément sous la souris, pour séparer si le personnage à un objet d'inventaire sélectionné. Si c'est le cas (if (player.ActiveInventory != null), alors tu passe en eModeUseinv.
Je te propose quelque chose comme ça:
Code:
function on_mouse_click(MouseButton button) {  // called when a mouse button is clicked. button is either LEFT or RIGHT
  if (IsGamePaused() == 1) {
    // Game is paused, so do nothing (ie. don't allow mouse click)
  }
  else if (button == eMouseLeft) {
    if (player.ActiveInventory == null) {
      if(GetLocationType(mouse.x, mouse.y)==eLocationHotspot){
          ProcessClick(mouse.x, mouse.y, eModeInteract);
      }
      if(GetLocationType(mouse.x, mouse.y)==eLocationCharacter){
          ProcessClick(mouse.x, mouse.y, eModeTalkto);
      }
      if(GetLocationType(mouse.x, mouse.y)==eLocationObject){
          ProcessClick(mouse.x, mouse.y, eModeInteract);
      }
      if(GetLocationType(mouse.x, mouse.y)==eLocationNothing){
          ProcessClick(mouse.x, mouse.y, eModeWalkto);
      }
    }
    else if (player.ActiveInventory != null) {
      ProcessClick(mouse.x, mouse.y, eModeUseinv);
    }
  }
}
Bon courage ! sourire

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nothingaboutthedog.blogspot.fr/
Threepwood
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 144

Age : 44

Localisation : Hyères

Date d'inscription : 29/12/2012


MessageSujet: Re: [Résolu] probleme d'objets d'intentaire non actifs...   Ven 12 Avr 2013 - 20:44

Merci Billbis .. .ca avance dans le code grâce a ton aide ! ca commence de plus en plus a rouler, il me reste un petit bug (l'icone objet reste sur le curseur sans pouvoir etre annulé ou echangé contre interract etc mais j'y planche et une fois ça reglé le code entier sera operationnel ! ) sourire

_________________
Projet en cours : KINGEEKS QUEST
http://kingeeks.blogspot.fr/
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Threepwood
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 144

Age : 44

Localisation : Hyères

Date d'inscription : 29/12/2012


MessageSujet: Re: [Résolu] probleme d'objets d'intentaire non actifs...   Sam 13 Avr 2013 - 9:54

BOn apres une nuit de recherches/bidouilles et donc plusieurs heures et toute la matinée a consacrer à cette fonction...c'est un cruel echec qui m'oblige a laisser tomber ce côté founction souris et m'oblige a reinstaller le systeme d'origine au quadruple click...sinon j'avancerai plus et je vais lacher l'affaire complète...

Bon au resultat final le code trouvé donne (ca peut servir a quelqu'un , même s'i lest inachevé et bloqué a la fin) :

Code:


function on_mouse_click(MouseButton button) {
 
 
 
  // called when a mouse button is clicked. button is either LEFT or RIGHT
  if (IsGamePaused() == 1) {
    // Game is paused, so do nothing (ie. don't allow mouse click)
  }
  else if (button == eMouseLeft) {
      if (player.ActiveInventory == null) {
        Mouse.EnableMode(eModeUseinv);
      mouse.Mode= eModeInteract  ;
      mouse.ChangeModeGraphic (eModeInteract, 1368);
          ProcessClick(mouse.x, mouse.y, mouse.Mode );
         
         
         
         
          }
     
      if(GetLocationType(mouse.x, mouse.y)==eLocationHotspot){
 ProcessClick(mouse.x, mouse.y, eModeWalkto);
 }
 if(GetLocationType(mouse.x, mouse.y)==eLocationCharacter){
 ProcessClick(mouse.x, mouse.y, eModeTalkto);
 }
 if(GetLocationType(mouse.x, mouse.y)==eLocationObject){
 ProcessClick(mouse.x, mouse.y, eModeWalkto);
 }
 
 else if (player.ActiveInventory != null) {
      ProcessClick(mouse.x, mouse.y, eModeUseinv); }
 
 
 
else mouse.ChangeModeGraphic (eModeWalkto, 85) ;
ProcessClick(mouse.x, mouse.y, eModeWalkto);
  }

      if (mouse.Mode == eModeUseinv)
      {
            }     
  else if (button == eMouseRight){
    // right-click our mouse-wheel down, so cycle cursor
    mouse.Mode = eModeLookat ; 

   
    mouse.ChangeModeGraphic (eModeLookat, 183);
    ProcessClick(mouse.x, mouse.y, mouse.Mode );
   
      if(GetLocationType(mouse.x, mouse.y)==eLocationHotspot){
 ProcessClick(mouse.x, mouse.y, eModeLookat);
 }
 if(GetLocationType(mouse.x, mouse.y)==eLocationCharacter){
 ProcessClick(mouse.x, mouse.y, eModeLookat);
 }
 if(GetLocationType(mouse.x, mouse.y)==eLocationObject){
 ProcessClick(mouse.x, mouse.y, eModeLookat);
 }
 
 else if (player.ActiveInventory != null) {
      ProcessClick(mouse.x, mouse.y, eModeUseinv); }
  else mouse.ChangeModeGraphic (eModeWalkto, 85) ;
ProcessClick(mouse.x, mouse.y, eModeWalkto);
 
    }  }




LE RESULTAT :


2 mode actifs à la souris :

a) Click Gauche (Walkto to si clique sur decors) + (Interract/prendre si click sur objet/hotspot, objet ajouté à l'inventaire...) PARFAIT !
b) click Droit (Look At si clique sur objet/hotspot) PARFAIT !

Jusqu'ici tout va vien

Inventaire.

SI on click sur un objet de l'inventaire :

1) le curseur prend bien la forme de l'ojet PARFAIT !
a) Click gauche le mode Interract sur Hotspot ou autre objet avec click gauche est bien valide et se fait. PARFAIT L'objet interragis bien avec les hotspots/autres objets!

b) C'est là que ca commence à plantouiller et bloquer dans les manips
A ce stade on a le curseur objet actif OK
A ce stade du clique gauche on peut faire interragir l'objet du curseur avec les hotspots/objets du decors ok

Ce qui faudrait : C'est qu'à ce stade, si on click sur le bouton droit : ca annule tout ce qui est lié a l'action de l'objet pour
revenir au mode normal classic (interract/walkto et Look) et donc curseur par defaut.

C'est ce code qui me manque et l'endroit precis ou le placer là dedans.

Je pense d'apres mes tests que ce code doit se placer entre


if (mouse.Mode == eModeUseinv) {

}


Mais lequel

BILAN : il me reste juste, pour que ce code soit operationnel, à trouver le moyen
de faire annuler l'action de l'objet de l'inventaire lorsqu'il est actif par le click droit
et permettre au jeu , suite a cette action, a revenir au mode normal curseur gauche interract/walkto + curseur droit look at

Je pense qu'avec ce code et ce bilan vous pouvez peut-etre mieux cerner là où je plante et qui potentiellement reste certainemenbt juste
un petit code a base de mode graphique mouse etc à placer entre

if (mouse.Mode == eModeUseinv) {

}


Si vous y arrivez ! champion du monde car on aura ensemble reussit à Briser le code !lol
et surtout a creer le mode curseur qu'apprioris tout le monde recherche...





_________________
Projet en cours : KINGEEKS QUEST
http://kingeeks.blogspot.fr/
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Threepwood
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 144

Age : 44

Localisation : Hyères

Date d'inscription : 29/12/2012


MessageSujet: Re: [Résolu] probleme d'objets d'intentaire non actifs...   Sam 13 Avr 2013 - 10:29

Comme je fais pas les choses a moitié lol, je vosu ai fait une vidéo pour etre plus explicite parceque même moi avec mes migraines du coup depuis cette nuit je me fais mal au cerveau en me relisant...

LA VIDEO :


http://youtu.be/LbmqOspgDes

_________________
Projet en cours : KINGEEKS QUEST
http://kingeeks.blogspot.fr/
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue


Nombre de messages : 1275

Date d'inscription : 10/05/2012


MessageSujet: Re: [Résolu] probleme d'objets d'intentaire non actifs...   Sam 13 Avr 2013 - 11:30

Je comprends toujours rien à la logique de ton script...
Pour gérer le clic droit, je te propose ça :
Code:
function on_mouse_click(MouseButton button) {  // called when a mouse button is clicked. button is either LEFT or RIGHT
  if (IsGamePaused() == 1) {
    // Game is paused, so do nothing (ie. don't allow mouse click)
  }
  else if (button == eMouseLeft) {
    if (player.ActiveInventory == null) {
      if(GetLocationType(mouse.x, mouse.y)==eLocationHotspot){
          ProcessClick(mouse.x, mouse.y, eModeInteract);
      }
      if(GetLocationType(mouse.x, mouse.y)==eLocationCharacter){
          ProcessClick(mouse.x, mouse.y, eModeTalkto);
      }
      if(GetLocationType(mouse.x, mouse.y)==eLocationObject){
          ProcessClick(mouse.x, mouse.y, eModeInteract);
      }
      if(GetLocationType(mouse.x, mouse.y)==eLocationNothing){
          ProcessClick(mouse.x, mouse.y, eModeWalkto);
      }
    }
    else if (player.ActiveInventory != null) {
      ProcessClick(mouse.x, mouse.y, eModeUseinv);
    }
  }
  else if (button == eMouseRight) {
    if (player.ActiveInventory != null) {
      player.ActiveInventory = null;
      http://mouse.Mode=eModeWalkto; //je ne sais pas si cette ligne doit être mise ou pas.
    }
    else {
      ProcessClick(ProcessClick(mouse.x, mouse.y, eModeLookat);
    }
  }
}
Je trouve le code assez claire, mais n'hésites pas à demander plus d'explications.

_________________
Mon petit DevBlog


Dernière édition par Billbis le Sam 13 Avr 2013 - 13:39, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nothingaboutthedog.blogspot.fr/
Threepwood
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 144

Age : 44

Localisation : Hyères

Date d'inscription : 29/12/2012


MessageSujet: Re: [Résolu] probleme d'objets d'intentaire non actifs...   Sam 13 Avr 2013 - 13:26

Arg dommage alors
pourtant la video et le code actuel ne peuvent etre plus explicite...
Le code tu me fourni detruit 50 % des actions du code d'origine et ne chnge donc rien apprioris.

Le code que j'ai fait est certe bizarre puisqu'à la base il n'existe pas au vu de ce que tout le monde cherche en même temps
c'est hard du coup

bref je peux toujours decrire point par poin t les fonction mais si apres la video que j'ai fait on comprend pas ce qui m'est necessaire, je pense que je peux laisser tomber et relancer sur un simple code defaut avec 4 clics alors
perplexe

_________________
Projet en cours : KINGEEKS QUEST
http://kingeeks.blogspot.fr/
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Threepwood
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 144

Age : 44

Localisation : Hyères

Date d'inscription : 29/12/2012


MessageSujet: Re: [Résolu] probleme d'objets d'intentaire non actifs...   Sam 13 Avr 2013 - 13:29

La seule fonction que je connais pas et que je trouve pas c'est simplement
:

comment, lorsque le curseur est en mode 'action d'objet de l'inventaire suite a un clique gauche sur cet objet dans l'inventaire (icone avec l'objet et fonction interract objet sur decors/hotspot ect....)' L'ANNULER lorsqu'on clique droit pour revenir au mode curseur habituel par defaut ( gauche = deplacement/interratc et droit = lookat)

Le code quen j'ai bidouiller m'apporte tout ce que j'ai besoin sauf ce soucis lié au fgait que je ne sais pas comment en clik droit annuler l'action d'un objet actif en mode et en curseur)

Ca semble barbare a ecrire et tellement logique et clair a voir et expliquer que ca en est deroutant et me donne envie, en ce moment precis, de laisser le projet de côté tant que j'ai pas trouvé et me reorienter vers ce que je fais le mieux.. mon travail pour mes clients ! perplexe

rha c'est rageant .. y a juste une fonctio nqui me manque là dedans...

comment annuler un curseur qui est en mode use inventory par u nclkique droit pour le faire rebooter au mode classic de base d'origine (interrract/walkto/talk to click gauche + lookat click droit) !!!!
rhaaaaaaaaaaaaaaa

_________________
Projet en cours : KINGEEKS QUEST
http://kingeeks.blogspot.fr/


Dernière édition par Threepwood le Sam 13 Avr 2013 - 13:38, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue


Nombre de messages : 1275

Date d'inscription : 10/05/2012


MessageSujet: Re: [Résolu] probleme d'objets d'intentaire non actifs...   Sam 13 Avr 2013 - 13:36

Il est tout à fait possible de faire une interface à deux clics avec AGS, il y a suffisement de jeux pour le prouver. C'est juste qu'il y a tellement de façons de procéder qu'aucun code standard ne c'est imposé, et que c'est un poil complexe à mettre en place au début. Mais c'est tout à fait possible ! N'abandonnes pas si vite ! (tu as bien sur le droit de faire des pauses sourire ).
Au pire, et d'ici 2014, j'aurais fait un template utilisable. grand sourire

EDIT:
Threepwood a écrit:
comment, lorsque le curseur est en mode 'action d'objet de l'inventaire suite a un clique gauche sur cet objet dans l'inventaire (icone avec l'objet et fonction interract objet sur decors/hotspot ect....)' L'ANNULER lorsqu'on clique droit pour revenir au mode curseur habituel par defaut ( gauche = deplacement/interratc et droit = lookat)
Bin il me semble que c'est un truc comme ça, non ?
Code:
  else if (button == eMouseRight) {
    if (player.ActiveInventory != null) {
      player.ActiveInventory = null;
      http://mouse.Mode=eModeWalkto; //je ne sais pas si cette ligne doit être mise ou pas.
    }
    else {
      ProcessClick(ProcessClick(mouse.x, mouse.y, eModeLookat);
    }
}

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nothingaboutthedog.blogspot.fr/
Threepwood
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 144

Age : 44

Localisation : Hyères

Date d'inscription : 29/12/2012


MessageSujet: Re: [Résolu] probleme d'objets d'intentaire non actifs...   Sam 13 Avr 2013 - 13:49

je pense que je vais faire un template de demo /source pour lancer via ags direct pour qu'on s'en sorte , je le ferai d'ici ce soir/demain sourire ..là je reviens de la plage et d'un pmetit apero c'est pas encore les condition optimales lol
Si la plupart des gens cherchent a bidouiller ce truc sans avoir vraiment de reponse c'est pas pour rien que je bloque dessus d'un côté

Pas evident quand les base d'info s'arrete en 1980 au basic avec GOTO TO , IF a $='1" then print et RETURN lol
Chacun son metier ...c'est pas pour rien et c'est pas le mien c'est indiscutable sourire


je te remerci Billbis.. je referai un projet a part avec juste sprite et decorss + code et actio nafin que tu puisse evaluer sur le code source directement en testant en direct et en ayant un meilleurs rendu.. car to nscript qui semblait correct me fou des tas d'erreur partout qui me depasse a ce jour sur ags
ton code semble logiquement fonctionner mais soit je n'arrive pas a le placer au bon endroit soit il manque encore un truc , un detail, un petit code pour debloquer la machine

PS: Resonance c'est encore plus hot/tordu/complexe et meme pas j'ai cherché (même dans mes rêves) à adapter ce style sur mon jeu bien que je le trouve encore plus judicieux : sur Resonance quand tu clique sur l'objet de l'inventaire; faut laisser appuyer, puis il faut le tirer et le lacher sur la zone ... c'est encore plus tordu, même pas j'ai essayé vu là ou je bloque deja ! lol

_________________
Projet en cours : KINGEEKS QUEST
http://kingeeks.blogspot.fr/
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue


Nombre de messages : 1275

Date d'inscription : 10/05/2012


MessageSujet: Re: [Résolu] probleme d'objets d'intentaire non actifs...   Sam 13 Avr 2013 - 14:18

Il est vrai que sur le coup, j’aurais du tester le code que j'ai proposé avant. rougit Il reste sans aucuns doutes d’innombrables coquilles qui, une foi copié / collé aboutissent à autant de bugs. Le code était plus à but pédagogique que pour être brutalement recopié dans un projet. En effet, si tu nous passe un template / projet, on pourra surement te le débugger, mais c'est moins formateur pour toi. grand sourire
Cela dit, j'ai du mal à saisir l'urgence de la situation. Tu peux tout à fait continuer à développer ton jeu, et ne finaliser le comportement de la souris qu'à la fin.

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nothingaboutthedog.blogspot.fr/
Threepwood
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 144

Age : 44

Localisation : Hyères

Date d'inscription : 29/12/2012


MessageSujet: Re: [Résolu] probleme d'objets d'intentaire non actifs...   Sam 13 Avr 2013 - 14:57

en effet y a pas d'urgence...c'est plutot une sorte de passade temporelle nevralgique due au fait que ca fait 2 jours que je passe dessus sans quasi dormir et que par rapport à mon comportement personnel de type assez tenace et organisé associé a 3 litres quotidien de café, je ne reste jamais sur un echec et fait toujours les choses dans l'ordre dans lessquelles je les lance...
un peu un taré obtus qui baigne dans la doctrine du 'on ne remet jamais au lendemain..."

D'ailleurs pour faire ce que j'entreprend avec ce jeu , tout seul, a la racine faut etre deja completement taré... mais quand on l'assume ...ça marche deja mieux lol

Oui je continuerai avec un template souris par defaut d'ici ce week end ou la semaine, un template simple pour ce cas de figure car j'ai la certitude (confirmée ici) que ce genre de code est en fait très demandé...tant qu'a être fou, autant etre aussi altruiste non? langue

je suis aussi nevrosé que mes png du jeu en fait... lol
ceci explique cela ... methodique, organisé, et perfectioniste, têtu, acharné...
apres j'ai aussi des defauts hein ! mais c'est pas le sujet langue

(non l'abandon apres les 6 mois de casses tete que je viens de passer etait plus dans un esprit cynique et provoque/surealiste qu'autre chose...je suis pas pret de le laisser j'ai encore au moins 5 scenes a faire et ca prend 2 mois et demi par scenes....

D'ailleurs etant si perfectioniste et tete comment pourrai-je abandonner?

même si l'appel des plages, , des poulette, de la bibine et du rosé frais sur le bord de plage et des siestes au soleil sur le sable chaud commencent déja a me faire des clins d'oeil et des appels du pieds depuis ce matin......va faloir que j'avance impérativement avant juin ici ...) sourire

_________________
Projet en cours : KINGEEKS QUEST
http://kingeeks.blogspot.fr/
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Threepwood
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 144

Age : 44

Localisation : Hyères

Date d'inscription : 29/12/2012


MessageSujet: Re: [Résolu] probleme d'objets d'intentaire non actifs...   Dim 14 Avr 2013 - 16:09

Et bien voilà ! I'll break the code ce dimanche soir, comme quoi ça sert d'être tenace et de s'octroyer un moment de pause entre 2 jours de code et de recherches !

Lol

Donc la ligne de code que je cherchais pour eradiquer ce bug que j'expliquais au dessus est simplement :
player.ActiveInventory = null;

Tout simplement puisque je demandais a vouloir annuler l'actio nde l'icone via click droit...
J'ai trouvé en fouinant et testant divers codes de la faq du forums uk d'ags...

C'était tout simplement cette ligne de code qui me manquait !
Bon j'ai pas tésté la suite vu que je sais que dès qu'on repare quelque chose ca bug autre part mais je vais rester confiant.... !

Alors pour vous faire profiter du code que j'ai mis au point avec vos aides et vos astuces progressivement ce week end, je vous le colle ici en fonctionnel !

Le concept :
______________________________
curseur mode defaut : walkto
click gauche > action Walk
si passe sur objet/hotspot > action interract avec changement du curseur animé (mouse over)

click droit : curseur et mode Lookat
________________________________

Inventaire :
click gauche sur item inventaire : curseur item avec action interract
click droit (c'est là que ca me bloquait...) : Annulation item, retour au mode mouse par defaut (walk/look)

Et voilàààààà !

Pfiouuuu tout ça pour juste cette petite ligne ! enfin voilà
bonne fin de dimanche et voici le résultat du code...

Si jamais vous voulez l'alleger/ameliorer vous gênez pas.

Code:
 [code]function on_mouse_click(MouseButton button) {
 
 
  // called when a mouse button is clicked. button is either LEFT or RIGHT
  if (IsGamePaused() == 1) {
    // Game is paused, so do nothing (ie. don't allow mouse click)
  }
  else if (button == eMouseLeft) {
   
    ginfo.Visible=false;
      if (player.ActiveInventory == null) {
        Mouse.EnableMode(eModeUseinv);
      mouse.Mode= eModeInteract  ;
      mouse.ChangeModeGraphic (eModeInteract, 1368);
          ProcessClick(mouse.x, mouse.y, mouse.Mode ); }
      if(GetLocationType(mouse.x, mouse.y)==eLocationHotspot){
 mouse.Mode = (eModeWalkto);
 }
 if(GetLocationType(mouse.x, mouse.y)==eLocationCharacter){
mouse.Mode = (eModeTalkto);
 }
 if(GetLocationType(mouse.x, mouse.y)==eLocationObject){
 mouse.Mode = (eModeInteract);
 }
 else if (player.ActiveInventory != null) {
      ProcessClick(mouse.x, mouse.y, eModeUseinv); }
 
else mouse.ChangeModeGraphic (eModeWalkto, 85) ;
ProcessClick(mouse.x, mouse.y, eModeWalkto);
  }
          if (mouse.Mode == eModeUseinv) {
          player.ActiveInventory = inventory[game.inv_activated];
    if (button == eMouseRight){
 player.ActiveInventory = null;  // lose active inventory item
          mouse.Mode=eModeInteract; 
  }
  if (button == eMouseLeft) ProcessClick(mouse.x, mouse.y, eModeUseinv);
        }
     
  else if (button == eMouseRight){
    ginfo.Visible=false;
    mouse.Mode = eModeLookat ; 
 
    mouse.ChangeModeGraphic (eModeLookat, 183);
    ProcessClick(mouse.x, mouse.y, mouse.Mode );
   
      if(GetLocationType(mouse.x, mouse.y)==eLocationHotspot){
mouse.Mode = (eModeLookat);
 }
 if(GetLocationType(mouse.x, mouse.y)==eLocationCharacter){
  mouse.Mode = (eModeLookat);
 }
 if(GetLocationType(mouse.x, mouse.y)==eLocationObject){
 mouse.Mode = (eModeLookat);
 }
  else if (player.ActiveInventory != null) {
      ProcessClick(mouse.x, mouse.y, eModeUseinv); }
 
else mouse.ChangeModeGraphic (eModeWalkto, 85) ;
ProcessClick(mouse.x, mouse.y, eModeWalkto);
    } 
  else mouse.Mode = (eModeInteract);
    }    [/code]
   
   

Pour le moment je continue dans ma philosophie de vie...peu importe le moyen, ce qui compte c'est le résultat alors le code est peut-être indigeste ici mais l'essentiel c'est qu'il me donne exactement ce que je recherchais à faire...

et il servira certainement à d'autres ! sourire

_________________
Projet en cours : KINGEEKS QUEST
http://kingeeks.blogspot.fr/


Dernière édition par Threepwood le Mer 17 Avr 2013 - 8:11, édité 2 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 2431

Date d'inscription : 01/08/2006


MessageSujet: Re: [Résolu] probleme d'objets d'intentaire non actifs...   Lun 15 Avr 2013 - 15:12

C'est cool que t'aies trouvé la solution Threepwood, mais si tu relis bien le message de Billbis, la solution était marquée noire sur blanc (ou plutôt rouge sur bleu/gris foncé) :
Code:
  else if (button == eMouseRight) {
    if (player.ActiveInventory != null) {
      player.ActiveInventory = null;
Alors certes, un simple copier/coller ne marchait peut-être pas, mais l'analyse du code est assez sommaire : "si le bouton de clic est le bouton droit, et si le joueur utilise actuellement un objet d'inventaire, alors on n'utilise plus d'objet d'inventaire". Il fallait bien sûr chercher la signification de ActiveInventory pour bien comprendre ce code.
C'est peut-être une qualité qu'il te reste à acquérir : prendre le temps d'analyser plus en profondeur les codes qu'on te donne clin d\\\\'oeil

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Threepwood
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 144

Age : 44

Localisation : Hyères

Date d'inscription : 29/12/2012


MessageSujet: Re: [Résolu] probleme d'objets d'intentaire non actifs...   Lun 15 Avr 2013 - 15:37

oui exact !!!!
Faut bien avoué qu'apres 3 jours de lutte non stop devant l'ecran j'avais plus vraiment les yeux en face des trous lol

Le peux que je dormais j'arrivais presque a rever de If et de mouse.mode

encore merci a Billbis !qui aura son nom dans le générique s'il est d'accors ..peut-etre meme un png a son nom dans les prochains chapitre du jeu sourire

_________________
Projet en cours : KINGEEKS QUEST
http://kingeeks.blogspot.fr/
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue


Nombre de messages : 1275

Date d'inscription : 10/05/2012


MessageSujet: Re: [Résolu] probleme d'objets d'intentaire non actifs...   Lun 15 Avr 2013 - 18:40

Y a pas de soucis, Threepwood. grand sourire
Content que le problème soit résolu.
Pour les remerciements, sens toi libre ! Je ne réclame rien. Si tu tiens vraiment à me citer explicitement, pas de problème, j'en serai honoré (même si je ne vois pas pourquoi je mériterai un tel honneur...).

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nothingaboutthedog.blogspot.fr/
Threepwood
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 144

Age : 44

Localisation : Hyères

Date d'inscription : 29/12/2012


MessageSujet: Re: [Résolu] probleme d'objets d'intentaire non actifs...   Lun 15 Avr 2013 - 19:12

une affaire a suivre en 2014 lol

sinon, j'ai mis a jour (edité) le code donné ci-dessus

il manquait une fonction click Gauche d'action de l'item que je viens de découvrir dans mes tests ... et voilà sourire (ca ne validait pas l'utilisation de litem sur un objet mais seulement sur hotspots) , il y a avait un problème de double clic dû à la fonction processclick biensur...
C'est chose réparée...
Voici le code final testé et approuvé par mes soins sourire

Code:
function on_mouse_click(MouseButton button) {
 
 
  // called when a mouse button is clicked. button is either LEFT or RIGHT
  if (IsGamePaused() == 1) {
    // Game is paused, so do nothing (ie. don't allow mouse click)
  }
  else if (button == eMouseLeft) {
   
    ginfo.Visible=false;
      if (player.ActiveInventory == null) {
        Mouse.EnableMode(eModeUseinv);
      mouse.Mode= eModeInteract  ;
      mouse.ChangeModeGraphic (eModeInteract, 1368);
          ProcessClick(mouse.x, mouse.y, mouse.Mode ); }
      if(GetLocationType(mouse.x, mouse.y)==eLocationHotspot){
 mouse.Mode = (eModeWalkto);
 }
 if(GetLocationType(mouse.x, mouse.y)==eLocationCharacter){
mouse.Mode = (eModeTalkto);
 }
 if(GetLocationType(mouse.x, mouse.y)==eLocationObject){
 mouse.Mode = (eModeInteract);
 }
 else if (player.ActiveInventory != null) {
      ProcessClick(mouse.x, mouse.y, eModeUseinv); }
 
else mouse.ChangeModeGraphic (eModeWalkto, 85) ;
ProcessClick(mouse.x, mouse.y, eModeWalkto);
  }
          if (mouse.Mode == eModeUseinv) {
          player.ActiveInventory = inventory[game.inv_activated];
    if (button == eMouseRight){
 player.ActiveInventory = null;  // lose active inventory item
          mouse.Mode=eModeInteract; 
  }
  if (button == eMouseLeft) ProcessClick(mouse.x, mouse.y, eModeUseinv);
        }
     
  else if (button == eMouseRight){
    ginfo.Visible=false;
    mouse.Mode = eModeLookat ; 
 
    mouse.ChangeModeGraphic (eModeLookat, 183);
    ProcessClick(mouse.x, mouse.y, mouse.Mode );
   
      if(GetLocationType(mouse.x, mouse.y)==eLocationHotspot){
mouse.Mode = (eModeLookat);
 }
 if(GetLocationType(mouse.x, mouse.y)==eLocationCharacter){
  mouse.Mode = (eModeLookat);
 }
 if(GetLocationType(mouse.x, mouse.y)==eLocationObject){
 mouse.Mode = (eModeLookat);
 }
  else if (player.ActiveInventory != null) {
      ProcessClick(mouse.x, mouse.y, eModeUseinv); }
 
else mouse.ChangeModeGraphic (eModeWalkto, 85) ;
ProcessClick(mouse.x, mouse.y, eModeWalkto);
    } 
  else mouse.Mode = (eModeInteract);
    }   

_________________
Projet en cours : KINGEEKS QUEST
http://kingeeks.blogspot.fr/
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Threepwood
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 144

Age : 44

Localisation : Hyères

Date d'inscription : 29/12/2012


MessageSujet: Re: [Résolu] probleme d'objets d'intentaire non actifs...   Mer 17 Avr 2013 - 8:20

Petite amélioration dans le code ce matin...Le code à changé

-Il y avait la fonction Processclick evidement qui simulait un clic doublon inutile et agaçant faisant repeter les action en double
-il manquait le mode emousinterract par defaut en cas de click annulé (derniere ligne en if else )
-click gauche sur un character = action talkto
-click droit sur character = elookat


Voilà..le code final ci-dessous...
Code:
function on_mouse_click(MouseButton button) {
 
 
  // called when a mouse button is clicked. button is either LEFT or RIGHT
  if (IsGamePaused() == 1) {
    // Game is paused, so do nothing (ie. don't allow mouse click)
  }
  else if (button == eMouseLeft) {
   
    ginfo.Visible=false;
      if (player.ActiveInventory == null) {
        Mouse.EnableMode(eModeUseinv);
      mouse.Mode= eModeInteract  ;
      mouse.ChangeModeGraphic (eModeInteract, 1368);
          ProcessClick(mouse.x, mouse.y, mouse.Mode ); }
      if(GetLocationType(mouse.x, mouse.y)==eLocationHotspot){
 mouse.Mode = (eModeWalkto);
 }
 if(GetLocationType(mouse.x, mouse.y)==eLocationCharacter){
mouse.Mode = (eModeTalkto);
 }
 if(GetLocationType(mouse.x, mouse.y)==eLocationObject){
 mouse.Mode = (eModeInteract);
 }
 else if (player.ActiveInventory != null) {
      ProcessClick(mouse.x, mouse.y, eModeUseinv); }
 
else mouse.ChangeModeGraphic (eModeWalkto, 85) ;
ProcessClick(mouse.x, mouse.y, eModeWalkto);
  }
          if (mouse.Mode == eModeUseinv) {
          player.ActiveInventory = inventory[game.inv_activated];
    if (button == eMouseRight){
 player.ActiveInventory = null;  // lose active inventory item
          mouse.Mode=eModeInteract; 
  }
  if (button == eMouseLeft) ProcessClick(mouse.x, mouse.y, eModeUseinv);
        }
     
  else if (button == eMouseRight){
    ginfo.Visible=false;
    mouse.Mode = eModeLookat ; 
 
    mouse.ChangeModeGraphic (eModeLookat, 183);
    ProcessClick(mouse.x, mouse.y, mouse.Mode );
   
      if(GetLocationType(mouse.x, mouse.y)==eLocationHotspot){
mouse.Mode = (eModeLookat);
 }
 if(GetLocationType(mouse.x, mouse.y)==eLocationCharacter){
  mouse.Mode = (eModeLookat);
 }
 if(GetLocationType(mouse.x, mouse.y)==eLocationObject){
 mouse.Mode = (eModeLookat);
 }
  else if (player.ActiveInventory != null) {
      ProcessClick(mouse.x, mouse.y, eModeUseinv); }
 
else mouse.ChangeModeGraphic (eModeWalkto, 85) ;
ProcessClick(mouse.x, mouse.y, eModeWalkto);
    } 
  else mouse.Mode = (eModeInteract);
    } 
   


Je tenais à le préciser car comme on dit...'Quand on change le code...On previent ! " lol
http://www.youtube.com/watch?v=7hXkLvPz2kM


_________________
Projet en cours : KINGEEKS QUEST
http://kingeeks.blogspot.fr/
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: [Résolu] probleme d'objets d'intentaire non actifs...   Aujourd'hui à 7:59

Revenir en haut Aller en bas
 
[Résolu] probleme d'objets d'intentaire non actifs...
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [Résolu] probleme d'objets d'intentaire non actifs...
» [Résolu]probleme alicebox
» Résolu Probleme avec ma Playstation 3
» [Résolu] Problème d'accès à http://192.168.0.1
» [Résolu] Probleme lignes Ecran N'styl

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Adventure Games Studio fr :: CREATION DE JEUX :: Questions / Réponses-
Sauter vers: