卡片交易,玩

时间:2015-02-14 17:06:05

标签: ios objective-c sprite-kit skspritenode

问题

我以前从未做过纸牌游戏,而且我现在遇到了一些困难。

但是,我设法创建了这样的套牌。

-(NSMutableArray *)arrayWithDeck:(id)sender
{
    [sender removeAllObjects];
    NSArray *faces = [[NSArray alloc] initWithObjects:@"A",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"J",@"Q",@"K", nil];
    NSArray *suits = [[NSArray alloc] initWithObjects:@"h",@"d",@"c",@"s", nil];
    for (int i = 0; i < 52; i++) {
        NSString *cardToAdd = [NSString stringWithFormat:@"%@%@", faces[i % 13], suits[i / 13]];
        [sender addObject:cardToAdd];
    }
    return sender;
}

然后将卡片交给球员(目前只交给一名球员)

-(void) dealPlayersWithPlayers: (int) players withDealtCards: (int) dealt {
    if (players == 2){
        __block float add = 0;
        for (int i = 0; i < dealt; i++) {
            add = add + ((self.frame.size.width / 100) * 10);
            NSString *imageName = [NSString stringWithFormat:@"%@", deck[i]];
            NSString *bundle = [[NSBundle mainBundle] pathForResource:imageName ofType:@"png"];
            UIImage *image = [[UIImage alloc] initWithContentsOfFile:bundle];
            SKTexture *texture = [SKTexture textureWithImage:image];
            cardDisplay = [SKSpriteNode spriteNodeWithTexture:texture];
            cardDisplay.size = CGSizeMake(104, 144);
            cardDisplay.anchorPoint = CGPointMake(0.5, 0.5);
            cardDisplay.position = CGPointMake(-self.frame.size.width/2.5 + add, -218);
            cardDisplay.zPosition = 1;
            cardDisplay.userInteractionEnabled = NO;
            cardDisplay.name = [NSString stringWithFormat:@"card"];
            [self addChild:cardDisplay];
        }
    }
}

然后当触摸开始时,在卡片上,它会激活到屏幕的中心,即“预置牌”的前期阶段。按钮。但是,我真的很想找到一种方法来跟踪卡的压力。即,是卡Js,Ah,8c或其他任何可能的,因此它显然可以使用,但是SKSpriteNode.name已被用于touchesBegan上的检测。

我遇到的另一个问题是卡片的铺设时间。他们搞乱了z指数。但是,一个简单的解决办法就是继续增加z-index,但这是最好的方法吗?我在这里的例子显示了我正在谈论的内容。

enter image description here enter image description here

1 个答案:

答案 0 :(得分:3)

我会说你让它们渲染并向上移动你的事实是一个很好的开始。

我的建议是查看MVC(模型视图控制器)方法来解决问题。保持所播放卡片的信息以及玩家对卡片的信息,使其与您的视图中的单独对象保持一致。这样,当您触摸卡时,您可以让控制器与您的模型一起工作以识别它并确定接下来会发生什么。如果你只转发SKSpriteNode并查看它的名字而没有指向它的指针来与任何东西进行比较,那么管理游戏将非常困难。

至于对z索引进行排序,您的模型会知道您手中首先添加了哪张卡,然后您的控制器可以通知视图适当的位置和z索引。

至少我会考虑继承SKSpriteNode并至少制作一个CardSpriteNode,然后你不必查看精灵的精灵名称,只需检查它是否是一个CardSpriteNode。

if ([node isKindOfClass:[CardSpriteNode class]])
//handle touch logic if a card

MVC是一个简单的概念,我会看一些关于它的文章。每个人都有一个稍微不同的方法,可以看到什么,但所有人都同意保持信息分开。

希望有所帮助。

相关问题