- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
留在 SpriteKit 中,是否可以使用 TextKit 提供的更强大的控制创建更多“艺术”文本,然后(以某种方式)将这些字符串转换为图像以便它们可以用作 SKSpriteNode?
我问是因为我想做一些更严肃的字距调整……更大的间距,以及其他一些 SKLabels 无法实现的东西,但它们是 TextKit 的一部分,但我希望它们能够一旦我完成让它们看起来像我想要的方式,就成为位图。
但我找不到将 A TextKit 转换为图像的方法。
最佳答案
您可以在 CGContext
中绘制文本,然后从中创建纹理并将该纹理分配给 SKSpriteNode
。
这是来自 this GitHub project 的示例:
class ASAttributedLabelNode: SKSpriteNode {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
init(size: CGSize) {
super.init(texture: nil, color: UIColor.clear, size: size)
}
var attributedString: NSAttributedString! {
didSet {
draw()
}
}
func draw() {
guard let attrStr = attributedString else {
texture = nil
return
}
let scaleFactor = UIScreen.main.scale
let colorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo = CGImageAlphaInfo.premultipliedLast.rawValue
guard let context = CGContext(data: nil, width: Int(size.width * scaleFactor), height: Int(size.height * scaleFactor), bitsPerComponent: 8, bytesPerRow: Int(size.width * scaleFactor) * 4, space: colorSpace, bitmapInfo: bitmapInfo) else {
return
}
context.scaleBy(x: scaleFactor, y: scaleFactor)
context.concatenate(CGAffineTransform(a: 1, b: 0, c: 0, d: -1, tx: 0, ty: size.height))
UIGraphicsPushContext(context)
let strHeight = attrStr.boundingRect(with: size, options: .usesLineFragmentOrigin, context: nil).height
let yOffset = (size.height - strHeight) / 2.0
attrStr.draw(with: CGRect(x: 0, y: yOffset, width: size.width, height: strHeight), options: .usesLineFragmentOrigin, context: nil)
if let imageRef = context.makeImage() {
texture = SKTexture(cgImage: imageRef)
} else {
texture = nil
}
UIGraphicsPopContext()
}
}
关于swift - SKLabel 避免,使用 TextKit 而不是创建 SKTexture?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40472026/
我正在使用 sprite 工具包快速制作一个飞扬的鸟类游戏。游戏运行良好,但我试图找到一种方法来对游戏进行评分,因此我设置了一个变量和 SKLabel,每当管道大约穿过屏幕一半时,它就会添加到自身。但
所以我只是在 xcode 中乱搞,我遇到了一个问题。我创建了一个系统,每当用户触摸屏幕上的任何位置时,它都会在用户触摸的位置创建一个随机颜色的 SKLabel。我怎么能让创建的 SKLabel 在 5
我想知道是否有人可以告诉我如何执行以下操作。我使用 sprite kit 创建了一个游戏。游戏开始,它会显示标题屏幕和一个标签,上面写着“点击开始”。我想要发生的是,当用户点击屏幕时,标签不会突然消失
如何为场景中 SKLabel 的位置设置动画? 我已经尝试了以下方法,但它似乎不起作用: [SKView animateWithDuration:0.3
好的,首先我有一个成就变量,它是从这样的结构定义的: struct Achieve { var node: SKSpriteNode? var aName:String = "" var aDes:S
我正在尝试为我的游戏启动一个菜单屏幕,我创建了一个应该位于屏幕中间的 SKLabel。但问题是它没有显示出来。仅显示我的背景。我不知道从哪里开始,我认为这可能与 z 位置有关,但我不确定。这是我的代码
我正在创建一个游戏,我已经创建了一个整数来跟踪杀死的敌人数量,但是我无法让 UI 上的 sklabel 更新。不管有多少敌人整数一直显示0。以下是我尝试过的一些方法 class GameScene:
我想为 Label 文本的外观设置动画,使其看起来像是正在输入。我想知道在 SWIFT 中是否有一种相对简单的方法来做到这一点。谢谢。 最佳答案 试试这个: class GameScene : SKS
我想知道在带有 SpriteKit 的 Swift 编程语言中,SKLabelNode 的指定初始化器是什么? 最佳答案 init(fontNamed:)是指定的初始值设定项。便利初始化器有 conv
为了在 SpriteKit 中创建一个按钮,我创建了一个带有 SKShapeNode 的圆角矩形,然后在其顶部放置了一个 SKLabel。 看起来像这样: 我想让标签下的背景随着它下面的内容而改变。所
我的目标:将 Achievements 类的 amount 变量加一,然后更新文本,使其显示在名为“AmountLabel”的 SKLabelNode 上 所以我有一个 SKNode 的子类来保护我的
我正在尝试使用 SpriteKit 制作一个小游戏。 (适用于 iOS 10 的 Xcode 8 和 Swift 3) 我想让用户在触摸暂停文本标签时暂停游戏。当他这样做时,我想暂停游戏并将标签文本更
留在 SpriteKit 中,是否可以使用 TextKit 提供的更强大的控制创建更多“艺术”文本,然后(以某种方式)将这些字符串转换为图像以便它们可以用作 SKSpriteNode? 我问是因为我想
我想创建这样的效果: http://d.pr/v/4oGc 详细信息如下: 在带有 SKLabelNode 的 sprite-kit 中。所以基本上我希望标签能够“飞进来”。我的第一个想法是使用 SK
我是一名优秀的程序员,十分优秀!