2013-05-09 2 views
1

Я делаю 2D-игру для iOS, используя Kobold2D/cocos2D. Теперь я решил попробовать и добавить некоторые 3d-здания (думаю, что GTA1/2 все 2D, кроме зданий).Можно ли смешивать обычный OpenGL ES 2.0 с Kobol2D/cocos2d на iOS?

Я знаю, как работает OpenGL, но я получаю всевозможные ошибки при попытке реализовать это.

Мои вопросы: Предотвращает ли использование cocos2d обычные вызовы OpenGL? Или это нормально работает, если все сделано правильно? Каждый учебник/пример, который я нашел, использует некоторую оболочку cocos2d для смешивания opengl и cocos.

Если вы сделали это раньше (смешайте свой собственный код OpenGL ES 2.0 с cocos2d), можете ли вы указать мне в правильном направлении?

ответ

1

Пока вы используете cocos2d/Kobold2D v2.x вы можете использовать OpenGL ES 2.0. Вы можете переопределить/реализовать любой метод класса CCNode -(void) draw и взломать его.

Существует только одно предостережение: вы должны предпочесть использовать cocos2d с использованием методов «ccStuffStuff» (например, ccDrawColor) вместо методов OpenGL ES, потому что они переносят некоторые вещи за кулисы по соображениям производительности и совместимости. Проверьте примеры существующих кодов чертежа cocos2d. Одним из таких примеров будет GLES-Render.cpp из проектов cocos2d + Box2D или файл ccDrawingPrimitives.m.

+0

Бах, что этот парень знает о Cocos2D ... ПОЛНОСТЬЮ РАБОТАЕТ, ха-ха. Посмотрите его книгу, у нее есть отличная информация по этому предмету, и между ним, Риком и Рэем они спрашивают или ссылаются. ;-) –

+0

Отлично, спасибо большое! Прекрасная книга кстати;) – user1033619

0

Вы можете просто просто отобразить другой вид oOenGL поверх вашего предыдущего, хотя, если вы хотите сложить объекты внутри другого движка (cocos2d), вы говорите о добавлении в существующий CCLayer, который сам по себе является другим слоем OpenGL. Вот где у вас будут проблемы. То, что вы можете сделать, это сэндвич 3 взгляда вместе, чтобы получить эффект. (1 CCLayer ниже вашего представления OpenGL и одного CCLayer выше этого). Затем вы можете просто оставить цвет фона прозрачным на своих двух верхних видах, и он будет выглядеть так, как если бы они были в одном представлении.

UIColor *color = [UIColor clearColor]; 
CGColorRef layerBackgroundColor = [color CGColor]; 
[subLayer setBackgroundColor:layerBackgroundColor];