【问题标题】:Drawing Trail Lines for SKSpriteNode为 SKSpriteNode 绘制轨迹线
【发布时间】:2015-02-22 03:45:04
【问题描述】:

我有一个自定义的 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;
}

稍后我将它添加到 GameScene 并按预期工作。问题是现在我想在 LineBall 行进的任何地方画线。我怎样才能做到这一点?

【问题讨论】:

  • 您是否考虑过将粒子发射器附加到您的球上?
  • 是的,但我真的不想要粒子发射器。我实际上想画一条其他物体可以碰撞的线。
  • 你的意思是像 Tron 光循环这样的东西?
  • 我不知道那是什么?基本上我想画一条精灵移动的路径。
  • 显然你需要一个起点和终点来画一条线。因此,在您的情况下,唯一的解决方案可能是绘制小正方形、矩形或圆形,它们会在您的球移动时组成一条线。

标签: sprite-kit


【解决方案1】:

这是在移动的球后面绘制轨迹的一种方法。

didSimulatePhysics 方法中:

  1. 将球在一段时间内的位置存储在一个可变数组中。在索引 = 0 处插入。
  2. 如果元素数量超过最大跟踪大小,则删除最旧(最后一个)数组元素
  3. 通过使用CGPathAddLineToPoint 循环数组的元素来连接每个点,从而创建一个可变的CGPath
  4. 如果存在,则从场景中移除旧路径
  5. 通过使用shapeNodeWithPath 从路径创建SKShapeNode 来创建球的轨迹
  6. SKShapeNode 添加到场景中

【讨论】:

  • 谨慎使用这种方法。 SKShapeNodes 是巨大的 资源猪。一种更优雅的方法是查看 SKEmitterNode。
  • @ThomasJohannesmeyer 你可能是对的,但考虑到形状节点与发射器节点相比的复杂性,这是违反直觉的。
  • 但是一点点额外的工作是值得的,因为 SKShapeNode 具有巨大的性能影响。特别是如果您将它们与自定义路径一起使用。 sartak.org/2014/03/skshapenode-you-are-dead-to-me.htmlstackoverflow.com/questions/24553245/…(顺便说一句,我没有否决这个答案。)
  • 另外:如果您最终使用了大量 SKShapeNode(有时您必须这样做),请确保使用池回收它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
  • 2020-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多