print 打印文字
print
类型: MethodDeclaration
所属类: DialogBoxElement
定义位置: ui.ts
描述
打印文字
返回值
类型: void
源代码
位置: 第 3792 行
private print(): void {
let count = Infinity
if (this.interval !== 0) {
this.elapsed += Time.rawDeltaTime
// 如果存在打印间隔,计算当前帧可打印字符数量
if (count = Math.floor(this.elapsed / this.interval)) {
this.elapsed -= this.interval * count
} else {
return
}
}
const printer = this.printer!
const content = printer.content
const printWidth = printer.getScaledPrintWidth()
const printHeight = printer.getScaledPrintHeight()
const letterSpacing = printer.getScaledLetterSpacing()
const charWidths = Printer.charWidths
const length = content.length
let charIndex = 0
let charWidth = 0
// 创建指令列表
printer.commands = []
// 更新字体
printer.updateFont()
// 按顺序检查字符
while (printer.index < length) {
// 匹配标签(在数量检查之前解析掉尾部标签)
const char = content[printer.index]
if (char === '<' && printer.matchTag()) {
continue
}
// 检查待打印文字数量
if (count === 0) {
break
}
// 换行符
if (char === '\n') {
this.drawBuffer()
printer.newLine()
printer.index += 1
continue
}
// 库存文本溢出
if (Printer.wordWrap === 'keep' && printer.index >= printer.wrapEnd && printer.isWrapOverflowing()) {
this.drawBuffer()
printer.newLine()
continue
}
// 跳出循环
if (printer.y + Math.max(printer.lineHeight, printer.measureHeight(char)) > printHeight) {
this.drawBuffer()
this.state = 'waiting'
break
}
// 强制换行
if (printer.x + Printer.lineWidth + (charWidth = printer.measureWidth(char)) > printWidth) {
this.drawBuffer()
printer.newLine()
continue
}
// 计算字间距相关数据
if (letterSpacing !== 0) {
charWidths[charIndex++] = charWidth
Printer.lineWidth += letterSpacing
}
Printer.lineWidth += charWidth
// 放入缓冲区
printer.buffer += char
printer.index += 1
count--
}
// 设置完成状态
if (printer.index === length) {
this.state = 'complete'
}
// 绘制缓冲字符串
this.drawBuffer()
// 执行打印机指令进行绘制
printer.executeCommands()
}
文档生成时间:2025/7/7 12:07:07