Libgdx-Box2D装置是传感器还是非传感器?

Libgdx-Box2D装置是传感器还是非传感器?,libgdx,box2d,Libgdx,Box2d,假设我有物体A,B和C,每个都有一个固定装置。装置A和B可以相互作用,其中一个或两个都是传感器,因此不会发生物理相互作用,但A和B是否都与装置C有物理相互作用?因此,A-B=无交互,A-C=交互,B-C=交互您应该研究冲突过滤(掩蔽) 通过为不同对象设置类别和遮罩,可以控制允许哪些对象相互交互 // create categories final short A = 0x0001; // 0000000000000001 in binary final short B = 0x0002; //

假设我有物体A,B和C,每个都有一个固定装置。装置A和B可以相互作用,其中一个或两个都是传感器,因此不会发生物理相互作用,但A和B是否都与装置C有物理相互作用?因此,A-B=无交互,A-C=交互,B-C=交互

您应该研究冲突过滤(掩蔽)

通过为不同对象设置类别和遮罩,可以控制允许哪些对象相互交互

// create categories
final short A = 0x0001;  // 0000000000000001 in binary
final short B = 0x0002; // 0000000000000010 in binary
final short C = 0x0004; // 0000000000000100 in binary

// create masks
final short AM = 0x0006 // 0000000000000110 in binary
final short BM = 0x0006 // 0000000000000110 in binary
final short CM = 0x0001 // 0000000000000001 in binary

// apply masks and categories to fixtures
FixtureDef ADef = new FixtureDef();
ADef.filter.categoryBits = A;
ADef.filter.maskBits = AM;

您应该研究碰撞过滤(掩蔽)

通过为不同对象设置类别和遮罩,可以控制允许哪些对象相互交互

// create categories
final short A = 0x0001;  // 0000000000000001 in binary
final short B = 0x0002; // 0000000000000010 in binary
final short C = 0x0004; // 0000000000000100 in binary

// create masks
final short AM = 0x0006 // 0000000000000110 in binary
final short BM = 0x0006 // 0000000000000110 in binary
final short CM = 0x0001 // 0000000000000001 in binary

// apply masks and categories to fixtures
FixtureDef ADef = new FixtureDef();
ADef.filter.categoryBits = A;
ADef.filter.maskBits = AM;

是的,这可以使用掩码位和类别位。这些允许装置仅与使用这些位定义的某些其他装置交互

类别位定义装置类型,默认值为0

掩码位定义设备可以与哪些类别的设备交互


因此,为了使A和B与C交互,而不是相互交互,我们需要应用以下类别位:

A.filter.categoryBits = 0x0001; //binary: 01
B.filter.categoryBits = 0x0001; //binary: 01
C.filter.categoryBits = 0x0002; //binary: 10
和以下掩码位:

A.filter.maskBits = 0x0002; //binary: 10
B.filter.maskBits = 0x0002; //binary: 10
C.filter.maskBits = 0x0001; //binary: 01
由于A和B是类别
0x0001
,C有掩码
0x0001
,C可以与A和B交互。A和B的掩码中不包含
0x0001
,因此不能相互交互

// create categories
final short A = 0x0001;  // 0000000000000001 in binary
final short B = 0x0002; // 0000000000000010 in binary
final short C = 0x0004; // 0000000000000100 in binary

// create masks
final short AM = 0x0006 // 0000000000000110 in binary
final short BM = 0x0006 // 0000000000000110 in binary
final short CM = 0x0001 // 0000000000000001 in binary

// apply masks and categories to fixtures
FixtureDef ADef = new FixtureDef();
ADef.filter.categoryBits = A;
ADef.filter.maskBits = AM;


可以找到更深入的解释和示例。

是的,这可以使用掩码位和类别位。这些允许装置仅与使用这些位定义的某些其他装置交互

类别位定义装置类型,默认值为0

掩码位定义设备可以与哪些类别的设备交互


因此,为了使A和B与C交互,而不是相互交互,我们需要应用以下类别位:

A.filter.categoryBits = 0x0001; //binary: 01
B.filter.categoryBits = 0x0001; //binary: 01
C.filter.categoryBits = 0x0002; //binary: 10
和以下掩码位:

A.filter.maskBits = 0x0002; //binary: 10
B.filter.maskBits = 0x0002; //binary: 10
C.filter.maskBits = 0x0001; //binary: 01
由于A和B是类别
0x0001
,C有掩码
0x0001
,C可以与A和B交互。A和B的掩码中不包含
0x0001
,因此不能相互交互

// create categories
final short A = 0x0001;  // 0000000000000001 in binary
final short B = 0x0002; // 0000000000000010 in binary
final short C = 0x0004; // 0000000000000100 in binary

// create masks
final short AM = 0x0006 // 0000000000000110 in binary
final short BM = 0x0006 // 0000000000000110 in binary
final short CM = 0x0001 // 0000000000000001 in binary

// apply masks and categories to fixtures
FixtureDef ADef = new FixtureDef();
ADef.filter.categoryBits = A;
ADef.filter.maskBits = AM;

可以找到更深入的解释和示例