2015-06-12 3 views
3

Я сделал игру в плитке. Прямо сейчас я испытываю стресс, тестируя возможности моего телефона, увеличивая количество узлов в сцене. Там есть материал, основанный на физике, движение AI, День & Ночная система, частицы появляются здесь & & много других вещей, идущих под капотом для моих сцен. Что я хочу знать, есть разница в производительности при использовании 16x16 плит, что у меня есть сейчас, а не с использованием 32x32 плит? Эти плитки - это просто изображение, которое было добавлено к сцене; у них нет никаких физических тел или чего-то еще такого. У них есть свойства, которые я на них накладывал при создании карты в Tiled, но я не думаю, что это влияет на производительность. Каждая карта имеет несколько слоев (фон, растительность, точки появления, здания, иногда еще несколько). Вот фрагмент кода, как плитки оказываются за 1 такого слоя:Sprite Kit обеспечивает производительность с использованием плиток 16x16 против 32x32 плиток?

 if([map propertiesForGid:tileGid][@"shrub"]) 
     { 
      SKSpriteNode *tile = [layer tileAtCoord:coord]; 
      tile.name = @"vegShrub"; 
      [self addChild:tile]; 
     } 
     else if([map propertiesForGid:tileGid][@"tree"]) 
     { 
      SKNode *tile = [[Breakable alloc] initWithWhole:[atlas textureNamed:@"tree"] broken:[atlas textureNamed:@"tree-stump"]]; 
      tile.position = [self pointForCoord:coord]; 
      [self addChild:tile]; 
      [layer removeTileAtCoord:coord]; 
     } 

Если я использую 32x32 плитки над моей текущей 16x16 плитки, Я как-то освободить память или «разгрузить» от системы?

+0

Возможно, это не повлияет, поскольку вы будете рисовать одинаковое количество пикселей (fillrate) , Это может иметь значение, если вы перечисляете фрагменты спрайтов каждый кадр и неэффективны в этом цикле рендеринга, или вы делаете сумасшедшие вещи для каждого спрайта в каждом кадре. – LearnCocos2D

ответ

4

С картами плитки каждая плитка обычно представлена ​​SKSpriteNode. Так что, если ваша карта 320 x 320, и вы используете 32x32 плитки, вы получите 100 узлов. Использование 16x16 плит с одним и тем же размером карты приведет к 400 узлам. Чем больше узлов, тем больше нагрузка.

С другой стороны, вы должны изучить получение SKAToolKit для разбора карт плитки в вашем приложении. Это открытый источник, бесплатный и имеет массу встроенных функций, таких как автоматическое сопровождение, мини-карта и т. Д.

+1

Я думаю, что ваша логика прочная, и я согласен с вами. Что касается ссылки, которую вы приложили ... HOLY SH * T! Это именно то, что мне нужно и больше! Большое спасибо. – Krekin

+1

@ Крекин - Рад помочь. – sangony

+2

Обратите внимание, что 'SKATiledMap' на самом деле также делает« SKSpriteNode »для каждой плитки, что является очень неэффективным способом рендеринга карты. Если вам нужна более высокая производительность (и более полная поддержка функций Tiled), вы должны попробовать TilemapKit - http://tilemapkit.com/ –