iPhoneФорум

Cocos2d (проблемы и решения)

Страницы: 1 2 Следующая »
#0
17:12, 15 июля 2010

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

У меня, к примеру, возникла такая ситуация:
Я пишу 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];
начинаются тормоза, даже если в программе ввобще больше ничего нет, кроме этих двух спрайтов (пробовал).
Если кто знает, помогите советом.

#1
22:48, 15 июля 2010

Тормозить ничего не должно. Тестировалось устройстве?

#2
23:00, 15 июля 2010

Смени движок - cocos жуткий ацтой

#3
23:38, 15 июля 2010

Smrdis, да на устройстве. Писалось на оригинальном маке. Версия движка cocos2d 0.99.2

#4
0:10, 16 июля 2010

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; так почему же всего два неанимированных спрайта, но большего разрешения, дают тормоза?!

#5
9:01, 16 июля 2010

Diman3d
Новые факты, background большой. Насколько большой?

#6
12:35, 16 июля 2010

Ну один background по размерам экрана - 480 Х 320. Вот с одним все замечательно. Стоит добавить еще спрайт, нарисованный поверх background'а, размерами, скажем 280 Х 300, начинаются проблемы. При всём при этом спрайты статичны и не анимированны.

#7
12:38, 16 июля 2010

Забыл сказать, формат PNG; есть мысль сконвентировать в PVR и попробовать, но мне кажется причина в другом.

#8
21:15, 16 июля 2010

Не думаю, что тут дело в кокосе.

#9
12:16, 19 июля 2010

Всем привет.
Я тут пишу приложение на cocos2d.
И возникла проблема: Я использую форму и view на ней. При повороте интерфейса стандартным способом поворачивается view и CCDirector на нем тоже поворачивается но мне нужно чтоб он продолжал оставаться не повернутым и заполнял весь экран iPhone. Следовательно при повороте view нужно повернуть область прорисовки в обратном направлении. Тут вроди говорят о похожем но както очень сложно:http://ohminteractive.se/2010/07/15/cocos2d-and-orientation-madness/
Стоит добавить что я так и не смог раскусить openGL и по этому выбрал cocos2d. И теперь похоже пришел в тупик. Может кто сталкивался с подобным.

#10
13:42, 26 авг 2010
    //кнопка 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];

Все замечательно, если спрайт имеет прямоугольную форму, так как детект происходит по ректу спрайта. Вопрос: как сделать нажатие кнопки, если спрайт неправильной формы; то есть - кнопка нажимается, только когда тач по ее изображению, а не по ректу.

#11
15:52, 26 авг 2010

Diman3d
> Все замечательно, если спрайт имеет прямоугольную форму, так как детект
> происходит по ректу спрайта. Вопрос: как сделать нажатие кнопки, если спрайт
> неправильной формы; то есть - кнопка нажимается, только когда тач по ее
> изображению, а не по ректу.
Пронаследовать от стандартной свою кнопку, у которой переопределить метод определения хит-теста.

#12
17:52, 27 авг 2010

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; 
 } 
 

Думаю добавить еще одно условие; если (рект содержит точку ) и (пиксель под точкой не прозрачный), то кнопка нажата.
Как в кокосе определить альфу пикселя?

#13
18:48, 27 авг 2010

Diman3d
Что нибудь вроде получить текстуру, залочить ее, получить пиксель, проверить альфу, разлочить текстуру.
К сожалению, нет под рукой мака, могу посмотреть точно в воскресенье, если горько нужно.

#14
19:12, 27 авг 2010

Да нет, не горит) Пишу меню, и впринципе оно работает нормально, там просто кнопки немного косые; кому не показывал, никто не заметил, что тач неточный. Но все же решил сделать по нормальному, как найду решение, то добавлю соответствующий код.

Страницы: 1 2 Следующая »
iPhoneФорум

Тема в архиве.