openGL ES имеет лучшую производительность, чем Базовая Анимация и UIKit когда дело доходит до очень анимированных пользовательских интерфейсов?

Какая разница? => Много.

Я думаю, версия this используется для включения инкапсуляции, то есть сокрытия данных. Это помогает манипулировать закрытыми переменными.

Давайте рассмотрим следующий пример:

var AdultPerson = function() {

  var age;

  this.setAge = function(val) {
    // some housekeeping
    age = val >= 18 && val;
  };

  this.getAge = function() {
    return age;
  };

  this.isValid = function() {
    return !!age;
  };
};

Теперь, структура prototype может применяться следующим образом:

Разные взрослые имеют разный возраст, но все взрослые получить те же права.
Итак, мы добавим его, используя прототип, а не этот.

AdultPerson.prototype.getRights = function() {
  // Should be valid
  return this.isValid() && ['Booze', 'Drive'];
};

Давайте посмотрим на реализацию сейчас.

var p1 = new AdultPerson;
p1.setAge(12); // ( age = false )
console.log(p1.getRights()); // false ( Kid alert! )
p1.setAge(19); // ( age = 19 )
console.log(p1.getRights()); // ['Booze', 'Drive'] ( Welcome AdultPerson )

var p2 = new AdultPerson;
p2.setAge(45);    
console.log(p2.getRights()); // The same getRights() method, *** not a new copy of it ***

Надеюсь, это поможет.

7
задан genpfault 18 June 2010 в 20:56
поделиться

3 ответа

Теоретически OpenGL должен быть самым быстрым API на устройстве просто потому, что он ближе всего к оборудованию. (Кто-нибудь, пожалуйста, поправьте меня, если я ошибаюсь.) В OpenGL вы можете делать несколько хитрых приемов, которые немного улучшат вашу производительность - вы можете рисовать спрайты партиями, вы можете использовать точечные спрайты, вы можете попробовать сжать текстуры и т. д.

С другой стороны, вы очень близко подходите к аппаратному обеспечению, и не остается много абстракции, по крайней мере, по сравнению с Core Animation. Вам приходится иметь дело с текстурами, проекциями, матрицами, не являющимися степенями двойки, вы должны сами писать код анимации и т. Д. Есть много мест, где вы можете пойти не так, как надо, и серьезно снизить производительность вместо того, чтобы улучшить ее.

Что мне нравится в OpenGL, так это то, что он кроссплатформенный. По OpenGL есть много ресурсов, есть много возможностей для улучшения. Если вы хотите писать игры и у вас есть время изучить OpenGL, сделайте это. Обернуть основы OpenGL в проект ООП не так сложно, и в конечном итоге вы получите больше места для улучшения производительности. Хорошим местом для начала является движок Cocos 2D для iPhone .


(Отказ от ответственности: я немного знаю об OpenGL и ничего не знаю о Core Animation. Я написал две 2D-игры для iPhone, используя OpenGL.)

По OpenGL есть много ресурсов, есть много возможностей для улучшения. Если вы хотите писать игры и у вас есть время изучить OpenGL, сделайте это. Обернуть основы OpenGL в проект ООП не так сложно, и в конечном итоге вы получите больше места для улучшения производительности. Хорошим местом для начала является движок Cocos 2D для iPhone .


(Отказ от ответственности: я немного знаю об OpenGL и ничего не знаю о Core Animation. Я написал две 2D-игры для iPhone, используя OpenGL.)

По OpenGL есть много ресурсов, есть много возможностей для улучшения. Если вы хотите писать игры и у вас есть время изучить OpenGL, сделайте это. Обернуть основы OpenGL в проект ООП не так сложно, и в конечном итоге вы получите больше места для улучшения производительности. Хорошим местом для начала является движок Cocos 2D для iPhone .


(Отказ от ответственности: я немного знаю об OpenGL и ничего не знаю о Core Animation. Я написал две 2D-игры для iPhone, используя OpenGL.)

Я немного разбираюсь в OpenGL и почти ничего не знаю о Core Animation. Я написал две 2D-игры для iPhone с использованием OpenGL.)

Я немного разбираюсь в OpenGL и почти ничего не знаю о Core Animation. Я написал две 2D-игры для iPhone с использованием OpenGL.)

5
ответ дан 6 December 2019 в 21:18
поделиться

В прошлом месяце я задавал те же вопросы людям на WWDC, и ответ был определенно утвердительным - если вы потратите время на использование OpenGL на низком уровне, вы получите лучшую производительность для 2D.

4
ответ дан 6 December 2019 в 21:18
поделиться

Это зависит от того, что вы делаете и на какое устройство нацелены. Если вы делаете вещи, которые выиграют от программируемого графического конвейера и нацелены на iPhone 3GS, вы можете увидеть некоторые преимущества просто потому, что эта функциональность не предоставляется через CoreAnimation, поэтому вам придется делать это каким-то странным образом (манипулировать изображения и т. д.). Аппаратное обеспечение iPhone 3G не имеет программируемых шейдеров, поэтому даже если ваши эффекты могут быть выражены в терминах шейдеров, переход на OpenGL не принесет этого преимущества на старых телефонах.

Если все, что вы делаете, это перемещаете, вращаете и масштабируете 2D-поверхности, тогда CoreAnimation даст очень похожую производительность на OpenGL, немного лучше или хуже в зависимости от того, как ваши данные попадают в слои и т. Д.

3
ответ дан 6 December 2019 в 21:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: