Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ cocos2dxv3.4中的交叉物理体问题_C++_Cocos2d X_Physics Engine - Fatal编程技术网

C++ cocos2dxv3.4中的交叉物理体问题

C++ cocos2dxv3.4中的交叉物理体问题,c++,cocos2d-x,physics-engine,C++,Cocos2d X,Physics Engine,我是Cocos2dx v3.x的新手。我正在开发一款基本的赛车游戏,在这个游戏中,赛车可以在连续滚动的轨迹中移动,这是一条直线和小曲线,就像Google play Store中的“公路战士”游戏一样。为了移动赛车,我使用了设备加速计,并据此调整车身的速度。对于路径车身,我使用下面显示的5个点的EdgeChain形状,这样可以使汽车运动的边界区域不超过该区域。但是使用setVelocity函数,我的车身超出边界。我还设置了CollisionBitmask和ContactTestBitmask,检测

我是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中运行良好。我没有弄错什么地方,也没有弄错如何在滚动边界内使用加速计移动我的汽车。有人建议吗

提前谢谢