屏幕坐标系
在本章中,您将会学习到:
- 默认坐标系的定义
- 为什么变换坐标系
- 如何变换坐标系
默认坐标系
Sonolus 所使用的默认坐标系,以 (0, 0)
为屏幕的正中心,y
的取值范围为 -1
(屏幕底部) 到 1
(屏幕顶部),x
的取值范围为 -1 * screen.aspectRatio
(屏幕左端) 到 screen.aspectRatio
(屏幕右端)。这些值都由 screen
结构提供,其结构如下:
class screen {
public:
let aspectRatio = RuntimeEnvironment.get(1);
let l = -1 * aspectRatio;
let b = -1;
let r = aspectRatio;
let t = 1;
let w = 2 * aspectRatio, 2;
let h = 2;
}screen;
变换坐标系
尽管你可以使用默认坐标系来编写引擎,但在一开始变换坐标系更能方便地迎合引擎的特殊需求。
在 VSRG (Vertical Scroll Rhythm Games,纵向滚动节奏游戏) 中,一个常用的坐标系的 y
取值范围为 0
(音符生成的顶部) 到 1
(判定线),其中心轨道位于 x = 0
,并且每两条轨道之间相隔一个单位距离。(例如,x = 2
是中心轨道右侧的第二条轨道)
计算与应用
让我们在我们的引擎中计算并应用默认坐标系。
在默认坐标系中,我们定义,我们的音符应该以 0.2
为它的半径,从玩家视野的外部 (screen.t + radius
) 生成,下落至位于 y = -0.6
的判定线处。
由于我们并不打算变换我们的屏幕坐标系,我们可以在 Initialization
原型的 preprocess
回调函数中计算:
class Initialization: public Archetype {
// ...
SonolusApi preprocess() {
FUNCBEGIN
let noteRadius = 0.2;
let judgeLineY = -0.6;
let t = screen.t + noteRadius;
let b = judgeLineY;
let h = t - b;
return VOID;
}
// ...
};
TIP
个人建议如果不是很会矩阵乘法的开发者,直接使用 Sonolus 的默认坐标系即可。
Sonolus.h 并没有一个像样的矩阵类,与 Sonolus.js 相比,转换坐标系会更加困难。