输入桶
在本章中,您将会学习到:
- 什么是输入桶
- 如何设置一个输入桶
- 如何使用输入桶
输入桶
输入桶是一种按键种类,按键可以将判定差值输入进去,并在结果界面对每一个输入桶显示一个分布图。
虽然那并不必要,但对于那些基于它们的准度来测定他们的输入偏移并提升自我的玩家是很有用的,
设置桶
我们的引擎只有一种按键,因此我们只有一种桶需要设置。
在结果界面,每个桶都是由皮肤精灵所组成的图像来表示的,因此我们应该尽可能让其与游戏中保持一致。让我们使用毫秒来作为我们的单位。
class Buckets {
public:
int note = 0;
}Buckets;
auto bucket = defineBuckets<class Buckets>({
{
sprites: {
{
id: Sprites.note,
x: 0.0,
y: 0.0,
w: 2.0,
h: 2.0,
rotation: 0
}
},
unit: UnitText.Millisecond
}
});
设置桶窗口
接下来,我们需要设置桶窗口。
直白来说,我们需要在 Note
原型的 preprocess
回调函数中编写设置桶窗口的代码,然而有一个问题: preprocess
回调函数将会在每个按键实体都执行一遍,但桶窗口只需要设置一次。
因此,我们可以将我们的代码放在 Initialization
原型的 preprocess
回调函数中:
class Initialization: public Archetype {
// ...
SonolusApi preprocess() {
FUNCBEGIN
// ...
buckets[Buckets.note].set(
window.minPerfect * 1000, window.maxPerfect * 1000,
window.minGreat * 1000, window.maxGreat * 1000,
window.minGood * 1000, window.maxGood * 1000
);
return VOID;
}
// ...
};
输入结果
最后,让我们设置输入结果的桶编号与它的值:
class Note: public Archetype {
// ...
SonolusApi touch() {
FUNCBEGIN
// ...
FOR (i, 0, touches.size, 1) {
// ...
EntityInput.set(2, Buckets.note);
EntityInput.set(3, EntityInput.get(1) * 1000);
// ...
} DONE
return VOID;
}
// ...
};