1

ユーザーがマップ上の画像をロールオーバーしたときに 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をマップ上のスポット(位置)に変換することから始めます。次に、location と呼ばれる文字列リストで location の値をチェックし、その場所にモンスターがいると言っているものが見つかった場合。

fgameplay.showhints = true がある場合、マップ上の領域が同じであるため、ヒントをオンにしたり var を変更したりする必要はありません。領域が変更されたら (マウスがモンスターから離れた)、次にfgameplay.showhints は false であり、見つかった場合は新しいデータが必要になります。(これが必要かどうかはわかりませんが、良さそうです..)

そのため、ヒントに追加するデータを探し始めます。FMyPlayers.player[i] それぞれが異なるアイテムの値を保持する文字列リストです。

私がこれを明確にしたことを願っています。私はできる限りのことをしました。また、今のところ FMyPlayers だけですが、別の while ループ チェック i とクライアント プレーヤーの数になる FTherePlayers もあります。

ご不明な点がございましたら、お気軽にお問い合わせください。私の目標は、なぜフリーズし続けるのかを理解することです.onmousemoveの代わりに何か他のことをする必要がありますか? 乾杯

4

1 に答える 1

5

while ループ内に inc(i) を追加してみてください。値をインクリメントしないため、while 内でロックされます。

または、反復回数が既にわかっているため、 for ループを使用することをお勧めします。

于 2012-05-28T13:09:05.013 に答える