17. 生命值
在本章中,我们将创建生命值和次要指标 UI。
生命值增长原型
对于每个原型,我们都可以奖励或惩罚获得某种判定类型的玩家。
在我们的引擎中,我们将奖励获得 Perfect 判定的玩家增加 10 点生命,并惩罚获得 Miss 判定的玩家失去 100 点生命。
export class Note extends Archetype {
// ...
globalPreprocess() {
// ...
this.life.set({
perfect: 10,
great: 0,
good: 0,
miss: -100,
})
}
// ...
}
export class Note extends Archetype {
// ...
globalPreprocess() {
// ...
this.life.set({
perfect: 10,
great: 0,
good: 0,
miss: -100,
})
}
// ...
}
基于判定类型的连击生命增长
与得分类似,我们也可以奖励或惩罚连续获得某种判定类型或以上的玩家,无论原型是什么。
在我们的引擎中,我们将奖励连续击中 10 次完美的玩家获得 50 点生命值。
export class Initialization extends Archetype {
preprocess() {
// ...
life.consecutive.perfect.set({
increment: 50,
step: 10,
})
// ...
}
// ...
}
export class Initialization extends Archetype {
preprocess() {
// ...
life.consecutive.perfect.set({
increment: 50,
step: 10,
})
// ...
}
// ...
}
次要指标 UI
与主要指标 UI 类似,也有次要指标栏和次要指标值 UI,一般用于展示生命值。
export class Initialization extends Archetype {
preprocess() {
// ...
ui.metric.secondary.bar.set({
anchor: screen.rect.rt
.sub(new Vec(0.05, 0.05))
.sub(new Vec(0, 0.15).mul(ui.configuration.metric.primary.scale))
.sub(new Vec(0, 0.05)),
pivot: { x: 1, y: 1 },
size: new Vec(0.75, 0.15).mul(ui.configuration.metric.secondary.scale),
rotation: 0,
alpha: ui.configuration.metric.secondary.alpha,
horizontalAlign: HorizontalAlign.Left,
background: true,
})
ui.metric.secondary.value.set({
anchor: screen.rect.rt
.sub(new Vec(0.05, 0.05))
.sub(new Vec(0, 0.15).mul(ui.configuration.metric.primary.scale))
.sub(new Vec(0, 0.05))
.sub(new Vec(0.035, 0.035).mul(ui.configuration.metric.secondary.scale)),
pivot: { x: 1, y: 1 },
size: new Vec(0, 0.08).mul(ui.configuration.metric.secondary.scale),
rotation: 0,
alpha: ui.configuration.metric.secondary.alpha,
horizontalAlign: HorizontalAlign.Right,
background: false,
})
// ...
}
// ...
}
export class Initialization extends Archetype {
preprocess() {
// ...
ui.metric.secondary.bar.set({
anchor: screen.rect.rt
.sub(new Vec(0.05, 0.05))
.sub(new Vec(0, 0.15).mul(ui.configuration.metric.primary.scale))
.sub(new Vec(0, 0.05)),
pivot: { x: 1, y: 1 },
size: new Vec(0.75, 0.15).mul(ui.configuration.metric.secondary.scale),
rotation: 0,
alpha: ui.configuration.metric.secondary.alpha,
horizontalAlign: HorizontalAlign.Left,
background: true,
})
ui.metric.secondary.value.set({
anchor: screen.rect.rt
.sub(new Vec(0.05, 0.05))
.sub(new Vec(0, 0.15).mul(ui.configuration.metric.primary.scale))
.sub(new Vec(0, 0.05))
.sub(new Vec(0.035, 0.035).mul(ui.configuration.metric.secondary.scale)),
pivot: { x: 1, y: 1 },
size: new Vec(0, 0.08).mul(ui.configuration.metric.secondary.scale),
rotation: 0,
alpha: ui.configuration.metric.secondary.alpha,
horizontalAlign: HorizontalAlign.Right,
background: false,
})
// ...
}
// ...
}