2012-05-28 44 views
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轉換成我地圖上的一個點(位置)。然後,它檢查一個名爲位置值的字符串列表,如果它發現某個位置值有怪物。

我增加了這個額外的部分,看看它是否有幫助,如果我有fgameplay.showhints = true,那麼不需要打開提示或更改var因爲地圖上的區域相同,一旦該區域發生變化(鼠標移開從怪物)然後fgameplay.showhints是錯誤的,現在需要新的數據,如果找到。 (不知道這是必要的,但聽起來不錯..)

所以現在它開始尋找數據添加到提示。 FMyPlayers.player [i]每一個都是一個持有不同項目值的字符串列表。

希望我明確這一點,我盡我所能。也就目前而言,它只是FMyPlayers,但也會有一個FTherePlayers,這將是另一個循環檢查我與客戶端玩家的數量。

任何問題或者如果有什麼不清楚請問。我的目標是弄清楚爲什麼它會一直凍結,也許不是我應該做點什麼? 歡呼 squills

+1

嘗試在你的while循環中添加一個inc(i),你的值不會遞增,所以它鎖定在while內部。或者更好的是仍然使用for循環,因爲你已經知道了傳輸的次數。 – Dampsquid

+1

完美!有時它的小事情,你想念:(再次感謝...讓它成爲答案和不贊成:D –

+0

行將會做,有時是小事情最難發現。 – Dampsquid

回答

5

試着在你的while循環中添加一個inc(i),你的值不會遞增,所以它鎖定在while內部。

或者更好的是仍然使用for循環,因爲您已經知道了循環次數。

+0

完美的工作太棒了! –