Unity心得(1) 使用乙個整數儲存狀態

2021-07-23 03:46:33 字數 1033 閱讀 8895

使用習慣了unity和c#,有時候可能會忽略掉一些當初學習c/c++小技巧,最近開發專案的時候,專案組那些有經驗的前輩介紹了有關使用乙個整數儲存多個狀態的方法,使用的就是以前c/c++中常用的位運算。

先試想乙個場景,比如乙個套裝裝備有十多個插槽,需要檢測這些插槽是否插有加成的寶石,就需要十多個變數來代表有或者沒有,使用多個bool變數或者int陣列,顯得結構臃腫且難以管理,既然只是表示有或者無,那麼用0,1就可以表示,所以想到使用二進位制來表示這些變數。

所以,設定乙個int型別的狀態變數

int slotstate =0;
好了,現在我們在插槽全空的狀態下在3號插槽插上了乙個加成寶石,用二進位制表示就應該是100,即第三號插槽有寶石,顯然,不能直接寫slotstate = 4,這樣就失去了我們使用這種方法的初衷,應該按照下面的這樣寫。

slotstate =slotstate|(1<<2)
其中1<<2 是按照二進位制計算的,1<<2 = 100,將slotstate = 000與100進行「|」或運算,則得到100,可以這個slotstate的第三位已經被置為1了。系統因此可以記錄三號插槽已經使用。

那麼相應的,我們也需要檢測插槽的使用,比如有使用者試圖在3號插槽安裝寶石,那麼假設

slotstate =20;
20的二進位制為10100,那麼相應的即為3、5號插槽是有寶石的,那麼因為使用者嘗試使用3號插槽,那麼我檢測3號插槽使用如下方法。

bool isslotused =((slotstate >> 2) %2 == 0);
其中slotstate >> 2,使得slotstate = 101,此時對2取餘,因為最後一項為1,所以取餘結果為0,那麼isslotused為真,證明該插槽被使用。

以上就是最近學習到的乙個小技巧,當然這個小技巧有個限制,倘若狀態變數(比如此例中的slotstate)是帶符號的int,那麼無論其為32位或者64位,其中的最後一位都是符號位,不要占用該位來儲存狀態,否則容易出錯,失去這個狀態變數的唯一性。

使用Unity製作乙個時鐘

建立時鐘 讓我們建立乙個新的工程。預設的場景中包含乙個position為 0,1,10 的相機。在相機視口中可以看到場景的一部分,選擇這個相機,然後選擇選單中的 gameobject alignview便能獲得你想看到場景中的某個部分。我們需要一些遊戲物件去代替這個時鐘。選中選單中的gameobje...

翻轉乙個整數

今天又是給大家分享乙個小的知識點 翻轉乙個整數 相信我,知識點so so so easy 並且很容易理解。好了,閒話咱們就不多說了,直接開始今天的正題吧。首先先來看下題目是什麼。實現乙個整數的翻轉 如 初始值 123,翻轉後 321 初始值 123,翻轉後 321 首先不看答案,按照自己的想法來解答...

倒置乙個整數

倒置整數 比如 倒置前 int a 123654 倒置後 int a1 456321 public class test02 int result 0 儲存置換了位置的整數最後結果 int j len 下面的核心思想 通過for迴圈依次將每一數字按照位置乘以對應的10的j次冪 比如 第一位數字res...