У меня есть два статических (STATIC_MASS) спрайта SpaceManager. Один является потомком другого - под этим я подразумеваю, что один вид создает другой, но хотя изображения ребенка отображаются в нужном месте, кажется, что ребенок не существует в физическом движке бурундука, как я будет ожидать. В моем случае у меня есть задняя панель (прямоугольный спрайт) и обруч (круглый спрайт). Поскольку я мог бы захотеть переместить спинку, я бы хотел прикрепить пяльцы к спинке, чтобы пяльцы автоматически перемещались вместе с спинкой.
Здесь мы видим вращающийся щит с прикрепленным обручем. На экране это выглядит нормально, но другие объекты только отскакивают от задней панели, но проходят прямо через обруч (в плохом смысле этого слова). Что, кажется, моего детского спрайта не существует в физическом движке?
// Add Backboard
cpShape *shapeRect = [smgr addRectAt:cpvWinCenter mass:STATIC_MASS width:200 height:10 rotation:0.0f ];// We're upgrading this
cpCCSprite * cccrsRect = [cpCCSprite spriteWithShape:shapeRect file:@"rect_200x10.png"];
[self addChild:cccrsRect];
// Spin the static backboard: /2238435/kak-zastavit-vraschatsya-sprait-v-cocos2d-pri-ispolzovanii-spacemanager
// Make static object update moves in chipmunk
// Since Backboard is static, and since we're going to move it, it needs to know about spacemanager so its position gets updated inside chipmunk.
// Setting this would make the smgr recalculate all static shapes positions every step
// cccrsRect.integrationDt = smgr.constantDt;
// cccrsRect.spaceManager = smgr;
// Alternative method: smgr.rehashStaticEveryStep = YES;
smgr.rehashStaticEveryStep = YES;
// Spin the backboard
[cccrsRect runAction:[CCRepeatForever actionWithAction:
[CCSequence actions:
[CCRotateTo actionWithDuration:2 angle:180],
[CCRotateTo actionWithDuration:2 angle:360],
nil]
]];
// Add the hoop
cpShape *shapeHoop = [smgr addCircleAt:ccp(100,-45) mass:STATIC_MASS radius: 50 ];
cpCCSprite * cccrsHoop = [cpCCSprite spriteWithShape:shapeHoop file:@"hoop_100x100.png"];
[cccrsRect addChild:cccrsHoop];
Приведенный выше код немного сбит с толку. Изображение обруча появляется рядом с доской, что я и хочу, если я обнаружу столкновения, то столкновение происходит только в левом нижнем углу экрана. Как ни странно, даже несмотря на то, что я обнаруживаю столкновение, мой объект фактически не сталкивается, он просто проходит сквозь него, а не отскакивает от него.
Примечание: SpaceManager - это инструментарий для работы с cocos2D-iphone