Иерархия слоев Cocos2d и порядок прорисовки - PullRequest
1 голос
/ 30 августа 2011

Я застрял с проблемой иерархии слоев в cocos2d.

У меня есть персонаж со спрайтами для его частей тела. Родительский спрайт тела - это туловище. Тогда у меня есть руки и голова, которые являются детьми этого, тогда локти и руки - дети рук. Пока это работает очень хорошо: я поворачиваю локоть, и рука поворачивается вместе с ним, как на настоящей марионетке.

Проблема в том, что когда я хочу, чтобы это было волнообразно, руки оказываются за головой, так как голова имеет более высокий z-порядок, чем руки (которые являются родителями рук).

Итак, я добавил еще одну руку как дитя туловища и включил ее непрозрачность ON и OFF в зависимости от того, нужна ли мне рука выше или позади головы. Однако другая рука не является дочерней по отношению к руке, она является дочерней по отношению к туловищу и не вращается, когда рука вращается. Итак, мне нужно расположить его вручную в каждом кадре.

Итак, мой вопрос: возможно ли родить спрайт одного узла, чтобы унаследовать его перевод, но нарисовать его выше другого указанного спрайта? (как и над другим родным братом своего родителя)

Изменение z-порядка рук и головы не подлежит сомнению, поскольку анимация экспортируется из другой программы, которая не поддерживает эти параметры.

Спасибо!

Ответы [ 4 ]

2 голосов
/ 30 августа 2011

Как экспортируется анимация из другой программы? Я считаю, что это будет проблемой. Если бы я сделал это, я бы использовал слой Z. Еще лучше, посмотрите Атласы Sprite для создания вашей анимации.

Я думаю, вы слишком много делаете для создания анимации. С помощью Атласа вы можете создать анимацию для фигуры, поднимая руки и размахивая ими. а затем просто вызвать анимацию на атласе спрайта.

1 голос
/ 31 августа 2011

Я решил проблему s.same в своем приложении, добавив в модель дополнительный невидимый спрайт торса.в этом случае вы можете привязать одну руку и голову к невидимому туловищу, а другую - ко второму туловищу

0 голосов
/ 02 сентября 2011

Также убедитесь, что вы запускаете EAGLView с включенной глубиной

EAGLView *glView = [EAGLView viewWithFrame: [window bounds]
                               pixelFormat: kEAGLColorFormatRGBA8
                               depthFormat: GL_DEPTH_COMPONENT16_OES];
0 голосов
/ 02 сентября 2011

Я думаю, что нашел решение своей проблемы.Это свойство vertexZ узла.

/** The real openGL Z vertex.
 Differences between openGL Z vertex and cocos2d Z order:
   - OpenGL Z modifies the Z vertex, and not the Z order in the relation between parent-children
   - OpenGL Z might require to set 2D projection
   - cocos2d Z order works OK if all the nodes uses the same openGL Z vertex. eg: vertexZ = 0
 @warning: Use it at your own risk since it might break the cocos2d parent-children z order
 @since v0.8
 */

@property (nonatomic,readwrite) float vertexZ;


В этой статье описывается, как его использовать

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