В интернете очень мало информации об этом движке на русском языке. Предлагаю в этой теме решать различные проблемы, вопросы и пр., связанные с кокосом.
У меня, к примеру, возникла такая ситуация:
Я пишу 2d игру и использую background.
CCSprite *background = [CCSprite spriteWithFile: @"background.png"];
background.position = ccp(240, 160);
[self addChild:background];
Все работает без тормозов (я использую физику, анимацию и пр.), но стоит мне добавить еще спрайт
немаленького размера, к примеру 150 Х 150,
CCSprite *background2 = [CCSprite spriteWithFile: @"background2.png"];
background2.position = ccp(240, 160);
[self addChild:background2];
начинаются тормоза, даже если в программе ввобще больше ничего нет, кроме этих двух спрайтов (пробовал).
Если кто знает, помогите советом.
Тормозить ничего не должно. Тестировалось устройстве?
Смени движок - cocos жуткий ацтой
Smrdis, да на устройстве. Писалось на оригинальном маке. Версия движка cocos2d 0.99.2
Smrdis, введите что-то типа "cocos2d large background" в Google, и вы увидете, что не только у меня такая проблема.
http://www.cocos2d-iphone.org/forum/topic/6858
http://www.cocos2d-iphone.org/forum/topic/5819
http://www.cocos2d-iphone.org/forum/topic/3331
Интересно, то, что движок нормально справляется со своими обязанностями - у меня много анимированных спрайтов, Chipmunk физика, логика и пр. Все работает нормально, на дисплее отображаются 60 FPS; так почему же всего два неанимированных спрайта, но большего разрешения, дают тормоза?!
Diman3d
Новые факты, background большой. Насколько большой?
Ну один background по размерам экрана - 480 Х 320. Вот с одним все замечательно. Стоит добавить еще спрайт, нарисованный поверх background'а, размерами, скажем 280 Х 300, начинаются проблемы. При всём при этом спрайты статичны и не анимированны.
Забыл сказать, формат PNG; есть мысль сконвентировать в PVR и попробовать, но мне кажется причина в другом.
Не думаю, что тут дело в кокосе.
Всем привет.
Я тут пишу приложение на cocos2d.
И возникла проблема: Я использую форму и view на ней. При повороте интерфейса стандартным способом поворачивается view и CCDirector на нем тоже поворачивается но мне нужно чтоб он продолжал оставаться не повернутым и заполнял весь экран iPhone. Следовательно при повороте view нужно повернуть область прорисовки в обратном направлении. Тут вроди говорят о похожем но както очень сложно:http://ohminteractive.se/2010/07/15/cocos2d-and-orientation-madness/
Стоит добавить что я так и не смог раскусить openGL и по этому выбрал cocos2d. И теперь похоже пришел в тупик. Может кто сталкивался с подобным.
//кнопка 1 CCSprite *normalItem = [CCSprite spriteWithFile: @"кнопка_1.png"]; CCSprite *selectedItem = [CCSprite spriteWithFile: @"нажатая_кнопка_1.png"]; CCMenuItemSprite *button = [CCMenuItemSprite itemFromNormalSprite:normalItem selectedSprite:selectedItem target:self selector:@selector(startGame:)]; CCMenu *item = [CCMenu menuWithItems: button, nil]; [item setPosition:ccp( 365, 284)]; [self addChild: item]; //кнопка2 normalItem = [CCSprite spriteWithFile: @"кнопка_2.png"]; selectedItem = [CCSprite spriteWithFile: @"нажатая_кнопка_2.png"]; CCMenuItemSprite *button2 = [CCMenuItemSprite itemFromNormalSprite:normalItem selectedSprite:selectedItem target:self selector:nil]; CCMenu *item2 = [CCMenu menuWithItems: button2, nil]; [item2 setPosition:ccp( 350, 241)]; [self addChild: item2];
Все замечательно, если спрайт имеет прямоугольную форму, так как детект происходит по ректу спрайта. Вопрос: как сделать нажатие кнопки, если спрайт неправильной формы; то есть - кнопка нажимается, только когда тач по ее изображению, а не по ректу.
Diman3d
> Все замечательно, если спрайт имеет прямоугольную форму, так как детект
> происходит по ректу спрайта. Вопрос: как сделать нажатие кнопки, если спрайт
> неправильной формы; то есть - кнопка нажимается, только когда тач по ее
> изображению, а не по ректу.
Пронаследовать от стандартной свою кнопку, у которой переопределить метод определения хит-теста.
Smrdis, я так понимаю вот этод метод переопределять:
-(CCMenuItem *) itemForTouch: ( UITouch *) touch { CGPoint touchLocation = [touch locationInView: [touch view]]; touchLocation = [[CCDirector sharedDirector] convertToGL: touchLocation]; for( CCMenuItem* item in children_ ) { CGPoint local = [item convertToNodeSpace:touchLocation]; CGRect r = [item rect]; r.origin = CGPointZero; if( CGRectContainsPoint( r, local ) ) return item; } return nil; }
Думаю добавить еще одно условие; если (рект содержит точку ) и (пиксель под точкой не прозрачный), то кнопка нажата.
Как в кокосе определить альфу пикселя?
Diman3d
Что нибудь вроде получить текстуру, залочить ее, получить пиксель, проверить альфу, разлочить текстуру.
К сожалению, нет под рукой мака, могу посмотреть точно в воскресенье, если горько нужно.
Да нет, не горит) Пишу меню, и впринципе оно работает нормально, там просто кнопки немного косые; кому не показывал, никто не заметил, что тач неточный. Но все же решил сделать по нормальному, как найду решение, то добавлю соответствующий код.
Тема в архиве.