Ios 什么最能代表角色SKNode或SKSpriteNode?

Ios 什么最能代表角色SKNode或SKSpriteNode?,ios,sprite-kit,Ios,Sprite Kit,目前,我的班级看起来像 @interface Character : SKNode @property (nonatomic, assign) CGFloat walkingSpeed; @实现特征 +(Character*)characterWithLevel:(BaseLevel *)level { return [[self alloc] initWithLevel:level]; } -(id)initWithLevel:(BaseLevel*)level { if

目前,我的班级看起来像

@interface Character : SKNode

@property (nonatomic, assign) CGFloat walkingSpeed;
@实现特征

+(Character*)characterWithLevel:(BaseLevel *)level {
  return [[self alloc] initWithLevel:level];
}

-(id)initWithLevel:(BaseLevel*)level {

    if (self = [super init]) {
        _sprite = [SKSpriteNode spriteNodeWithImageNamed:level.heroTexture];
        _sprite.position = level.heroStartingPosition;

        [self addChild:_sprite];
        [level addChild:self];
    }

    return self;
}
问题是,当对级别中的角色节点运行操作时,由于SpriteNode是正在设置动画的节点,所以它不会执行任何操作。我想知道你们怎么解决这些问题

行动范例:

触控事件:

CGPoint location = [[touches anyObject] locationInNode:self];
[character moveToPosition:location];
内部字符类

-(void)move {
    [self runAction:[SKAction repeatActionForever:[SKAction animateWithTextures:[self walkFrames]
                                                                   timePerFrame:0.1f
                                                                         resize:NO
                                                                        restore:YES]] withKey:@"moving"];
    return;
}
这没什么用。我能让它工作的唯一方法是,若角色是SKSpriteNode的一个子类。运行针对self.sprite的操作似乎也有点骇人,节点本身也不会移动


有什么建议吗?

为什么使用self.sprite看起来很不方便?这是完全正确的

事实上,从OOP的角度来看,SKNode聚合其他可见节点是更通用的方法

例如,如果玩家拿起一个使他看不见(或非常透明)的电源,周围只有几块闪闪发光的东西,那么它将允许你隐藏精灵,而不是使粒子发射器可见

要实现这一点,您需要将发射器作为角色节点的子节点。如果玩家精灵所在的角色节点不可见,则不能仅使精灵不可见,因为这也会影响子发射器


因此,从长远来看,最好聚合视图(可见节点),而不是将其子类化。将角色SKNode视为一个或多个视图(其子视图如精灵、发射器、标签等)的视图控制器。

非常好的解释。。。但是,当执行移动操作时,我必须在精灵或节点上执行吗?移动精灵不会导致它在节点中消失吗?我按照你建议的方式做了,它按照我的意图做了:)谢谢你。但是,我在调用多个触摸事件(取消/删除节点中的所有操作)时遇到崩溃。虽然崩溃没有任何意义,但我已经在我的原始帖子Better上附加了一个屏幕截图,以便就此提出一个新问题