我当前的项目包含一个重力模拟器,其中精灵根据他们在游戏场景中经历的力移动。
我的功能之一是允许移动的精灵在它们后面画一条线,这样你就可以看到它们走的路径。
此处显示:
然而,随着 Sprite 继续在屏幕上移动,FPS 开始下降。这可以在第二张图片中看到,自精灵第一次开始移动以来已经过去了一段时间。
在研究时,我发现其他人发布了类似的问题:
但是,在上面的问题中,答案的海报详细说明它(答案)是针对静态图像的,这不是我想要的,因为这条线会根据影响精灵路径的因素而实时变化,这是当我尝试实现一个函数以向旧行添加一条新行时反映了这一点,但它不起作用。该代码在这里
我在问是否有人可以帮助我找到一种方法来正确阻止来自所有绘制操作的这种持续的 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: 画线到 Sprite 的最新位置。
traceObject: 采用 SKPlanetNode(SKSpriteNode 的子类),并将其设置为在其后绘制一条线。
如果有人可以提出一种方法来做到这一点,并减少我不断积累的可怕开销,那就太棒了!