- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题
我以前从未制作过纸牌游戏,目前遇到了一些困难。
但是,我已经设法创建了套牌等。
-(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];
}
}
}
然后当 touchesBegan 时,它会在卡片上动画到屏幕中心,即“放置卡片”按钮的前期阶段。但是,我真的很难找到一种方法来跟踪按下的卡片。即,卡片是 Js、Ah、8c 还是任何它可能是显然可以使用的东西,但是 SKSpriteNode.name 已经被用于检测 touchesBegan。
我遇到的另一个问题是牌的放置时间。他们弄乱了 z-index。然而,解决这个问题的一个简单方法是继续增加 z-index,但这是最好的方法吗?我这里的例子说明了我在说什么。
最佳答案
我想说的是,您让它们进行渲染并向上移动,这是一个良好的开端。
不过,我的建议是查看 MVC( Model View Controller )方法来解决该问题。将玩过的牌的信息和玩家拥有的牌保存在一个单独的对象中,与您的 View 无关。这样当你触摸你的卡片时,你可以让你的 Controller 与你的模型一起识别它并决定接下来会发生什么。如果您仅在 SKSpriteNode 上中继并查看其名称而没有指向它的指针来与任何东西进行比较,那么将很难管理游戏。
至于排序你的 z 索引,你的模型会知道哪张牌首先被添加到你的手中,然后你的 Controller 可以通知 View 适当的位置和 z 索引。
至少我会考虑子类化 SKSpriteNode 并制作一个 CardSpriteNode 至少这样你就不必查看用于触摸的 sprite 名称,只需检查它是否是 CardSpriteNode。
if ([node isKindOfClass:[CardSpriteNode class]])
//handle touch logic if a card
MVC 是一个简单的概念,我会看一些关于它的文章。每个人对于可以看到什么的方法略有不同,但所有人都同意将信息分开。
希望对您有所帮助。
关于ios - 发牌、玩牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28518004/
问题 我以前从未制作过纸牌游戏,目前遇到了一些困难。 但是,我已经设法创建了套牌等。 -(NSMutableArray *)arrayWithDeck:(id)sender { [sender
我是一名优秀的程序员,十分优秀!