我正在开发一个os x/ iOS填字游戏,它使用SKLabelNode在SKNode子类上显示字谜字母。
所以每个字母都有SKNode.SKLabelNode.如果不使用SKLabelNode,抽签计数在6-8之间。通过使用SKLabelNode,他们可以达到现场儿童的数量,几乎可以达到100个。
我现在正在寻找一种避免这种情况的方法,并想出了将SKLabelNode栅格化为纹理的想法,但是这并不降低抽签的数量,因为仍然有很多不同的纹理。
我现在的想法是对这些SKNode-Subclasses进行栅格化,并将纹理放入纹理地图集。
所以问题是,是否有可能在运行时创建一个纹理地图集?如果单个纹理发生变化,该怎么办?有没有可能在地图集里换一个纹理,或者我必须重建它?
也许有一个“最好的方法”来处理很多不同的SKLabelNodes!?
发布于 2015-06-25 12:20:30
我会选择一个字母类,它是SKSpriteNode的子类,还有一个叫做字母的地图集。这样,你就可以在一次抽签中画出所有的字母(在这种情况下,100张抽签是不必要的)。或者您甚至不需要创建一个SKSpriteNode...You子类就可以这样做:
SKSpriteNode *letterSprite = [SKSpriteNode spriteNodeWithTexture:[atlas textureNamed:[NSString stringWithFormat:@"%@",character]]];这种方法的局限性在于字母的大小是预先确定的.我怀疑你在填字游戏中是否需要不同大小的字母。如果你需要改变字母的大小,你仍然可以缩放它们,但我想一些质量损失理论上会因为缩放位图而发生。我在理论上说,因为在大多数情况下,质量损失是不明显的。
下面是我的TextNode的一个例子,它解析给定的字符串(在我的例子中是数字),并创建单次传递(而不是对每个数字使用SKLabelNode )的every。地图集中的图像应该命名为a@2x.png、b@2x.png,或者如果使用数字1@2x.png、2@2x.png等。
static const float kCharacterDistance = 6.0f;
#import "TextNode.h"
@interface TextNode()
@property (nonatomic,strong) NSMutableArray* characters;
@end
@implementation TextNode
-(instancetype)initWithPosition:(CGPoint)position andText:(NSString*)text{
if(self =[super init]){
self.characters = [[NSMutableArray alloc] initWithCapacity:[text length]];
SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:@"numbers"];
for(NSUInteger i =0; i < [text length];i++){
NSString *character = [text substringWithRange:NSMakeRange(i, 1)];
SKSpriteNode *characterSprite = [SKSpriteNode spriteNodeWithTexture:[atlas textureNamed:[NSString stringWithFormat:@"%@",character]]];
characterSprite.color = [SKColor yellowColor];
characterSprite.colorBlendFactor = 1.0f;
characterSprite.position = CGPointMake(i*kCharacterDistance,0);
[self.characters addObject:characterSprite];
[self addChild:characterSprite];
}
self.position = position;
}
return self;
}
@end希望这有帮助,并将给你基本的想法,如何绘制所有的字母在一次抽签。注意我是如何给字母着色的。在纹理地图集中,图像是白色的,但我很容易将它们着色到想要的颜色。
发布于 2015-06-25 12:45:41
只要你的FPS是好的,不要担心其他任何事情。另外,请记住,Xcode自动在运行时创建纹理地图集,所以这不是您自己必须做的事情。
您可以设置skView.ignoresSiblingOrder = YES;以提高性能。
https://stackoverflow.com/questions/31042493
复制相似问题