SKShapeNode选择X金额

时间:2015-06-19 03:40:20

标签: ios objective-c sprite-kit skshapenode

问题

我正在开发一些扑克软件〜纯粹是为了好玩。

现在谈到筹码,我有一场噩梦。一个定位它们,两个面额和三个选择我需要的那些!这对我目前的设计来说几乎是不可能的。

基本上,我画一个skshapenode给它命名和玩家名字。但是,这个芯片可以使用相同的名称绘制50次。

当我开始制作这些芯片时,我只能看到一面不可能的墙。

一旦我选择了正确的筹码用于电话会议或筹码等,我怎么才能开始写这个伪代码?

I require 2 large chips, 1 small chip and 2 medium chips {
    SKNode *node = [self childnodewithname:denomination, playername];

    runaction..
}

记住,我只需要占用筹码堆中20个中的2个。以及改变芯片的所有权......

这可能吗?或者我是否严重过度复杂化问题..?

1 个答案:

答案 0 :(得分:1)

您需要稍微修改一下您的解决方案。我会做这样的事情:

首先,将SKSpriteNode(或任何你想要的节点)子类化为芯片:

<强> Chip.h

@interface Chip : SKSpriteNode

@property (nonatomic, retain) NSString *player;
@property int denomination;

@end

<强> Chip.m

@implementation Chip
- (id)initWithColor:(UIColor *)color size:(CGSize)size
{
  if(self = [super initWithColor:color size:size])
  {
    self.name = @"chip";
  }

  return self;
}

@end

现在你已经有了可以合理列举和检查的东西。

在游戏场景中添加一堆筹码:

<强> GameScene.m

-(void)didMoveToView:(SKView *)view {
  for(int i = 0; i < 50; i++)
  {
    Chip *chip = [[Chip alloc] initWithColor:[SKColor greenColor]
                                        size:CGSizeMake(100.0, 100.0)];

    chip.player = @"some player";
    chip.denomination = 10;

    [self addChild:chip];
  }
}

然后是时候弹出一定数量的筹码了:

 -(void)popChipsFromPlayer:(NSString *)playerName
           ofDenomination:(int)denomination
            numberOfChips:(int)numChips
{
  __block int i;

  [self enumerateChildNodesWithName:@"chip"
                         usingBlock:^(SKNode *node, BOOL *stop) {
                           Chip *chip = (Chip *)node;
                           if(chip.denomination == denomination &&
                              [playerName isEqualToString:chip.player])
                           {
                             if(i==numChips)
                               return;

                             SKAction *moveUp = [SKAction moveByX:0.0
                                                                y:200.0
                                                         duration:3];

                             [chip runAction:moveUp];

                             i++;
                           }
                         }];
}

调用方法:

  [self popChipsFromPlayer:@"some player"
            ofDenomination:10
             numberOfChips:3];