資料鎖和出佇列的乙個例子

2022-01-31 14:38:33 字數 1173 閱讀 7495

對於佇列和資料鎖,本文結合我所在的mmo遊戲專案,討論乙個實際例子

當玩家在遊戲的過程中,獲得道具、物品時,會彈出乙個提示窗體(浮動樣式),提示玩家進行操作。

彈出框彈出順序:

先進先出,且不會包含重複資料。

或者是後進先出,且不會包含重複資料

理論上來說同乙個時間列表中儲存的資料不會超過100項,甚至可以說不會超過50項,那麼對列表的操作就不會很耗時。

每次揹包更新,或者其它有需要提示的操作都儲存到列表中,在控制器管理什麼時候應該顯示那一項。

在定時器中每300ms或每秒檢查資料,一般有以下幾種條件

只在主城顯示,在戰鬥場景不顯示

如果列表有資料,且當前沒有正在顯示的就顯示

在介面關閉之前處理按鈕的**,比如從列表中移除元素。

處理異常情況,比如列表數量為0,但介面還顯示的話,就需要把介面關閉。

裝備彈出條件:

玩家等級大於裝備等級

新獲得的裝備比當前穿戴的戰力更高

當然有乙個極限情況:在裝備點了穿戴的過程中,又獲得了乙個新的戰力一樣的裝備。

解決辦法是:先儲存當前正在穿戴的裝備資料,待伺服器資料返回穿戴成功才從列表中移除。

有些道具並不會放進揹包的,或者一些系統的操作,並不是道具來的,但達到條件之後,也要提醒玩家可操作。

比如寵物可以進行公升級,或者強化,彈出乙個框提示玩家可操作。

新增乙個type欄位,和幾個外觀字段,用於顯示不同的樣式。

對於寶箱類道具,希望可以合併相同id的道具為同乙個,不會重複彈出多次,僅僅是同乙個道具在堆疊數量上增加。

在切換場景時,可以做這個操作。

對於裝備類或寶石等,有可能玩家手動操作,比如手動穿戴,手動合成掉了,或者時效性道具已經過期了,那麼需要從列表中移除揹包內不存在的道具。

可以在回到主介面時,進行一次清理列表。

一般來說是按鈕後進先出,或者先進先出的順序

也可以對某些特定種類的進行排序

LineDDA的乙個例子

unit unit1 inte ce uses windows,messages,sysutils,variants,classes,graphics,controls,forms,dialogs,extctrls,stdctrls,buttons type tfmmain class tform ...

SQL GROUP CONCAT的乙個例子

我有乙個這樣的資料庫 user info 現在有乙個需求是把這樣 9 條記錄按照 username 來 group 成3條記錄 目標 shu female 201 lee male 202 yuki female 181 如果用select from user info group by usern...

explode的乙個例子

select level as level,explode split 1,2,3 as value 可以生成結果 level value level 1 level 2 level 3 lateral view 1.lateral view 用於和udtf函式 explode,split 結合來使...