![](/img/trans.png)
[英]Does Chrome on an android phone behave differently than on the desktop Chrome emulator?
[英]Why do collisions behave differently in Android than in iOS?
我正在使用Box2D独立于我的精灵来模拟物理世界,并根据b2body的位置更新了精灵的位置。
我有一个包含两个装置的播放器。 一个固定装置不是传感器,可以与地面接触。 另一个固定装置是传感器,用于检查是否与上电的可食用物品等接触。
。 我有一些身体(可食用的东西,电源),其中的固定装置包括一个可以与播放器传感器接触的传感器。
在iOS中,一切正常-当播放器与通电/可食设备发生碰撞时,他会继续运行,好像没有任何问题。 但是在Android中,他会自动启动。
可能是什么问题呢 ? 物理编辑器生成的plist文件对于两者是相同的。 为什么模拟应该不同? Box2d是cocos2d的一部分,因此两者的库是相同的,并且应该相同。
我正在使用cocos2d-x 3.7。
编辑:我使用以下内容:
ContactListener.h类:
class ContactListener : public b2ContactListener {
public:
void BeginContact(b2Contact* contact) {
void* bodyUserDataA = contact->GetFixtureA()->GetBody()->GetUserData();
if (bodyUserDataA) {
}
}
void EndContact(b2Contact* contact) {
}
};
我的ContactListener.cpp为空。
Xcode会自动处理正确构建所有事物的过程,并且一切“正常”。 在Android上,我必须在Application.mk中指定我的cpp文件,所以我想知道这是否会导致某些不同的行为,因为我没有在任何地方指定.h文件。
这是由于PhysicsEditor文件提供的GB2ShapeCache.cpp中的错误所致。 虽然isSensor的布尔检查在iOS / OS X中有效,但在Android中却无法按预期工作,并将其设置为false而不是true。
解决方法:
#if CC_TARGET_PLATFORM == CC_PLATFORM_IOS
basicData.isSensor = (bool)static_cast<CCString *>(fixtureData->objectForKey("isSensor"))->intValue();
#else
CCString *foo = static_cast<CCString *>(fixtureData->objectForKey("isSensor"));
const char *s = foo->getCString();
if (s==NULL) {
basicData.isSensor = false;
}else{
std::string str(s);
if (str=="true") {
basicData.isSensor = true;
}else{
basicData.isSensor = false;
}
}
#endif
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.