Sprite kit 绘制SKSpriteNode的轨迹线

Sprite kit 绘制SKSpriteNode的轨迹线,sprite-kit,Sprite Kit,我有一个自定义的LineBall类,如下所示: @implementation LineBall -(instancetype) init { self = [super initWithImageNamed:LINE_BALL_IMAGE]; self.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:self.size.width/2]; self.physicsBody.categoryBitMask =

我有一个自定义的LineBall类,如下所示:

@implementation LineBall

-(instancetype) init {

    self = [super initWithImageNamed:LINE_BALL_IMAGE];

    self.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:self.size.width/2];
    self.physicsBody.categoryBitMask = BBPhysicsCategoryLineBall;

    self.name = @"lineBall";

    self.physicsBody.friction = 0.0f;
    self.physicsBody.restitution = 1.0f;
    self.physicsBody.linearDamping = 0.0f;
    self.physicsBody.allowsRotation = NO;
    self.physicsBody.dynamic = YES;

    return self;
}

稍后,我将其添加到游戏场景中,并按预期工作。问题是现在我想在线球移动的任何地方画线。我该怎么做

这里有一种方法可以在移动的球后面画出轨迹

didSimulatePhysics
方法中:

  • 将球的位置随时间存储在可变数组中。在索引=0处插入
  • 如果元素数超过最大轨迹大小,请删除最早(最后)的数组元素
  • 通过使用
    CGPathAddLineToPoint
    在数组元素上循环以连接每个点,创建一个可变的
    CGPath
  • 从场景中删除旧轨迹(如果存在)
  • 使用
    shapeNodeWithPath
  • SKShapeNode
    添加到场景中

  • 你考虑过在你的球上附加一个粒子发射器吗?是的,但我并不真的想要一个粒子发射器。我真的想画一条线,其他物体可以碰撞。你是说像Tron光循环这样的东西吗?我不知道那是什么?基本上我想画一条精灵移动的路径。显然,你需要一个起点和终点来画一条线。因此,在你的情况下,唯一的解决办法可能是画一个小正方形、矩形或圆形,当你的球移动时,它们会组成一条线。注意这种方法。沙皮诺德是巨大的资源猪。更优雅的方法是看一看SKEmitterNode。@ThomasJohannesmeyer你可能是对的,但考虑到形状节点与发射器节点相比的复杂性,这是违反直觉的。但是额外的一点工作是值得的,因为SKShapeNode对性能有巨大的影响。尤其是当您将它们用于自定义路径时。(顺便说一句,我没有否决这个答案。)另外:如果你最终使用了大量的SKShapeNodes(有时你不得不这么做),确保你使用一个池来回收它们。像这样?