Forum FunLabyrinthe

Le jeu de labyrinthe fun et gratuit - Retour au site

  • Vous n'êtes pas connecté.

#1 mars 13, 2011 09:46:29

Xaumina
Enregistré : 2011-01-20
Messages : 191
Réputation: +  5  -
Profil   Envoyer un courriel  

Déplacer un poscomposent

Peut-on savoir comment déplacer un Poscomposent (en FunDelphi) ?

Hors-ligne

#2 mars 13, 2011 19:36:53

intello
De : Yvelines
Enregistré : 2010-07-25
Messages : 167
Réputation: +  9  -
Profil  

Déplacer un poscomposent

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 .


========================================
Pas, Flèches rapides, Flèches masquées, Impossible par Maxime, Elévateurs & Terrains vides,
Jeu de boutons

Admirez mes jeux de flèches, de téléporteurs , d'escaliers , de pas ou de boutons !


Notez ces labyrinthes

Hors-ligne

#3 mars 13, 2011 19:54:17

sjrd
De : Belgique
Enregistré : 2010-04-11
Messages : 481
Réputation: +  14  -
Profil   Envoyer un courriel  

Déplacer un poscomposent

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));


---
Sébastien Doeraene
Auteur de FunLabyrinthe

Hors-ligne

#4 mars 13, 2011 20:22:27

Xaumina
Enregistré : 2011-01-20
Messages : 191
Réputation: +  5  -
Profil   Envoyer un courriel  

Déplacer un poscomposent

Merci !

Hors-ligne

#5 mars 19, 2011 17:20:20

Xaumina
Enregistré : 2011-01-20
Messages : 191
Réputation: +  5  -
Profil   Envoyer un courriel  

Déplacer un poscomposent

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));".

Modifié Xaumina (mars 19, 2011 17:22:25)

Hors-ligne

#6 mars 19, 2011 17:30:00

Xaumina
Enregistré : 2011-01-20
Messages : 191
Réputation: +  5  -
Profil   Envoyer un courriel  

Déplacer un poscomposent

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 ?

Modifié Xaumina (mars 19, 2011 17:31:42)

Hors-ligne

#7 mars 19, 2011 18:46:49

sjrd
De : Belgique
Enregistré : 2010-04-11
Messages : 481
Réputation: +  14  -
Profil   Envoyer un courriel  

Déplacer un poscomposent

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;


---
Sébastien Doeraene
Auteur de FunLabyrinthe

Hors-ligne

#8 mars 19, 2011 18:58:28

Xaumina
Enregistré : 2011-01-20
Messages : 191
Réputation: +  5  -
Profil   Envoyer un courriel  

Déplacer un poscomposent

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 ?

Modifié Xaumina (mars 19, 2011 19:10:24)

Hors-ligne

#9 mars 19, 2011 19:30:24

sjrd
De : Belgique
Enregistré : 2010-04-11
Messages : 481
Réputation: +  14  -
Profil   Envoyer un courriel  

Déplacer un poscomposent

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.


---
Sébastien Doeraene
Auteur de FunLabyrinthe

Hors-ligne

#10 mars 19, 2011 19:43:57

Xaumina
Enregistré : 2011-01-20
Messages : 191
Réputation: +  5  -
Profil   Envoyer un courriel  

Déplacer un poscomposent

J'ai toujours le même problème. QPos ou pas, c'est le même message.

Modifié Xaumina (mars 19, 2011 19:48:05)

Hors-ligne

Pied de page

Modération

Powered by DjangoBB

Lo-Fi Version