В моем текущем проекте есть симулятор гравитации, в котором спрайты движутся в соответствии с силами, с которыми они сталкиваются в игровой сцене.
Одна из моих функций заключается в том, что я позволяю движущимся спрайтам рисовать линию позади себя, чтобы вы могли видеть, какими путями они идут.
Здесь показано:
Однако по мере того, как Sprite продолжает движение по экрану, FPS начинает падать. Это можно увидеть на втором изображении, где прошло некоторое время с тех пор, как спрайт впервые начал свое движение.
При исследовании я обнаружил, что другие люди писали с похожими проблемами:
Несколько skshapenode в одном розыгрыше?
Однако в приведенном выше вопросе плакат с ответом подробно описал, что он (ответ) предназначался для статического изображения, чего я не хочу, потому что эта строка будет меняться в реальном времени в зависимости от того, что влияет на путь спрайтов, это отразилось, когда я попытался реализовать функцию для добавления новой строки к старой, которая не сработала. Этот код здесь
Я спрашиваю, может ли кто-нибудь помочь мне найти способ правильно остановить это постоянное падение FPS, которое происходит из-за всех операций рисования. Мой текущий код отрисовки состоит из двух функций.
-(void)updateDrawPath:(CGPoint)a B:(CGPoint)b
{
CGPathAddLineToPoint(_lineToDraw, NULL, b.x, b.y);
_lineNode.path = _lineToDraw;
}
-(void)traceObject:(SKPlanetNode *)p
{
_lineToDraw = CGPathCreateMutable();
CGPathMoveToPoint((_lineToDraw), NULL, p.position.x, p.position.y);
_lineNode = [SKShapeNode node];
_lineNode.path = _lineToDraw;
_lineNode.strokeColor = [SKColor whiteColor];
_lineNode.antialiased = YES;
_lineNode.lineWidth = 3;
[self addChild:_lineNode];
}
updateDrawPath: Рисует линию до последней позиции спрайта.
traceObject: Берет SKPlanetNode (подкласс SKSpriteNode) и настраивает его так, чтобы после него рисовалась линия.
Если бы кто-нибудь мог предложить способ сделать это, а также уменьшить ужасные накладные расходы, которые я продолжаю накапливать, это было бы фантастически!