C++ cocos2dxv3.4中的交叉物理体问题
我是Cocos2dx v3.x的新手。我正在开发一款基本的赛车游戏,在这个游戏中,赛车可以在连续滚动的轨迹中移动,这是一条直线和小曲线,就像Google play Store中的“公路战士”游戏一样。为了移动赛车,我使用了设备加速计,并据此调整车身的速度。对于路径车身,我使用下面显示的5个点的EdgeChain形状,这样可以使汽车运动的边界区域不超过该区域。但是使用setVelocity函数,我的车身超出边界。我还设置了CollisionBitmask和ContactTestBitmask,检测到碰撞,即使这样,汽车的物理实体也会越过路径的边缘链体C++ cocos2dxv3.4中的交叉物理体问题,c++,cocos2d-x,physics-engine,C++,Cocos2d X,Physics Engine,我是Cocos2dx v3.x的新手。我正在开发一款基本的赛车游戏,在这个游戏中,赛车可以在连续滚动的轨迹中移动,这是一条直线和小曲线,就像Google play Store中的“公路战士”游戏一样。为了移动赛车,我使用了设备加速计,并据此调整车身的速度。对于路径车身,我使用下面显示的5个点的EdgeChain形状,这样可以使汽车运动的边界区域不超过该区域。但是使用setVelocity函数,我的车身超出边界。我还设置了CollisionBitmask和ContactTestBitmask,检测
auto *sprite = Sprite::create("Road.jpg");
sprite->setPosition(Vec2(winSize.width/2,winSize.height/2));
sprite->setScaleX(rX);
sprite->setScaleY(rY);
this->addChild(sprite, 0);
auto edge_body=PhysicsBody::createEdgeChain(vec ,5 ,PHYSICSBODY_MATERIAL_DEFAULT,3);
edge_body->setDynamic(false);
edge_body->addShape(PhysicsShapeEdgeChain::create(vec3, 5));
sprite->setPhysicsBody(edge_body);
edge_body->setCollisionBitmask(1);
edge_body->setContactTestBitmask(true);
//where vec and vec3 are vectors of 5 points acc to track boundary.
auto *mycar=Sprite::create(car_png_name);
mycar->setPosition(Point(winSize.width/2,winSize.height*0.35));
addChild(mycar,2);
mycar_body=PhysicsBody::createBox(mycar->getContentSize(),PhysicsMaterial(0,1,0));
mycar->setPhysicsBody(mycar_body);
mycar_body->setRotationEnable(false);
mycar_body->setCollisionBitmask(2);
mycar_body->setContactTestBitmask(true);
// DEVICE ACCELEROMETER
Device::setAccelerometerEnabled(true);
auto listener= EventListenerAcceleration::create (CC_CALLBACK_2(HelloWorld::OnAcceleration,this));
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
auto contact_listener=EventListenerPhysicsContact::create();
contact_listener->onContactBegin=CC_CALLBACK_1(HelloWorld::onContactBegin, this);
this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(contact_listener, this);
void HelloWorld::OnAcceleration(cocos2d::Acceleration *acc, cocos2d::Event *event)
{
#define KFILTERINGFACTOR 0.7
#define KRESTACCELX 0
#define KsquirrelMAXPOINTSPERSEC (winSize.width*0.5)
#define KMAXDIFFX 0.15
double rollingX=0;
acc->y = acc->x;
rollingX = (acc->y * KFILTERINGFACTOR) + (rollingX * (1.0 - KFILTERINGFACTOR));
float accelX = acc->y - rollingX;
float accelDiff = accelX - KRESTACCELX;
float accelFraction = accelDiff / KMAXDIFFX;
carspeed = KsquirrelMAXPOINTSPERSEC * accelFraction*1.5;
if(mycar_body!=NULL)
mycar_body->setVelocity(Vec2(carspeed*1.5,0));
}
我在Cocos2dxv3.4中遇到过这个问题。同样的逻辑在Cocos2dxv2.2.6和box2d b2body中运行良好。我没有弄错什么地方,也没有弄错如何在滚动边界内使用加速计移动我的汽车。有人建议吗
提前谢谢