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
Ah ben la “pirouette” me semble intéressante !!..
(Encore un truc qui risque de changer mes façons de voir !. Cool !.)

Mais… Le compilateur m'annonce :
Access violation at address 50006F44 in module “rtl120.bpl”. Read of address FFFFFFD0
à la ligne

effect TGoTimer
name 'Go';
property MurX: Integer;
property MurY: Integer;
property NextGoTimer: TGoTimer; //<---------cette ligne

Effectivement, non que je sois déçu de la réponse, je trouve que j'étais “pas loin” alors avec mon code, pas si vilain que ça donc !..

Bon allez, j'en profite pour te faire part d'un questionnement qui me tracasse :
Avec l'astuce du CounterOnViewPlugin, ici : post du 26 oct 2010 [funlabyrinthe.com]
Y'aurait-il moyen de récupérer la valeur de temps d'un
Master.Timers.ScheduleNotificationMsg(5000, Player, msgMonMessage); ???!!
L'idée serait d'avoir un affichage du nombre de secondes restantes avec une formule du genre
(5000 - TempsEcoulé)/1000 !.. Mais le “TempsEcoulé” où est-il !???

Merci !



sjrd
DerF_44
Effectivement, non que je sois déçu de la réponse, je trouve que j'étais “pas loin” alors avec mon code, pas si vilain que ça donc !..
Arf. Bon mets TEffect à la place de TGoTimer à cette ligne, alors.
DerF_44
Bon allez, j'en profite pour te faire part d'un questionnement qui me tracasse :
Avec l'astuce du CounterOnViewPlugin, ici : post du 26 oct 2010
Y'aurait-il moyen de récupérer la valeur de temps d'un
Master.Timers.ScheduleNotificationMsg(5000, Player, msgMonMessage); ???!!
L'idée serait d'avoir un affichage du nombre de secondes restantes avec une formule du genre
(5000 - TempsEcoulé)/1000 !.. Mais le “TempsEcoulé” où est-il !???
Euh non ça c'est pas possible. L'information n'existe tout simplement pas si on utilise un “simple” ScheduleNotificationMsg.

Dans le Temple de l'Eau, l'épreuve minutée le fait grâce à un Stopwatch et un GaugeDisplayPlugin.
DerF_44
Arf. Bon mets TEffect à la place de TGoTimer à cette ligne, alors.
C'est Ok, cela fonctionne !..
Par contre je me demande si je ne dois pas publier ma version de cet exemple,
peut-être + accessible à un débutant que ton “astuce” des GoTimer ?!..

Euh non ça c'est pas possible. L'information n'existe tout simplement pas si on utilise un “simple” ScheduleNotificationMsg.
Mouais, je m'en doutais un petit peu… Me reste l'option de me bricoler un
Master.Timers.ScheduleNotificationMsg(1000, Player, msgUneSecondeEcoulee); avec un
on message …. do qui dé-incrémentera le Counter du CounterOnViewPlugin,
ça me semble faisable… (?)

Merci de tes réponses sjrd !

MàJ du post : Euh.. Non, ça ne me semble pas faisable le coup du msgUneSecondeEcoulee !!!!..
DerF_44
Bon, désolé, mais je me suis encore trouvé un casse-tête !!.
Sur de la glace sont posés des blocs (de glace) sur lesquels le joueur peut prendre appui (ce sont des obstacle donc).. Si le joueur trouve (et il a tout intérêt d'ailleurs !) un piolet (tool) il peut désolidariser le bloc de glace qui devient alors un MovableBlock !!!..
Seulement voilà !!.. C'est quoi un MovableBlock ?… Ni un Obstacle, ni un Effect, what is it !???
Comment créer un MovableBlock dans un source .fnd ?.. Comment lui attribuer une image ?.. L'identifier dans un code etc… ?.
uses
FunLabyBase, MovableBlocks;

actions
UnFreez;

Components
RockBlock : TRockBlock;
MovableRockBlock : TMovableBlock;

obstacle TRockBlock
name 'Rocher';
image 'RockBlock';

on Pushing do
begin
inherited;
if not KeyPressed then
Exit;
if Player can UnFreez then
begin
Square.Obstacle := nil;
Square := MovableBlockRock;//--------------------< ???????????????
end;
end;
end;
Si tu as une piste, je suis preneur !.
sjrd
Un MovableBlock n'est en effet ni un terrain, ni un effet, ni un outil, ni un obstacle. C'est un poscomponent (composant à position). Il ne peut être placé qu'à un seul endroit dans le jeu (comme les barques et le joueur). C'est pour cela qu'il faut en créer autant que nécessaire.

Le plus simple, dans ton cas, est en fait de définir ta propre sous-classe de TMovableBlock qui va ajouter le comportement de glace d'abord :
components
FreezedBlock1: TFreezedBlock;

poscomponent TFreezedBlock(TMovableBlock)
name 'Bloc gelé';
image 'Rocks/BigRock', 'TonDessinDeGlace';

property Unfreezed: Boolean;

on Pushing do
begin
if Unfreezed then
begin
// le bloc a déjà été dégelé, on utilise le comportement hérité
inherited;
end else if Player can UnFreez then
begin
// dégeler le bloc maintenant
Cancel;
Unfreezed := True;
Painter.Clear;
Painter.AddImage('Rocks/BigRock');
end else
begin
// le bloc est gelé et ne peut être dégelé
Cancel;
end;
end;
end;
Après tu peux en créer autant que nécessaire. Soit dans components soit en le copiant dans la palette des composants.
DerF_44
Absolument géant !!.
Non seulement ta réponse répond parfaitement à mes attentes,
mais de plus (m')offre un accès à une nouvelle dimension du monde FunDelphi !.
Excellent !!

Merci beaucoup !!

Quand je pense que j'en étais à triturer mon parcours sur la glace en tous sens en jouant des MovableBlock.Direction !!!!..
D'envisager de poser de multiples effets pour modifier le terrain afin que le Movable.Block glisse ou pas !!!..

Évidemment là, avec ta méthode, c'est d'un autre niveau, d'une autre classe !!
Superbe !!



Deux petites broutilles d'ordre technique qui interpellent ma curiosité depuis un moment :
- C'est quoi le ZIndex que l'on rencontre sur pas mal de composants !?..
- Et le HideEffectAndTool sur les SilverBlock et GoldenBlock ?.
sjrd
DerF_44
C'est quoi le ZIndex que l'on rencontre sur pas mal de composants !?..
Si, sur une même case se trouvent plusieurs poscomponents, leurs ZIndex respectifs régit l'ordre dans lequel ils seront dessinés et l'ordre dans lequel ils auront l'opportunité de réagir aux événements.

Étant un poscomponent A avec un ZIndex plus élevé que B, A sera dessiné au-dessus de B, et A attrapera les événements avant B.
DerF_44
Et le HideEffectAndTool sur les SilverBlock et GoldenBlock ?.
Si sur une même case, il y a un effet et/ou un outil, ainsi qu'un obstacle. Si l'obstacle à HideEffectAndTool à False, tout est dessiné. Si HideEffectAndTool est True, alors seul le terrain et l'obstacle sont dessinés. L'effet et l'outil sont donc caché, même si l'image de l'obstacle est partiellement transparente.
DerF_44
Ah oui, ok, pigé !
Euh… oui, effectivement pour le HideEffectAndTool j'aurais dû capter !!.

Encore un énorme MERCI sjrd, pour toutes ces (très) précieuses infos !!
DerF_44
Broutille technique de “conjugaison” ..
Afin de prendre un peu de recul avec mon projet, et histoire de faire du tri dans ma tête,
je suis en train de rédiger une sorte de notice-lexique du FunDelphi,
pour l'instant à usage perso, mais je compte bien en sortir un jour un PDF librement téléchargeable..

Voici ma question :
Quelle différence peut-il y avoir entre un effect TMonEffet et effect TMonEffet(TCounterEffect) ?..

Peux-tu aussi, stp, me refiler le lien du code source de FunLabyrinthe afin que je puisse prendre connaissance des différentes classes d'effets ?..

Merci.
sjrd
Quand on écrit effect TMonEffet, c'est la même chose qu'écrire effect TMonEffet(TEffect). Le nom de classe entre parenthèses est ce qu'on appelle la classe de base (ou classe parent) de TMonEffet.
La classe TMonEffet hérite toutes les propriétés, événements, etc. de sa classe de base. Par exemple, pour TCounterEffect, elle profite de propriétés permettant de compter combien de fois tel ou tel joueur est entré sur l'effet.

Les sources de FunLabyrinthe sont sur GitHub [github.com], et plus particulièrement dans l'unité Packages\FunLabyCore\FunLabyUtils.pas [github.com] (pour les classes coeur de FunLabyrinthe) et dans le dossier UnitPackages\FunLabyBase [github.com] (pour les classes définies dans FunLabyBase).
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