Если пустой указатель никогда не указывает, что ошибка тогда просто возвращает пустой указатель.
, Если пустой указатель является всегда ошибкой тогда, выдают исключение.
, Если пустой указатель является иногда исключением тогда, кодируют две стандартных программы. Одна стандартная программа выдает исключение, и другой булева тестовая задача, которая возвращает объект в выходном параметре, и стандартная программа возвращает false, если объект не был найден.
трудно неправильно использовать стандартную программу Попытки. Очень легко забыть проверять на пустой указатель.
Поэтому, когда пустой указатель является ошибкой, Вы просто пишете
object o = FindObject();
, Когда пустой указатель не является ошибкой, можно кодировать что-то как
if (TryFindObject(out object o)
// Do something with o
else
// o was not found
Вы обеспокоены накладными расходами, которые требуются для преобразования модели (в данном случае квадрата) из координат модели в мировые координаты, когда у вас много моделей. Это кажется очевидной оптимизацией для статических моделей.
Если вы построите вершины квадрата в мировых координатах, то, конечно, это будет быстрее, поскольку каждый квадрат позволит избежать дополнительных затрат на эти три функции (glPushMatrix, glPopMatrix и glTranslatef), так как нет необходимости переводить из модели в мировые координаты во время рендеринга. Я понятия не имею, насколько это будет быстрее, я подозреваю, что это не будет огромной оптимизацией, и вы потеряете модульность сохранения квадратов в координатах модели: что, если в будущем вы решите, что хотите, чтобы эти квадраты можно было перемещать ? Будет намного сложнее, если ты сохраняют свои вершины в мировых координатах.
Короче говоря, это компромисс:
Я думаю, единственный способ узнать правильное решение - это выполнить и профилировать. Я знаю, что вы сказали, что еще не написали этого, но я подозреваю, что независимо от того, находятся ли ваши квадраты в координатах модели или мира, это не будет иметь большого значения - и если это так, я не могу представить архитектуру, которую вы могли бы создайте там, где было бы сложно переключить ваши квадраты с координат модели на мировые или наоборот.
Удачи вам и ваших приключений в разработке игр для iPhone!
Вы также можете рассмотреть возможность использования статического изображения и его прокрутки вместо рисования каждого отдельного блока пола, преобразования его положения и т. Д.
Если вы используете только квадраты с выравниванием по экрану, возможно, будет проще использовать расширение OES Draw Texture . Затем вы можете использовать одну текстуру для хранения всех ваших игровых «спрайтов». Сначала укажите прямоугольник обрезки, задав параметр TexParameter GL_TEXTURE_CROP_RECT_OES
. Это граница спрайта внутри большей текстуры. Для рендеринга вызовите glDrawTexiOES
, передав желаемое положение и размер в координатах области просмотра.
int rect[4] = {0, 0, 16, 16};
glBindTexture(GL_TEXTURE_2D, sprites);
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, rect);
glDrawTexiOES(x, y, z, width, height);
Это расширение доступно не на всех устройствах, но отлично работает на iPhone.