Rechercher - Liste des utilisateurs
Version complète : Cache-cache avec les composants
Accueil » Créer des labyrinthes » Cache-cache avec les composants
1 2
Xaumina
J'aimerai parler d'un problème qui ne doit pas m'embêter tout seul : et je sais que c'est un inconvénient des quatre composantes d'une case, mais j'aimerai savoir si on pourrait arranger le problème.
Je prends un exemple car je ne saurai décrire mon problème : mettons qu'un créateur de labyrinthes fasse une sorte de petit marché, avec des produits sur la table (qui sont donc soit des effets, soit des outils), la table étant un obstacle. La table cache les produits, et le joueur ne les voit pas, ce qui assez embêtant. Je demande donc : pourrait-t-on faire pour chaque types de composant (sauf pour les terrains) deux nouvelles propriétés, que le créateur règlent lui-même, par exemple : HideEffects, HideObjects et HideObstacles ?
Si le créateur décide qu'un obstacle ne cache pas l'effet en-dessous de lui, il règle un peu la propriété HideEffects, et voilà. Et s'il veut que le même obstacle ne cache pas les outils en-dessous de lui, il va aller voir la propriété HideObjects.
Je ne sais pas si c'est possible, par contre.
intello
Edit : sjrd : désolé j'ai fait une fausse manip et j'ai perdu le texte de ce message. Voici le code que intello proposait :
uses
  FunLabyBase;

components
  Table: TTable;

obstacle TTable(TBlock)
  name 'Table';
  image 'Furniture/Table';

  on AfterConstruction do
  begin
    inherited;

    HideEffectAndTool := False;
  end;

  on Pushing do
  begin
    inherited;

    if Square.Tool <> nil then
      Square.Tool.Find(Context)
    else
      Player.ShowMessage('Il n''y a rien sur cette table.');
  end;
end;

end.
sjrd
Je crois que c'est justement ce que Xaumina voulait : avoir les outils au-dessus de la table.

Voilà une idée possible :
uses
  FunLabyBase;

components
  Table: TTable;

obstacle TTable(TBlock)
  name 'Table';
  image 'Furniture/Table';

  on AfterConstruction do
  begin
    inherited;

    HideEffectAndTool := True;
  end;

  on DoDraw do
  begin
    inherited;

    if Map[Position].Tool <> nil then
      Map[Position].Tool.Draw(Context);
  end;

  on Pushing do
  begin
    inherited;

    if Square.Tool <> nil then
      Square.Tool.Find(Context)
    else
      Player.ShowMessage('Il n''y a rien sur cette table.');
  end;
end;

end.
Xaumina
Merci, c'est ce que je voulais. mais la formule ne marche pas, le compilateur m'indique qu'il ne trouve pas l'indentificateur Position.
sjrd
C'est c'est Pos à la place de Position.
Xaumina
Merci encore (pour avoir fait LifeAndMonsters et MovingMonsters aussi).
Mais cette fois c'est mieux encore : l'ordinateur ne trouve plus Jouer à Funlabyrinthe.Ink et ne veut plus m'ouvrir mon labyrinthe.
C'est arrivé comme ça : j'ai modifié Position par Pos, et ensuite mis un point entre Square et Tool. Puis j'ai compilé, et il m'a fermé mon labyrinthe avec le message : "An error occurred in the application."
J'ai envoyé mon labyrinthe mais, maintenant que j'y pense, j'aurais surtout dû envoyer ma source.
sjrd
Je crois que ça correspond à un bug que j'ai corrigé déjà, dans ma version de travail.
Mais il n'est pas bloquant : as-tu essayé de simplement cliquer sur Continuer puis utiliser le Ouvrir récent pour rouvrir ton labyrinthe ?
Ou encore relancer l'éditeur et ouvrir ton labyrinthe ?

Parce que ce bug n'apparaît que quand on utiliser le bouton Recharger tout (Ctrl+Maj+F9).

Edit : sinon oui je veux bien la source aussi, ça m'aidera à résoudre le problème, si ce n'est pas ça.
Xaumina
Je la poste ici.
sjrd
Voici l'unité corrigée.

Pour info j'ai changé :
  on DoDraw do
  begin
    inherited;

    if Map[Pos].Tool <> nil then
      Map[Pos].Tool.Draw(Context);
  end;

en :
  on DoDraw do
  begin
    inherited;

    if (Map <> nil) and (Map[Pos].Tool <> nil) then
      Map[Pos].Tool.Draw(Context);
  end;

Donc c'était de ma faute, dans le code que je te proposais.

Il te suffit d'écraser ton source Namini.fnd, puis de faire Fichier|Tour recompiler, et tu pourras rouvrir ton labyrinthe.
Xaumina
sjrd
Il te suffit d'écraser ton source Namini.fnd, puis...

L'ecraser ? Le supprimer ?
J'ai bien tout recompilé, mais le même message s'affiche.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB