Xaumina
fév. 27, 2011 10:04:42
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
fév. 27, 2011 13:20:01
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
fév. 27, 2011 14:50:16
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
fév. 27, 2011 21:25:58
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
fév. 28, 2011 00:07:20
C'est c'est Pos à la place de Position.
Xaumina
fév. 28, 2011 17:44:42
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
fév. 28, 2011 19:01:14
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
fév. 28, 2011 22:08:28
Je la poste ici.
sjrd
mars 1, 2011 00:43:30
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
mars 1, 2011 18:05:49
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.