在检测到触摸时在cocos2d中展开testPoint区域
问题描述:
我的游戏中有许多精灵,它们都具有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像素?
非常感谢。
答
您可以将一个较大的夹具连接到身体并将夹具的传感器标志设置为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。
谢谢,但他们只写了4行,看起来很有趣,你能给我一个简单的例子吗?我的方式不好? – Curnelious 2011-12-23 18:21:39
查看我的编辑,我从包含的Box2D示例中添加了一个代码示例。他们是一个很好的学习资源。 – kasrak 2011-12-23 19:37:52
非常感谢我。 – Curnelious 2011-12-24 10:06:56