在 Sprite Kit 场景中创建带有重复图像的栏 - iOS

Posted

技术标签:

【中文标题】在 Sprite Kit 场景中创建带有重复图像的栏 - iOS【英文标题】:Create bar with repeating image in Sprite Kit scene - iOS 【发布时间】:2014-02-22 14:27:14 【问题描述】:

我正在使用 Xcode 中的 Sprite Kit 模板开发 ios 游戏。

在我的实际游戏场景中,我需要添加一个顶部栏,它应该使用在 x 轴上重复直到屏幕结束的模式。

我试过了:

topBar = [[SKSpriteNode alloc] init];
topBar.color = [UIColor colorWithPatternImage:[UIImage imageNamed:@"topBar"]];
topBar.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMaxY(self.frame));
[self addChild:topBar];

除非我向 UIColor 提供颜色,而不是图像,否则这不起作用。我在这个论坛上读到,显然 SKSpriteNode 不支持 colorWithPatternImage。

所以我的下一个尝试是添加一个 UIView 并在视图的背景上使用 colorWithPatternImage。但是,当我使用颜色而不是图像时,这不会返回任何内容,甚至不会返回 whiteColor:

topBar = [[UIView alloc] initWithFrame:CGRectMake(CGRectGetMidX(self.frame), CGRectGetMaxY(self.frame), self.frame.size.width, 40)];
topBar.layer.backgroundColor = [UIColor whiteColor].CGColor;

[self.view addSubview:topBar];

知道正确的方法是什么吗?

【问题讨论】:

【参考方案1】:

SKSpriteNode 不支持带有图案或从图案生成的 UIColor,只能应用纯色。

改为使用图案图像来创建具有所需图案的精灵。如果您将图案图像设为灰度,您可以使用 SKSpriteNode 的 colorcolorBlendFactor 属性将图案图像/精灵的颜色更改为您需要的任何颜色和任何颜色亮度。

【讨论】:

我了解 SKSpriteNode 无法支持。你建议用我想重复的图像创建 1 个精灵节点?.. 在这种情况下,由于我的图像是 2px 宽,我如何让它在宽度上填满屏幕?我还考虑过使用“for”循环创建带有图像的精灵节点,但这不会导致效率问题吗? 您可以将图案图像放大,或者通过创建多个精灵来重复它。可能两者都是为了平衡精灵的数量与纹理的大小,但如果有疑问,只需使用全尺寸图像,因为它最容易使用。 天啊。我不敢相信它是如此简单:) 我认为如果我的图像是 2px 并且我为其分配了更大的宽度,那么它看起来质量很差,就像在创建网站时发生的那样。显然情况并非如此。修复它的代码:topBar = [[SKSpriteNode alloc] initWithImageNamed:@"topBar"]; topBar.size = CGSizeMake(self.frame.size.width, 80); topBar.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMaxY(self.frame)); [self addChild:topBar]; 谢谢你的帮助。

以上是关于在 Sprite Kit 场景中创建带有重复图像的栏 - iOS的主要内容,如果未能解决你的问题,请参考以下文章

在 Sprite Kit 中组合多个 SKScene

Sprite Kit 如何更新按钮上的图像?

iOS 如何在 Sprite Kit 游戏中创建音频淡入/淡出效果?

Sprite Kit 场景编辑器 GameScene.sks 场景宽度和高度

iOS7 + Sprite Kit:如果我正在改变场景,如何保持一个计时器一直显示?

Sprite Kit:很多精灵 (1000+),带有位 Blitting