2013-06-20 72 views
1

我正在嘗試使用帶有CCLabelTTF的.otf字體...帶有CCLabelTTF的OTF字體

它不起作用。所述字體適用於本地UILabel。任何解決方法?將UILabel呈現給CCSprite-ish?將OTF轉換爲TTF ...似乎太麻煩了。

  • 編輯。我寫了這個。我認爲它有效。將看到它是如何去。
  • 編輯2.最酷的是,如果您使用顏色UIColor.whiteColor創建標籤,則可以使用mylabel.color = ccc3(0, 0, 0);將顏色設置爲黑色或任何其他顏色。然後,您可以自由使用着色等CCTintTo

Spriteuifont.h文本的顏色:

#import "CCSprite.h" 

@interface Spriteuifont : CCSprite 
+(Spriteuifont*)spriteuifontWithText:(NSString*)text font:(UIFont*)font color:(UIColor*)color; 
@property (nonatomic, retain) NSString* string; 
@end 

Spriteuifont.m:

#import "Spriteuifont.h" 

#import "UIView+additions.h" 

@interface Spriteuifont() 
@property (nonatomic, retain) NSString* _string; 
@property (nonatomic, retain) UIFont* _font; 
@property (nonatomic, retain) UIColor* _color; 
@end 



@implementation Spriteuifont 
@synthesize _string, _font, _color; // retain 
-(void)dealloc { 
    self._string = nil; 
    self._font = nil; 
    self._color = nil; 
    [super dealloc]; 
} 
+(Spriteuifont*)spriteuifontWithText:(NSString*)text font:(UIFont*)font color:(UIColor*)color { 
    Spriteuifont* s = [[[self alloc] initWithText:text font:font color:color] autorelease]; 
    return s; 
} 
-(id)initWithText:(NSString*)text font:(UIFont*)font color:(UIColor*)color { 
    self = [super init]; 
    if (self) { 
     self._font = font; 
     self._color = color; 
     self.string = text; 
    } 
    return self; 
} 
-(void)refresh { 
    const CGSize SIZE = [self._string sizeWithFont:self._font]; 
    UILabel* labelTestfont = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, SIZE.width, SIZE.height)] autorelease]; 
    labelTestfont.font = self._font; 
    labelTestfont.backgroundColor = UIColor.clearColor; 
    labelTestfont.opaque = NO; 
    labelTestfont.text = self._string; 
    labelTestfont.textColor = self._color; 
    UIImage* img = [labelTestfont image]; 
    // GL_ONE or GL_ONE_MINUS_SRC_ALPHA ? 
    CCTexture2D* aa = [[[CCTexture2D alloc] initWithCGImage:img.CGImage resolutionType:GL_ONE] autorelease]; 
    [self setTexture:aa]; 
    [self setTextureRect:labelTestfont.frame]; 
} 
-(void)setString:(NSString *)string { 
    self._string = string; 
    [self refresh]; 
} 
-(NSString*)string { 
    return self._string; 
} 
@end 

用法:

Spriteuifont* label = [Spriteuifont spriteuifontWithText:@"0" font:[UIFont fontWithName:@"myfontwhatever" size:16] color:UIColor.blackColor]; 

Btw UIView類別.m文件包含此:

#import <QuartzCore/QuartzCore.h> 
@implementation UIView (additions) 
-(UIImage*)image { 
    UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.opaque, 0.0); 
    [self.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage* img = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return img; 
} 
@end 
+0

ccabelttf顧名思義只支持ttf字體 – LearnCocos2D

+0

現在'otf'支持存在 – fnc12

回答

0

有在目前的cocos2d-iphone OTF字體的支持。我現在只是使用本機iOS支持,通​​過CCTexture2D渲染內容,就像問題中所述。也許對錶現不好,但在我的情況下,這並不重要。