Rechercher - Liste des utilisateurs
Version complète : Débutants
Accueil » FunDelphi » Débutants
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
DerF_44
Merci sjrd, mais en fait c'est ok, j'ai contourné le problème !!
Je souhaitais changer l'apparence de la case (du plateau de jeu) où se trouve le joueur, mais après qu'il l'ai quittée !.. Donc depuis un .fnd secondaire j'écrivais :

if Player.Tag-DiceResult = 1 then
//----Blabla1
if Player.Tag-DiceResult = 2 then
//----Blabla2
//----etc
Mais, (vu que j'ai un bon prof ), depuis mon unité principale j'ai pondu un :

case Player.Tag-DicesResult of
1: Change1(Master, Context);
2: Change2(Master, Context);
//---etc
Et dans mon unité secondaire, j'ai donc :

procedure Change1(Master : TMaster; Context : TMoveContext);
Blabla1
procedure Change2(Master : TMaster; Context : TMoveContext);
Blabla2
//----etc
Et tout fonctionne nickel !!
sjrd
OK très bien.
Note que les terrains et les effets peuvent faire quelque chose lorsque le joueur a quitté la case grâce à on Exited do
DerF_44
Ah yesss !… Trèèès intéressant !!
Ça me donne pas mal d'idées cette fonction !!!
C'est + que noté !!.
Merci !
DerF_44
Je cherche le moyen de tester si le joueur est sur une certaine carte !!..
Je dois avoir ça quelque part, mais impossible de mettre la main dessus !..
(Vivement que je prenne le temps de faire un méga-récapitulatif des fonctions FunDelphi !!)

Un truc qui serait dans le genre de :

if Player.Map = Master.Map['MaCarteSpecifique'] then
Ou bien :

Map := Master.Map['MaCarteSpecifique'];
if Player.Map = Map then
sjrd
Euh ben oui ta première proposition me semble très bien ! Ça ne marche pas ?
DerF_44
Oups.. J'ai dû zapper un truc lors de mes essais !..
Effectivement la formule
if Player.Map = Master.Map['MaCarteSpecifique'] then
fonctionne parfaitement !!
Donc fausse alerte, Sorry !.
DerF_44
Bouh !… Encore un petit blèm' de débutant, plus facile à résoudre qu'à exposer je pense !…
Alors, dans mon unité .fnd principale j'ai :

uses
MonUniteSecondaire

components
WoodKeyTool : TObjectTool
ObjectDef : WoodKey;
FindMessage : '';
end;
//...
object TWoodKey
name 'Clé';
image 'WoodKey';

action OpenWoodBlock then
Player discards 1 self;
end;
//...
Et dans mon unité secondaire, appelée (via un case) depuis l'unité principale, j'ai :

procedure Management15(Master : TMaster; Context : TMoveContext);
begin
Player.WoodKey := 0;
//..
end;
//...
Et j'obtiens un “WoodKey” non déclaré !!!?
J'ai testé plusieurs formules, avec TWoodKey, Tool, etc, mais rien à faire !..
J'en profite aussi, puisque il y a un exemple typique ici, pour savoir dans quelle mesure un nom d'objet qui a le même nom que son image peut être préjudiciable dans le bon fonctionnement d'un code !??..
DerF_44
Ok, je suis parti sur des bases + “saines”, inspirées de l'aide, (et non du .ssq traduit en .fnd) à savoir :

uses
MonUniteSecondaire

components
WoodKeys : TWoodKeys;
WoodKey : TObjectTool
ObjectDef : WoodKeys;
FindMessage : '';
end;
//...
object TWoodKeys
name 'Clé';
image 'WoodKey';

action OpenWoodBlock then
Player discards 1 self;
end;
//...
Mais toujours le même blèm' de “non déclaré” en utilisant :

Player.WoodKeys := 0;
snif..
sjrd
C'est on unité secondaire qui doit avoir un uses de l'unité où est définit WoodKeys. Pas l'inverse.
DerF_44
J'en profite aussi, puisque il y a un exemple typique ici, pour savoir dans quelle mesure un nom d'objet qui a le même nom que son image peut être préjudiciable dans le bon fonctionnement d'un code !??..
Il n'y a absolument aucun problème.
DerF_44
Aïe !… Ta réponse pointe une évidence qui se profilait déjà dans mon esprit : Le synoptique de mon projet n'est pas au point (pour ne pas dire très mal foutu !!), puisque j'ai :
unit MonUnitePrincipale;

uses
MonUniteSecondaire;

components
WoodKeys : TWoodKeys;

object TWoodKeys
name 'Clé';
image 'WoodKey';
//...

case Player.Tag of
//...
15: Management15(Master, Context);
//...

End.
Et dans mon unité secondaire :
unit MonUniteSecondaire;
//...

procedure Management15(Master : TMaster; Context : TMoveContext);
begin
Player.WoodKeys :=0; //---(ici erreur de compil' car "WoodKeys" non déclaré !)
//...
end;
//...
End.
Puisque nous sommes dans une section Débutants :
Surtout NE PAS déclarer l'unité principale dans un uses de l'unité secondaire : Crash de l'éditeur assuré !! Il n'aime pas du tout que 2 unités soient déclarées mutuellement !!
Alors, ma soluce :
Créer une 3ème unité, MonUniteDuMaterielPourMonProjet, où sera créé l'outil WoodKey, et déclarer cette unité dans les uses de l'unité principale et de l'unité secondaire !..
Ce qui nous donne :
Unité principale :
unit MonUnitePrincipale;

uses
MonUniteSecondaire, MonUniteDuMaterielPourMonProjet;

//...
case Player.Tag of
//...
15: Management15(Master, Context);
//...
//...
End.
Unité secondaire :
unit MonUniteSecondaire;

uses
MonUniteDuMaterielPourMonProjet;

//...

procedure Management15(Master : TMaster; Context : TMoveContext);
begin
Player.WoodKeys :=0;
//...
end;
//...
End.
Et donc la 3ème unité pour le matos :
unit MonUniteDuMaterielPourMonProjet;

components
WoodKeys : TWoodKeys;
WoodKey : TObjectTool
ObjectDef : WoodKeys;
FindMessage : '';
end;
//...
object TWoodKeys
name 'Clé';
image 'WoodKey';
//...
end;
//...
End.
Et tout rentre dans l'ordre : Je peux “utiliser” les WoodKeys depuis l'unité principale et secondaire !!!..

Bon, un peu long à expliquer pour si peu, mais peut-être cela servira-t-il à quelqu'un !!?..
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