2016-06-06 3 views
0

Я пишу карточную игру, используя часть учебного пособия по игре с простой карточкой xoppa. Однако теперь я сталкиваюсь с необычной проблемой при переворачивании карты. Вместо внесения показать другую сторону карты, он снова показывает заднюю сторону (но перевернутая): enter image description hereLibgdx mesh/material issue

Я создаю карты так же находится в учебнике xoppa с той лишь разницей, что я не использую атлас, но загружая все текстуры самостоятельно. (И это должно остаться, так как я загружаю текстуры динамически).

Что может быть неправильным? Кроме того, я не понимаю подробно, почему используются два спрайта для спины и спереди, а не материал. (Мне кажется, что текстура материала показана, а не наоборот)

ответ

1

Это маловероятно, что вы используете тот же код, потому что это специально проверяет, что текстуры одинаковы (assert(front.getTexture() == back.getTexture());).

Цитата из учебника:

Чтобы решить, что мы могли бы использовать ModelCache, который, так же, как SpriteBatch, сочетает в себе все карты в один делают вызов. Однако можно оптимизировать еще больше, не создавая сетку для каждой карты. Это возможно, потому что каждая карта использует ту же текстуру и, таким образом, тот же материал. Так же, как мы можем объединить переднюю и заднюю стороны каждой карты, из-за этого мы также можем объединить все карты из-за этого. Это также решило бы проблему размещения, которую мы должны были исправить.

Если вы хотите использовать две различные текстуры и не можете их упаковывать, вы не можете объединить эти вызовы рендеринга. Разумеется, вы могли бы объединить вызовы рендеринга, которые используют одну и ту же текстуру. Что, я думаю, в вашем случае означает, что вам нужно разбить карты на переднюю и заднюю вершины. Затем вы можете использовать две (или более) партии и комбинировать вызовы рендеринга, которые имеют одну и ту же текстуру.

Конечно, есть причина, почему используется атлас текстуры: производительность. Использование множества отдельных текстур приведет к появлению многих вызовов рендеринга, для чего требуется, чтобы GPU и CPU синхронизировались, а потому плохо для производительности. Если вы действительно не хотите использовать атлас текстуры, вы, в конце концов, заметите это. Таким образом, похоже, что вы пытаетесь решить неправильную проблему.

Очевидное решение состоит в том, чтобы просто наложить текстуры на атлас, чтобы вы действительно могли объединить вызовы рендеринга. Динамическое их загружение не означает, что вы не можете их упаковывать. См .: PixmapPacker.

+0

Это звучит разумно ... На данный момент я выбрал такой подход: для всех карт, показывающих спину, я использую ваш подход (stepa). Для нескольких карт, которые показывают фронт, я использую ваш подход к карте, которая может быть рендерируемой. На передней панели не будет более 20 карт. Однако теперь я сталкиваюсь с проблемой, что карты являются динамическими и включают в себя письменный текст (интернационализированный). Поэтому мне нужно создать текстуры для них на лету, и мне они нужны 600x800. Мой первый подход состоял в том, чтобы использовать FBO для этого, но затем они потеряются при потере контекста. Поэтому использование Pixmaps похоже на правильный подход. – mbauer

+0

Ох .. и если угол> 90 и <270 я бы просто переключил текстуру материала ... когда-то создавая его ... – mbauer

+0

Не пытайтесь решить проблемы, которых не существует. См. Http://badlogicgames.com/forum/viewtopic.php?f=11&t=20757&p=86106#p86095 – Xoppa