16. 街机得分
在本章中,我们将创建街机得分和主要指标 UI。
基于判定类型的基础得分倍数
每种判定类型都可以有自己的基本分数乘数,通常用1
表示 Perfect,更小的值表示 Great 和 Good:
export class Initialization extends Archetype {
preprocess() {
// ...
score.base.set({
perfect: 1,
great: 0.75,
good: 0.5,
})
// ...
}
// ...
}
export class Initialization extends Archetype {
preprocess() {
// ...
score.base.set({
perfect: 1,
great: 0.75,
good: 0.5,
})
// ...
}
// ...
}
基于判定类型的连击得分倍数
判定连击得分倍数是指,如果连击数大于等于某个值,判定时累乘的得分倍数。
举例来说,假设我们让连续 Great 得分倍数为每10
次累积0.01
,上限为50
。这意味着每连续取得 10 个 Great,您将获得0.01
的额外得分倍数,最多计算到50
Great 连击(因此最多可以获得最多0.05
的得分倍数)。
export class Initialization extends Archetype {
preprocess() {
// ...
score.consecutive.great.set({
multiplier: 0.01,
step: 10,
cap: 50,
})
// ...
}
// ...
}
export class Initialization extends Archetype {
preprocess() {
// ...
score.consecutive.great.set({
multiplier: 0.01,
step: 10,
cap: 50,
})
// ...
}
// ...
}
主要指标 UI
界面上的主要指标栏和主要指标值 UI,用于显示玩家选择的主要指标,一般是街机分数。主要指标栏显示显示的是百分比的进度条,主要指标值显示的则是原始值。
建议把它们堆叠在一起,以同时显示这两种信息:
export class Initialization extends Archetype {
preprocess() {
// ...
ui.metric.primary.bar.set({
anchor: screen.rect.rt.sub(new Vec(0.05, 0.05)),
pivot: { x: 1, y: 1 },
size: new Vec(0.75, 0.15).mul(ui.configuration.metric.primary.scale),
rotation: 0,
alpha: ui.configuration.metric.primary.alpha,
horizontalAlign: HorizontalAlign.Left,
background: true,
})
ui.metric.primary.value.set({
anchor: screen.rect.rt
.sub(new Vec(0.05, 0.05))
.sub(new Vec(0.035, 0.035).mul(ui.configuration.metric.primary.scale)),
pivot: { x: 1, y: 1 },
size: new Vec(0, 0.08).mul(ui.configuration.metric.primary.scale),
rotation: 0,
alpha: ui.configuration.metric.primary.alpha,
horizontalAlign: HorizontalAlign.Right,
background: false,
})
// ...
}
// ...
}
export class Initialization extends Archetype {
preprocess() {
// ...
ui.metric.primary.bar.set({
anchor: screen.rect.rt.sub(new Vec(0.05, 0.05)),
pivot: { x: 1, y: 1 },
size: new Vec(0.75, 0.15).mul(ui.configuration.metric.primary.scale),
rotation: 0,
alpha: ui.configuration.metric.primary.alpha,
horizontalAlign: HorizontalAlign.Left,
background: true,
})
ui.metric.primary.value.set({
anchor: screen.rect.rt
.sub(new Vec(0.05, 0.05))
.sub(new Vec(0.035, 0.035).mul(ui.configuration.metric.primary.scale)),
pivot: { x: 1, y: 1 },
size: new Vec(0, 0.08).mul(ui.configuration.metric.primary.scale),
rotation: 0,
alpha: ui.configuration.metric.primary.alpha,
horizontalAlign: HorizontalAlign.Right,
background: false,
})
// ...
}
// ...
}