delphi - 编辑提示锁定程序

标签 delphi

当用户在我的 map 上滚动图像时,我想显示 Map(myclass) 提示。如果我做一些简单的事情,比如让提示说“这里有怪物”,它会起作用,但我要做的是在提示中显示所有怪物的细节。当我这样做时,提示永远不会出现并且程序锁定。也许它太多了?

程序是onmousemove

procedure TBaseGameForm.HexMap1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
   position:TPoint;
   i : integer;
   totalplayers : integer;
   name : String;
   Life,movement,magical1,magical2,Attack1,Attack2,Crit,Def : String;
 begin
     position := hexmap1.convertcoords(point(x,y),ptXY);
     if FGamePlay.Locations.IndexOfName(inttostr(Position.x)+inttostr(Position.Y)) <> -1 then begin
        if FGamePlay.ShowHints = true then
          exit;
        FGamePlay.ShowHints := true;
        i:=1;
        while i <= FGamePlay.NumberOfHostPlayers do
            begin
              if (FMyPlayers.player[i].Values['posx'] = inttostr(Position.X)) AND (FMYPlayers.player[i].Values['posy'] = inttostr(Position.Y)) then
                 begin
                   With FMyPlayers.player[i] Do begin
                     name := values['name'];
                     life := values['life'];
                     movement := values['move'];
                     magical1 := values['magical1'];
                     Attack1 := 'Magical: '+Magical1+' '+Values['attack1']+'-p'+values['Power1']+'/r'+Values['Range1']+' '+Values['Ticks1']+' Ticks';
                     magical2 := values['magical2'];
                     Attack2 := 'Magical: '+Magical2+' '+Values['attack2']+'-p'+values['Power2']+'/r'+Values['Range2']+' '+Values['Ticks2']+' Ticks';
                     Crit := values['crit'];
                     Def := 'Magic def : '+values['defm']+' Normal def : '+values['defn'];
                   end;
                 end;
            end;
       hexmap1.ShowHint := true;
       hexmap1.Hint := 'Name: '+name+' Life: '+Life+' Move: '+Movement+ #13#10 +Attack1+ #13#10 +Attack2+ #13#10 +Def+ #13#10 +'Crit bonuse: '+crit;
     end
     else
       Hexmap1.ShowHint := false;
       FGamePlay.ShowHints := False;

 end;

我会尽我所能解释它以及我想让它做什么。它首先将 x,y 转换为我的 map (位置)上的一个点。然后它检查一个名为位置的字符串列表以获取位置值,如果它找到一个它说在那个位置有一个怪物。

我添加了这个额外的部分来看看它是否有帮助,如果我有 fgameplay.showhints = true 那么不需要打开提示或更改 var 因为 map 上的区域是相同的,一旦区域发生了变化(鼠标移离怪物)然后fgameplay.showhints 是错误的,如果找到,现在需要新数据。 (不确定这是否需要,但听起来不错..)

所以现在它开始寻找要添加到提示的数据。 FMyPlayers.player[i] 每个都是一个字符串列表,用于保存不同项目的值。

希望我说清楚了,我已尽我所能。现在它还只是 FMyPlayers,但也会有一个 FTherePlayers,这将是另一个 while 循环,检查 i 与客户端玩家的数量。

有任何问题或不清楚的地方请询问。我的目标是弄清楚为什么它一直卡住,也许我应该做其他事情而不是 onmousemove?
干杯
海蜇

最佳答案

尝试在您的 while 循环中添加一个 inc(i) ,您不会增加该值,以便将其锁定在 while 内。

或者最好还是使用 for 循环,因为您已经知道迭代次数。

关于delphi - 编辑提示锁定程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10784596/

相关文章:

delphi - 自定义组件创建 - 如何在工具面板中添加表示组件的小图标?

Delphi - 从由无类型指针填充的动态数组中访问数据

delphi - 使用多线程时如何使用Delphi设计时FireDac TFDQuery?

delphi - 如何可靠地将 Virtual TreeView 滚动到底部?

delphi - 将 LibTiff 与 Delphi 结合使用

delphi - 将 C 数组声明移植到 Delphi

c# - 从 Delphi 调用 .NET DLL

c++ - 将 C++ time_t 转换为 Delphi TDateTime

c++ - CreateProcess后如何实时获取内存?

delphi - TObjectList E2003 未声明的标识符 TObjectList<>