2011-12-23 81 views
0

我的游戏中有许多精灵,它们都具有b2world中的物体。并且为了检测触摸接下来我要做的:在检测到触摸时在cocos2d中展开testPoint区域

currentPosition = [[CCDirector sharedDirector] convertToGL: currentPosition];  
    b2Vec2 locationWorld = b2Vec2(currentPosition.x/PTM_RATIO, currentPosition.y/PTM_RATIO); 

    for (b2Body* b = world->GetBodyList(); b; b = b->GetNext()) 
    { 
     b2Fixture *bf1 = b->GetFixtureList(); 
     if (bf1->TestPoint(locationWorld)) 
     { 
      CCSprite *tempSprite = (CCSprite *) b->GetUserData(); 
      if (tempSprite.tag==2 ) 
      { 

现在,因为我的精灵的身体太小了,他是移动的,它是非常困难,而其移动到触摸它,所以我需要改变这个代码,为了在这个精灵周围也检测一个广域。 如何将测试点扩展为+ - 更多50像素?

非常感谢。

回答

0

您可以将一个较大的夹具连接到身体并将夹具的传感器标志设置为true。传感器夹具不会改变任何物理特性,但您可以检查一个点是否落在其边界内。

可以创建传感器夹具这样的(从SensorTest.h):

b2CircleShape shape; 
shape.m_radius = 5.0f; 
shape.m_p.Set(0.0f, 10.0f); 

b2FixtureDef fd; 
fd.shape = &shape; 
fd.isSensor = true; 
body->CreateFixture(&fd); 

参见Box2D的手册,第6.3节(PDF),并包括在试验台SensorTest.h。

+0

谢谢,但他们只写了4行,看起来很有趣,你能给我一个简单的例子吗?我的方式不好? – Curnelious 2011-12-23 18:21:39

+0

查看我的编辑,我从包含的Box2D示例中添加了一个代码示例。他们是一个很好的学习资源。 – kasrak 2011-12-23 19:37:52

+0

非常感谢我。 – Curnelious 2011-12-24 10:06:56