【问题标题】:Sprite doesn't regenerate in Sprite KitSprite 不会在 Sprite Kit 中重新生成
【发布时间】:2014-07-13 22:25:19
【问题描述】:

我试图让精灵在它离开屏幕后重新生成,但没有运气。

      #import "MyScene.h"

    @implementation MyScene

    -(id)initWithSize:(CGSize)size {    
      if (self = [super initWithSize:size]) {
      /* Setup your scene here */

    self.backgroundColor = [SKColor colorWithRed:0.05 green:0.15 blue:0.2 alpha:1.0];

    SKSpriteNode *pole = [SKSpriteNode spriteNodeWithImageNamed:(@"pole")];
    bamboo.position = CGPointMake (30, 0);
    bamboo.size = CGSizeMake(15, 1136);



    [self addChild: pole];

    SKSpriteNode *pole2 = [SKSpriteNode spriteNodeWithImageNamed:(@"pole")];
    pole2.position = CGPointMake (290, 0);
    pole2.size = CGSizeMake(15, 1136);

    [self addChild: pole2];


    SKSpriteNode *spike = [SKSpriteNode spriteNodeWithImageNamed:(@"spike")];
    spike.position = CGPointMake (45, 600);
    spike.size = CGSizeMake(15, 75);

    SKAction *moveDown = [SKAction moveByX:(0) y:(-10) duration:(.05)];

    [spike runAction:[SKAction repeatActionForever:moveDown]];

    [self addChild: spike];


  }
  return self;
 }


 -(void)update:(CFTimeInterval)currentTime {
/* Called before each frame is rendered */
if (_spike.position.y < 250) {


    _spike.position = CGPointMake(45, 600);
 }

}

@end

可能是什么问题? Xcode 没有给我一个错误,“尖峰”节点只是从屏幕上移开并且不会自行重置。我已经改变了条件中的值,但同样的事情发生了。这就像条件被忽略了。

【问题讨论】:

  • 您有条件地检查尖峰的位置,只会在您创建尖峰时的这段代码中发生,而不是每一帧。你明白吗?
  • @prototypical 这很有道理。如果我希望它更新每一帧,我会在哪里放置条件?我把它放在 currentTime 更新方法中没有用。
  • 是的,你可以把它当作更新方法,它确实有效。您可能错误地实现了它。查看当前答案,应该可以。我还建议您在学习的早期就了解调试器,因为它可以为您节省大量时间。

标签: xcode sprite-kit sprite


【解决方案1】:

你应该做的是在update方法中检查Sprite的位置,你可以试试这个;

-(id)initWithSize:(CGSize)size {    
    if (self = [super initWithSize:size]) {
        /* Setup your scene here */

    _spike = [SKSpriteNode spriteNodeWithImageNamed:(@"spike")];
    _spike.position = CGPointMake (45, 600);
    _spike.size = CGSizeMake(15, 75);

    SKAction *moveDown = [SKAction moveByX:(0) y:(-10) duration:(.05)];

    [_spike runAction:[SKAction repeatActionForever:moveDown]];

    [self addChild:_spike];

    }
    return self;
}

-(void)update:(CFTimeInterval)currentTime {
    /* Called before each frame is rendered */

    if (_spike.position.y < 250) {

        _spike.position = CGPointMake(45, 600);
    }

}

【讨论】:

  • 尽管我认为这行得通,但事实并非如此。知道为什么吗?
  • 哦,你是不是在“if (self = [super initWithSize:size])”里面写了你的代码,除了这段代码对我有用,你能告诉我你是什么类型的错误从 xcode 获取
  • 对不起,我应该更清楚。它没有给我一个错误,但精灵节点只是从屏幕上移开,自行移除,并且不会重新出现。
  • 你能把你所有的代码都放进去编辑你的帖子吗,这样我可以更好地帮助你
  • 知道了 :),你必须在任何地方使用相同的 _spikes,我编辑了我的解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多