Rechercher - Liste des utilisateurs
Version complète : Déplacer un poscomposent
Accueil » FunDelphi » Déplacer un poscomposent
1 2
Xaumina
Peut-on savoir comment déplacer un Poscomposent (en FunDelphi) ?
intello
uses
  FunLabyBase,FunLabyGraphics;

messages
  Move: TDispatchMessage = $32;

components
  Movant: TMovant;

poscomponent TMovant(TMobileComponent)
  name 'Truc qui bouge';
  image '';
  on message GameStarted do
  begin
    Master.Timers.ScheduleNotificationMsg(ShortDelay, Self, msgMove);
  end;

  on message Move do
  var
    Effect: TEffect;
  begin
    try
      if Map = nil then
        Exit;

      Effect := Map[Position].Effect;

      if (Effect is TArrow) and (TArrow(Effect).Direction <> diNone) then
        Direction := TArrow(Effect).Direction;
    finally
      Master.Timers.ScheduleNotificationMsg(500, Self, msgMove);
    end;
  end;
end;
end.



C'est tiré droit de MovingMonsters . J'ai pas compilé alors c'est pas garanti .
sjrd
Pas la peine de faire si compliqué juste pour ça MovingMonsters c'est particulier parce que le monstre doit se déplacer de lui-même à intervalles réguliers.

Pour déplacer un poscomponent qui s'appellerait Truc, il suffit de faire :
Truc.ChangePosition(Point3D(3, 4, 0));
Xaumina
Merci !
Xaumina
J'ai un problème avec ça, justement... Voici mon source FunDelphi.
obstacle TPlayerHasSword
  name 'Personnage qui bloque le joueur s''il n''a pas d''épée';
  image 'Characters/ManWithBeard';

  on Pushing do
  var
    Selected: Integer;
  begin
    inherited;

    if not KeyPressed then
      Exit;

    Selected := Player.ShowSelectionMsg(
      'Eh toi, que fais-tu là ? Tu veux aller dans la forêt ? C''est '+
      'dangereux ! Je ne te laisserai passer que si tu as une épée. Est-ce le '+
      'cas ?',
      ['Oui', 'Non']
      );

    if Selected = 0 then
    begin
      Player.ShowMessage ('Prouve-le moi en tuant le monstre, juste à côté !');
      StillMovingMonster.ChangePosition(Point3D(11,23,1));
    end else
    begin
      Player.ShowMessage ('Va en trouver une alors, si tu veux entrer dans la forêt !');
    end;
  end;
end;

poscomponent TStillMovingMonster (TMovingMonster)
  name 'Petit monstre qui teste le joueur';
  on ChangePosition do
  begin
    inherited;

    if not Master.Editing and (Map = nil) then
    begin
      Master.Map['ForestMap'].Map[10,22,1].Obstacle:=nil;
      Master.Map['ForestMap'].Map[9,22,1].Obstacle:=ManAfterPlayerHasSword;
    end;
  end;
end;


Les deux composants sont bien déclarés, et StillMovingMonster est placé sur la carte.

Le problème est sur la ligne : " StillMovingMonster.ChangePosition(Point3D(11,23,1));".
Xaumina
Est-ce du au fait que StillMovingMonster change de position par son héritage ? Dans ce cas, je veux bien faire un autre poscomposant (qui ne fait pas "mal" au joueur, je laisse tomber), mais qui soit destructible par l'action
DestroyRobot (qu'il disparaisse de la carte, comme les MovingMonster). Sinon, j'imagine que pour modifier la carte après sa destruction, ce sera comme pour mes MovingMonsters, sauf que ce sera dans un autre on ... do.
C'est bien ça ?
sjrd
Hum ouais, c'est bien à cause du on ChangePosition do qui se trouve quelque part dans la hiérarchie d'héritage du StillMovingMonster. C'est un bug du moteur interne qui compile les sources Delphi et FunDelphi. Je n'y peux rien dans l'immédiat.

Mais c'est contournable, il suffit de faire ceci :
var
  QPos: TQualifiedPos;
begin
  // Reste de ton code
  QPos.Map := Map;
  QPos.Position := Point3D(11, 23, 1);
  StillMovingMonster.ChangePosition(QPos);
end;
Xaumina
Et ça va le déplacer à l'endroit désigné quand le joueur répond oui à l'homme qui bloque le passage ? Et c'est dans PlayerHasSwordque l'on met ce code, ou dans StillMovingMonster ?
sjrd
Juste à la place de ceci :
StillMovingMonster.ChangePosition(Point3D(11,23,1));

qui se trouve dans le code que tu m'as montré.

Bien sûr le var doit être mis juste en-dessous du on ... do, comme d'habitude.
Xaumina
J'ai toujours le même problème. QPos ou pas, c'est le même message.
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