2016-07-12 3 views
0

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

var coverageSize = CGSizeMake(8000,8000); 
    var textureSize = CGRectMake(0, 0, 100, 100); 
    var backgroundCGImage = [UIImage imageNamed:@"bg"].CGImage; //this line returns several errors. 
    UIGraphicsBeginImageContext(CGSizeMake(coverageSize.width, coverageSize.height)); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextDrawTiledImage(context, textureSize, backgroundCGImage); 
    UIImage *tiledBackground = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    SKTexture *backgroundTexture = [SKTexture textureWithCGImage:tiledBackground.CGImage]; 
    SKSpriteNode *backgroundTiles = [SKSpriteNode spriteNodeWithTexture:backgroundTexture]; 
    backgroundTiles.yScale = -1; 
    backgroundTiles.position = CGPointMake(0,0); 
    [self addChild:backgroundTiles]; 
+0

У вас нет текстуры, что большой, самый большой 4096x4096 на более новых устройствах, 2048x2048 на более мелких устройствах – Knight0fDragon

+0

Я знаю, вот почему я пытаюсь сшить его с меньшими текстурами. Имея меньшие текстуры, объединившиеся для создания 8000x8000, поднимут эту проблему, нет? – BARIIIIIIICODE

+0

Я знаю, что пишу ответ – Knight0fDragon

ответ

1

один из способов сделать плитки являются создать узел, используемый для рисования плитки

Вы рисуете количество плиток, которое соответствует экрану в эту специальную плитку

использование:

var texture = self.view!.textureFromNode(drawingTile, crop: CGRectMake(-column.width, -row.height, self.frame.width + column.width , self.frame.height + row.height)); 

Чтобы преобразовать этот узел в структуру , удалите все узлы из узла рисования

добавьте новый узел в узел рисования, используя эту текстуру.

Теперь у нас есть наш фон в одном узле.

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

+0

Я не уверен, что понимаю. используйте 'var bgimage: SKNode!', затем 'var texture = self.view! .textureFromNode (bgimage, crop: CGRectMake (-column.width, -row.height, self.frame.width + column.width, self.frame. height + row.height)); 'затем добавление узла в сцену' self.addchild (world) '?? или это что-то отсутствует? – BARIIIIIIICODE

+0

Я предполагаю, что мир - это ваш фон? – Knight0fDragon

+0

Да, это ..... – BARIIIIIIICODE

Смежные вопросы