Двойное матричное преобразование DirectX? - PullRequest
0 голосов
/ 16 мая 2011

Я создаю 2D игру.Вид - прямо над моим персонажем, когда он стоит в центре экрана, а мир движется (и вращается) вокруг него.Я делаю это, вызывая D3DXMatrixTransformation2D и помещая (постоянную) позицию моего персонажа и вращение его.

Это хорошо работает для моего персонажа и фона.Для пуль и врагов, хотя это работает, это не то, что я хочу.Я хочу, чтобы враги вращались вокруг своей оси вместе с общей осью моего персонажа.В настоящее время, когда я поворачиваюсь на 180 градусов, противник переворачивается вверх ногами, так же, как фон.Это нормально, но я хочу, чтобы он мог повернуться, чтобы выстрелить в меня (или повернуть в той же степени, чтобы мы всегда смотрели вверх; я еще не решил, но я верю, что это та же проблема).

Пули - это та же история.Моей первой конструкцией пули был длинный тощий луч энергетического типа.Независимо от того, в каком направлении я стрелял, он всегда был бы направлен на «север», даже если он двигался в другом (правильном) направлении.Я пока обошел эту проблему, создав круглую пулю, но она не решает реальную проблему.

Так есть ли способ вызвать D3DXMatrixTransformation2D дважды?Я пытался сделать это с одной матрицей и одним вызовом SetTransform (), двумя матрицами и двумя вызовами SetTransform (), а также с одной матрицей и двумя вызовами SetTransform (), но это либо ничего не меняет, либо делает пулю/ Враг текстурирует центр вращения и не распознает мое вращение.Я могу предоставить некоторый код, если это необходимо, но в коде нет ничего особенного, что создает мне эту проблему.Спасибо!

РЕДАКТИРОВАТЬ: Вот код, который я сейчас имею, но он, кажется, работает так же, как и раньше:

    D3DXVECTOR2* center =  new D3DXVECTOR2(position.x,position.y);

D3DXMatrixTransformation2D(&mat,NULL,0.0,NULL, center, this->rotation,NULL);
sprite->SetTransform(&this->mat);
D3DXMatrixTransformation2D(&this->mat, NULL, NULL, NULL, &this->spriteCenter, *player::getInstance()->getRotation(), NULL);

sprite->SetTransform(&this->mat);

sprite->Draw(bullet, NULL, NULL, &this->position, 0xFFFFFFFF);

Переменная "position" - это переменная D3DXVECTOR3, которая являетсяположение экрана текущего объекта маркера.«Это-> вращение» - это вращение пули.Переменная spriteCenter - это позиция центра текстуры игрока, которая равна (408, 316, 0).

...