Если вы можете получить родительский вид. Может быть, эта ссылка , в которой определено совпадение для получения первого потомка представления, может дать вам некоторую подсказку.
public static Matcher firstChildOf(final Matcher parentMatcher) {
return new TypeSafeMatcher() {
@Override
public void describeTo(Description description) {
description.appendText("with first child view of type parentMatcher");
}
@Override
public boolean matchesSafely(View view) {
if (!(view.getParent() instanceof ViewGroup)) {
return parentMatcher.matches(view.getParent());
}
ViewGroup group = (ViewGroup) view.getParent();
return parentMatcher.matches(view.getParent()) && group.getChildAt(0).equals(view);
}
};
}
В очень редких случаях необходимо использовать несколько пакетов SpriteBatches. Один из примеров, который я часто вижу, - это ситуация, в которой вы хотите применить разные состояния постобработки / рендеринга к разным наборам спрайтов, что требует отдельного пакета SpriteBatch для каждого набора.
Обычно считается хорошей практикой использовать только один пакет, если это вообще возможно, поскольку рисование как можно большего количества вещей в одном пакете намного эффективнее, чем распределение работы по нескольким пакетам. Кроме того, поскольку вы можете управлять порядком сортировки только в пределах одного пакета SpriteBatch, это может затруднить (или сделать невозможным) контроль глубины между спрайтами из разных пакетов.
Короче говоря: есть мыслимые ситуации, в которых вы можете захотеть сделать это , но это'
В случаях с DrawableGameComponents может быть проще иметь пакет SpriteBatch для каждого компонента DrawableGameComponent вместо того, чтобы пытаться передать его.
Здесь - хороший пример того, когда использовать более 1 SpriteBatch (блог Шона - как обычно - окончательный источник).
SpriteBatch на самом деле не работает любой рисунок, пока вы не вызовете метод End. Это означает, что вы можете начать несколько перекрывающихся пакетов с различными настройками, рисовать спрайты в любом порядке, используя любую комбинацию экземпляров пакета, и контролировать, в каком порядке все содержимое каждого пакета будет отрисовано, путем упорядочивания ваших вызовов End.
Обратите внимание, что этот пример посвящен оптимизации производительности для сцены с альфа-смешиванием и спрайтами, отсортированными по глубине. Когда (или, скорее, , если ) вы столкнетесь с проблемами производительности, можно кое-что получить, используя несколько пакетов SpriteBatches. А пока лучше не усложнять.