我当前的项目包含一个重力模拟器,精灵根据他们在游戏场景中所经历的力量移动。
我的一个功能涉及允许移动精灵在它们后面画一条线,这样你就可以看到它们采用的路径。
这里显示:
然而,随着雪碧继续在屏幕周围移动,FPS开始潜水。这可以在第二张图片中看到,自精灵第一次开始移动以来已经过了一段时间。
在研究时,我发现其他人发布了类似的问题:
Multiple skshapenode in one draw?
然而,在上面的问题中,答案的海报详细说明它(答案)是针对静态图像,这不是我想要的东西,因为这个line会根据sprite路径的影响实时变化,当我尝试实现一个函数来添加一个新的Line来处理那个没有工作的旧行时,就会反映这一点。那Code here
我问是否有人可以帮助我找到一种方法来正确阻止来自所有绘制操作的持续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的子类),并将其设置为在其后面绘制一条线。
如果有人可以建议一种方法来做到这一点,并减少我不断积累的可怕开销,那将是太棒了!
答案 0 :(得分:-1)
一些建议: