[Box2DFlashAS3] b2FilterData的categoryBits & maskBits

if ((categoryBits & maskBits) > 0×0000) { 碰撞有效; }

以Sample的TestStack來說:

// Ball和Box自成一類
var cateBall:uint = 0x0010;
var cateBox:uint = 0x0020;
// Ramp同時和Ball及Box一類
var cateRamp:uint = cateBall | cateBox;

var filterBall:b2FilterData = new b2FilterData();
filterBall.categoryBits = cateBall;
// 將Ball的碰撞Flag中去掉Box的類別
// Ball和Box只要去除一邊即可,也就是只要有一邊無視於碰撞另一邊就無法與其做碰撞
filterBall.maskBits = 0xffff ^ cateBox;

var filterBox:b2FilterData = new b2FilterData();
filterBox.categoryBits = cateBox;
// 將Box的碰撞Flag中去掉Ball的類別
filterBox.maskBits = 0xffff ^ cateBall;

var filterRamp:b2FilterData = new b2FilterData();
filterRamp.categoryBits = cateRamp;
// Ramp與兩個類別做碰撞
filterRamp.maskBits = 0xffff;

中略

b.CreateFixture(fd).SetFilterData(filterBox);
// 中略
b.CreateFixture(fd).SetFilterData(filterRamp);
// 中略
b.CreateFixture(fd).SetFilterData(filterBall);

這樣設的話Box和Ball就不會發生碰撞而會穿過去。

[C++] STLPort安裝@VC2010 + boost

VC10 STLPort5.2.1 Boost1.43.0 備忘録
まずは STLport のインストール
看書上說很威?而且還可以用他去編譯boost…快+快=更快?

安裝步驟:

  1. 開啟Visual Studio Command Prompt (2010)
  2. cd至stlport的資料夾執行configure msvc9
  3. 似乎從VC10開始stlport的abs會有錯誤,所以把stlport\stl\_cstdlib.h的158行Comment掉
  4. cd至stlport\build\lib,執行nmake clean install
  5. 等stlport編譯完
  6. 用記事本開boost下的tools\build\v2\user-config.jam
  7. 把using msvc和using stlport的Comment(#)去掉並改成:
    using msvc : 10.0 ;
    using stlport : 5.2 : X:\\stlport : X:\\stlport\\lib ;
    路徑自行代換。
  8. 接著參照官方bjam的參數用法執行bjam
    例:bjam –toolset=msvc-10.0_64 stdlib=stlport-5.2 install variant=release,debug link=static,shared address-model=64 –build-type=complete –prefix=x:\boost64VC10

另外還有個東西叫Loki似乎也很威?
如果make.msvc.bat不支援安裝的VS版本的話只要改一下裡面用的環境變數版號就好了。

[C++] CString寫入UTF-8文字

搞了老久…結果居然是最簡單的方法:

FILE *hFile = _wfopen(L"utf8.txt", L"w, ccs=UTF-8");

CString cStr = L"測試文字Test Text";
_ftprintf(hFile, cStr);
fclose(hFile);

用Binary開起來就知道BOM有寫進去 + 英數都是1Byte。
UTF-16應該也能依樣畫葫蘆才是。