Как я могу повернуть тело, когда пользователь коснется экрана в cocos2d - PullRequest
0 голосов
/ 07 августа 2009

Я столкнулся с одной проблемой. Я сделал некоторое кодирование, чтобы повернуть cpSegmentShapeNew, но он не работает. Посмотрите на следующий код,

    //**creating shape
testBody = cpBodyNew(INFINITY, INFINITY);
cpShape* testShape = cpSegmentShapeNew(testBody, cpv(230, 82), cpv(193, 46), 0.0f);
testShape->e = 0.0;
testShape->u = 0.0;
testShape->data = flipper;
testShape->collision_type = 2;
cpSpaceAddStaticShape(space, testShape);

//Body moving when user touch
-(BOOL) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//event that starts when a finger touchs the screen
UITouch *touch = [touches anyObject];
CGPoint tmpLoc = [touch locationInView: [touch view]];
CGPoint location = [[Director sharedDirector] convertCoordinate:tmpLoc];

ball.position = location;
ballBody->p = location;
[flipper runAction:[RotateTo actionWithDuration:0.1f angle:60]];

cpBodySetAngle(testBody, 60);

cpvrotate(testBody->rot, cpv(100000,0));

return kEventHandled;
}

Пожалуйста, кто-нибудь скажи мне, где я не прав.

Спасибо.

1 Ответ

1 голос
/ 07 сентября 2009

Привет,

Проблема в том, что вы вращаете оба объекта (спрайт + тело) с помощью кода.

Вам нужно повернуть один, и дать другому объекту понять, что это произошло, чтобы он тоже мог это сделать.

Например, если вы перемещаете тело, метод обновления спрайтов должен выглядеть следующим образом:

void updateShapes(void* ptr, void* unused)
{
 cpShape* shape = (cpShape*)ptr;
 Sprite* sprite = shape->data;
 if(sprite)
 {
  cpBody* body = shape->body;
  [sprite setPosition:cpv(body->p.x, body->p.y)];
  [sprite setRotation: (float) CC_RADIANS_TO_DEGREES( -body->a )];
 }
}

Последняя строка кода обновляет ротацию. Это линия, которую вы пропускаете.

Я надеюсь, что это поможет вам или кому-то еще в будущем.

Удачи, cocos2d, приятель!

Йоханн Т.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...