2015-10-04 3 views
-1
font.draw(batch, "Test", 50, 50); 

batch.draw(tex, 100, 100); 
(instead of) 
tex.draw(batch, 100, 100);//Not valid for LibGDX 

Для рисования шрифтов вы передаете пакет (SpriteBatch) в качестве параметра, а draw() - метод Font. Для рисования Текстуры (или TextureRegion) он отменяется. Я знаю, что Texture имеет собственный метод draw() для рисования Pixmap на самом , но я бы подумал, что переименование его в drawSelf() или drawPixmap() позволит Texture.draw() рисовать себя в соответствии с Font. привлечь().LibGDX draw() Несоответствие API

Я пропустил что-то очевидное, заставляя его так поступать?

+0

Кто-нибудь хочет сказать, почему это было приостановлено? Кажется, еще один разумный вопрос. – User

ответ

1

Вы ошибаетесь, когда думаете о Texture как такой же объект, как BitmapFont. BitmapFont - это объект с информацией о тексте, который находится в нем (так что текстовое значение, текстуры глифов, обертывание и т. Д.). Рисование текста объектом BitmapFont означает создание текстуры для рендеринга (путем настройки его из текстур глифа), а затем визуализировать его на экране.

Вы должны думать о BitmapFont как своего рода менеджера, когда Texture скорее как набор пикселей, которые можно нарисовать - конечно, это имеет некоторые дополнительная информация больше, чем просто пиксельная но готов оказать.

Конечно, есть сходство в ничья имена методов, но это довольно нормальная ситуация в программировании объектов. Думаю - просто все равно.

1

Простой способ подумать о том, что большинство типов доступных объектов (таких как BitmapFonts и Sprites) сложны. Они обрабатывают вычисления своих собственных данных, поскольку они содержат несколько спрайтов или данных размера/ориентации/цвета/положения, поэтому вы передаете SpriteBatch в свои методы draw, чтобы они могли обрабатывать передачу данных. Для SpriteBatch не было смысла (или быть очень объектно-ориентированным), чтобы знать, как получить данные из многих разных типов конкретных объектов.

Однако SpriteBatch знает, как обращаться с двумя простейшими объектами, текстурами и текстурными областями. Эти простые объекты не содержат никакой информации об их размере или ориентации или цвете, поэтому SpriteBatch может обрабатывать их и, при необходимости, вычислять дополнительные данные (поэтому SpriteBatch имеет так много перегруженных методов draw).

Для текстуры не имеет смысла знать, как рисовать себя с помощью SpriteBatch, потому что это специализированный прецедент. Texture (и TextureRegion) - это обобщенный объект, который предназначен для использования в любых целях (3D-наклейки, обертывание 3D-модели, пользовательские реализации на пользовательской сетке и т. Д.), Поэтому было бы неразумно знать все возможные способы его привлечения и осуществления.

Если вы хотите, чтобы текстура могла иметь свой собственный метод draw(batch), вы должны подклассифицировать его, чтобы добавить это. (Но уже есть класс Sprite, который это сделал.)

Один из «полученных», чтобы следить за тем, что Sprite расширяет TextureRegion, поэтому вы можете случайно позвонить spriteBatch.draw(sprite) и задаться вопросом, почему ваш спрайт не имеет размера или ориентирован правильно.

Смежные вопросы