2011-04-25 55 views
0

我正在用jQuery和PHP創建一個可以說(虛擬世界)的「世界」。它是如何工作首先一點能幫助你更好地理解我的問題:jQuery「world」動畫

  1. 的用戶的字符的位置從數據庫中,用戶據此繪製拍攝(位置值是CSS值 - 左上)
  2. 用戶是能夠移動使用鍵盤上的箭頭鍵,使他們的角色移動使用jQuery動畫。發生這種情況時(在每次按下箭頭時),用戶的位置值將被插入到數據庫中並進行更新。
  3. 爲了使這個「全球」(使用戶看到對方),你可以說,該值需要使用AJAX

上述步驟我已經想通了,每個用戶都在更新一次。但是,當另一個用戶的職位移動時(意味着他們按下箭頭鍵),移動動畫不會顯示給查看該用戶的其他用戶。如果你繼續並移動你的角色,你會發現你的角色使用jQuery動畫完美無瑕。但是,如果你要看看你的朋友動作,他會「傳送」,這意味着他將從一個位置移動到另一個位置,而沒有動畫。我知道JavaScript顯然只針對每個用戶看,但是有什麼辦法可以讓它向所有用戶顯示所有動畫?所以當你移動時,你的朋友會看到你動起來,而不是重新定位。

謝謝你的幫助。

回答

0

絕對如此。我建議使用長輪詢輪詢DB(通過ajax)並使用animate()函數更新每個新的精靈。

+0

我如何獲得移動動畫以顯示給所有用戶? – Tim 2011-04-25 19:54:42

+0

每個用戶都需要爲所有用戶位置輪詢數據庫。然後,需要在每個用戶的瀏覽器上爲每個精靈完成動畫。所以你會得到服務器的迴應,告訴你所有50個(例如)用戶在屏幕上的位置。所有50個精靈必須動畫到他們的新地點。 – Dutchie432 2011-04-25 19:57:13

+0

正是由於這個原因,多數用戶設置的服務器類型一次會強制某個MAX用戶。這是爲了將帶寬限制在他們能夠處理的範圍內,因爲如果你一次只有10k ppl的話,這可能會「衝擊」你的服務器...... – g19fanatic 2011-04-25 20:02:23

0

(抱歉單獨的答案,這可能屬於作爲Dutchie的答案評論,但我不能「評論無處不在」尚)

如果不同時顯示在屏幕上每一個用戶,你可以有僅針對當前用戶視圖內的用戶的查詢 - 例如,每個用戶將調用「animateNearbyUsers()」函數,該函數將使用當前用戶的位置來查找N個正方形/像素內的所有用戶並且僅對這些用戶進行動畫處理。隨着用戶數量的增加,這應該使性能問題更少。

0

由於延遲問題,沒有完美的解決方案,但根據您對「足夠好」的定義,有「足夠好」的解決方案。

最簡單的方法是設置一個動畫隊列,並將每個服務器響應用作關鍵幀。

所以假設你從服務器的3次連續輪詢獲得位置a,b和c,你從a開始一個動畫到b,然後你得到位置c,並且你排隊從b到c的動畫,角色完成從a到b的第一個動畫。

這應該是(相對)簡單,但UI的成本落後,因爲它們只在服務器確定它已經到達後纔開始移動到下一個位置,但這對您而言可能是可以接受的。

更困難的方法是嘗試「猜測」用戶將根據他們上次檢查時移動的方向來確定用戶的位置。這涉及到的不僅僅是方位(而且可能是速度),當你猜錯時你仍然會跳躍,這可以通過更多的工作來平滑。這實際上是大多數大名鼎鼎的遊戲所做的事情,而且正確做到這一點很棘手。