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

前端之家收集整理的这篇文章主要介绍了ios – 什么最能代表角色SKNode或SKSpriteNode?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
现在,我的班级看起来像
  1. @interface Character : SKNode
  2.  
  3. @property (nonatomic,assign) CGFloat walkingSpeed;

@implementation Character

  1. +(Character*)characterWithLevel:(BaseLevel *)level {
  2. return [[self alloc] initWithLevel:level];
  3. }
  4.  
  5. -(id)initWithLevel:(BaseLevel*)level {
  6.  
  7. if (self = [super init]) {
  8. _sprite = [SKSpriteNode spriteNodeWithImageNamed:level.heroTexture];
  9. _sprite.position = level.heroStartingPosition;
  10.  
  11. [self addChild:_sprite];
  12. [level addChild:self];
  13. }
  14.  
  15. return self;
  16. }

问题是,当对级别中的Character节点运行操作时,由于SpriteNode是动画的,因此它不会做任何事情.我想知道你们怎么会遇到这些问题?

行动举例:

触摸事件:

  1. CGPoint location = [[touches anyObject] locationInNode:self];
  2. [character moveToPosition:location];

里面的角色类

  1. -(void)move {
  2. [self runAction:[SKAction repeatActionForever:[SKAction animateWithTextures:[self walkFrames]
  3. timePerFrame:0.1f
  4. resize:NO
  5. restore:YES]] withKey:@"moving"];
  6. return;
  7. }

这没有任何作用.只有我可以让它工作的方法是如果Character是SKSpriteNode的子类.对self.sprite运行操作似乎也有点hacky并且节点本身不会移动.

有什么建议?

解决方法

为什么使用self.sprite看起来很hacky?这完全有效.

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

例如,它允许你隐藏精灵,而是让一个粒子发射器可见,如果玩家拿起一个让他看不见(或非常透明)的通电,只有几个闪闪发光的位置.

要实现这一点,您将有一个发射器作为字符节点的子节点.如果玩家精灵所在的角色节点,则无法仅将精灵变为隐形,因为这也会影响子发射器.

因此,从长远来看,最好聚合视图(可见节点)而不是子类化它们.可以将Character SKNode视为一个或多个视图的视图控制器(其子像sprite,发射器,标签等).

猜你在找的iOS相关文章