当用户在地图上滚动图片时,我想显示一个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转换为我地图上的一个点(位置)。然后它检查一个名为locations的字符串列表中的位置值,如果它找到一个说它在该位置有一个怪物。
我添加了这个额外部分以查看它是否有帮助,如果我有fgameplay.showhints = true则无需打开提示或更改var因为地图上的区域相同,一旦区域发生变化(鼠标移离怪物)然后fgameplay.showhints是假的,现在需要新的数据,如果找到。 (不确定这是否需要,但听起来不错......)
所以现在它开始寻找要添加到提示的数据。 FMyPlayers.player [i]每个都是一个字符表,包含不同项目的值。
希望我明白这一点我尽力而为。目前它只是FMyPlayers,但也会有一个FTherePlayers,这将是另一个循环检查我与客户端玩家的数量。
任何问题或者如果有什么不清楚的地方请询问。我的目标是找出为什么它一直冻结,也许不是onmousemove我应该做别的事情? 干杯 虾蛄
答案 0 :(得分:5)
尝试在while循环中添加inc(i),不增加值,使其锁定在while内。
或者更好的是仍然使用for循环,因为你已经知道了itterations的数量。