Я создал платформер-бегуновую игру, используя cocos2d-x 3.1. В этой игре экран прокручивается бесконечно, и некоторые препятствия появляются спереди на плеере, и игрок может вскакивать, чтобы избежать препятствий.
Я разработал игру на Windows и не использовал SpriteBatchNode
- просто простые Sprites
и эффекты частиц. В окнах все было в порядке, но когда я портировал Android, некоторые спрайты (большие и маленькие, движущиеся и в покое) начали мерцать случайно. Сначала я думал, что это порядок Z, который изменяется случайным образом, но я удалил большую часть спрайтов с экрана и увидел, что они просто моргают. Интересно, что я не мог найти общего свойства между мигающими спрайтами, но те, которые мигают всегда, мигают, а те, которые не мигают (нормальное поведение), всегда в порядке.
Я мог избавиться от этой неприятной ситуации, используя SpriteBatchNode
для всех спрайтов, которые мигали. Но не мог понять, что происходит, в чем причина. Существуют ли какие-либо предположения, что может быть причиной такого поведения?
Мне все еще нужно использовать какой-то простой Sprite
, чтобы иметь возможность добавлять к ним эффекты частиц. Это невозможно сделать с помощью SpriteBatchNodes
и с помощью Sprite
, которые создаются с помощью SpriteBatchNodes
следующим образом: Sprite::createWithSpriteFrameName("my.png")
.
Извините, что я не разделяю код. Я просто не знаю, что поделиться - проект огромен. Но если вам нужны какие-то конкретные детали, я мог бы поделиться, конечно.
@GameDeveloper Я наконец смог воспроизвести проблему случайного мигания. Насколько я понимаю, это проблема порядка Z. Я воспроизвел его следующим образом. Я создаю пустой спрайт, и в тот спрайт, который я создаю, и addChild то же изображение. При нажатии экрана я добавляю еще один спрайт в том же положении, что и краном. После 16-го нажатия каждый кран меняет некоторые из Z-ордеров уже добавленных спрайтов. Дело в том, что каждый спрайт, который я добавляю, не указываю более высокий порядок Z. Но я не могу понять, какое магическое число - это 16. Кстати, я также реализовал отмену функциональности, когда я удаляю последний добавленный спрайт. Если я откажусь иметь не более 16 спрайтов, все в порядке. Как только я снова превышу 16, начинается рандомизация порядка Z.
SpriteBatchNode
действительно поможет. На форумах Cocos2d-x недавно состоялось обсуждениеSpriteBatchNode
и Android.