#define PTM_RATIO 1
b2Body * playerBody;
Point HelloWorld::createMyRayCast(b2Fixture * fixture ,Point point){
b2RayCastInput input;
input.p1.Set(point.x/PTM_RATIO,point.y/PTM_RATIO);
input.p2.Set(point.x/PTM_RATIO,visibleSize.height/PTM_RATIO);
input.maxFraction = 1.0f;
b2RayCastOutput output;
bool hit = fixture->RayCast(&output, input , 0 );
if (hit)
{
b2Vec2 hitPoint = input.p1 +output.fraction * (input.p2 - input.p1);
return Point(hitPoint.x* PTM_RATIO ,hitPoint.y* PTM_RATIO );
}
return Point(point.x,visibleSize.height);
}
void HelloWorld::update(float detal){
float timeStep = 0.03f;
int32 velocityIterations = 8;
int32 positionIterations = 1;
world->Step(timeStep, velocityIterations, positionIterations);
for (b2Body* b = world->GetBodyList(); b; b = b->GetNext())
{
if (b->GetUserData() != nullptr) {
Sprite* sprite = (Sprite*)b->GetUserData();
b2Vec2 pt = b->GetPosition();
sprite->setPosition( Vec2( pt.x * PTM_RATIO, pt.y * PTM_RATIO) );
sprite->setRotation( -1 * CC_RADIANS_TO_DEGREES(b->GetAngle()) );
for (b2Fixture* f = b->GetFixtureList(); f; f = f->GetNext()) {
Point pos = createMyRayCast(f,ccp(playerBody->GetPosition().x * PTM_RATIO ,playerBody->GetPosition().y * PTM_RATIO));
log("%f,%f",pos.x,pos.y);
}
}
}
}
```
如代码 ,一个有 playerBody 发出的垂直向上一直到屏幕边界的射线 , 利用射线检测与定制器的交点并打印出交点坐标 , 可是没效果 , hit一直为否 if(hit)一直都执行不到 (即使已经确定相交了)