2011-12-21 136 views
1

我正在嘗試制定出遊戲邏輯(在Flash中)。在一個部分,因爲下面一行:查找位號碼位置

_ _ * _ _ __ *

我需要找到如果一切*的之間的空間是空的(比該行中可能會出現*其他非空值)。 該操作相當頻繁地完成
我想知道如果我可以使用位表示行來實現這一點,而不是循環和檢查中間位置。

對於表示爲xx1xxx1_ _ * _ _ _ *x = 1或0),I可以而且它與0001110使得如果答案是0000000,所述中間位置是空的。

這裏的問題當然是,如何使用位操作(在Flash AS2中)找到第二個映射(上面的0001110)? (地圖(1,4) - > 0110,(1,3) - > 0100等)
或者是循環中間位置只是更好的選擇?

+0

不確定,但是你知道你感興趣的位周圍的位的位置嗎?或者它是最左邊和最右邊的1,比如'001xxx1'? – Kapep 2011-12-21 13:08:15

+0

是的,我知道職位。這就是我所說的地圖(1,4),地圖(1,3)等 – eternalthinker 2011-12-27 19:09:37

回答

2

你可以通過移動一些位來做到這一點。

var bits:int = 0x7F; // 7 bits 
var mask:int = ((bits >> (bits - end)) << start) & bits; 

我不知道你怎麼算的位置,在這個例子中好像你從左邊做了,開始用一個 - 我打算從右邊來算,從零開始,我猜這更常見。所以start的值是第一個1(從右邊算起從零開始)和end最左邊的1的位置。

它是如何工作的具體例子:

// row:   xx1xxx1 
// desired mask: 0001110 
//    the sequence of ones in the mask starts at 1, ends at 3 

bits = 0x7F;  // 1111111 
mask = bits >> 4; // 0000111 
mask = mask << 1; // 0001110 

描述此的另一種方式:bits-(end+1)是在左邊,start零的量是那些序列的右零的數量。