本帖最后由 Myth 于 2020-4-29 15:57 编辑
# 感谢 @wan 帮忙翻译了以下所有内容
第五部分:按键和显示管理
有2个功能用来管理按键。
- GetKey()会暂停程序,并自动在屏幕上显示VRAM。 - IsKeyDown()不暂停程序,不在屏幕上显示VRAM。
用哪一种?这一切都取决于你的游戏是否是实时的。如果不是实时的(如选择菜单),使用GetKey()。如果是实时的,使用IsKeyDown()。
按键值可以在SDK安装文件夹中的PDF文件中找到("KeyCode List.pdf "文件)。
注意上档键(shift和alpha)可能会返回不同的值(所以如果用户按shift+down,会返回KEY_CTRL_PAGEDOWN而不是KEY_CTRL_DOWN)。
例如,这里是一个游戏中的循环,可以用来移动一个方块(伪代码)。
- while (1)
- {
- ML_clear_vram();
- ML_pixel(x, y);
- ML_display_vram();
-
- if (IsKeyDown(KEY_CTRL_UP))
- {
- y--;
- }
- else if (isKeyDown(KEY_CTRL_DOWN))
- {
- y++;
- } ...
- }
复制代码
至于显示功能方面,有以下语句:
- ML_pixel() 显示一个像素点 - ML_line() 显示一行 - ML_rectangle()来显示一个矩形等。
所有的函数参见MonochromeLib.h,名字很明确。
要显示文字,有以下语句:
- Print(char *str),在Locate(intx, int y)函数之后使用,以类似于basic中的Locate函数的方式显示。 - PrintRev,其工作原理与Print类似,但颜色反转(黑底白字)。 - PrintXY(int x, int y, char* str, int type),在坐标x, y处显示str,如果type = 0,则以黑色显示,如果type = 1,则以白色显示 - PrintMini,其工作原理与PrintXY类似,但使用小字体显示(类似basic中的Text功能)。 - BetterFont,一个可以显示带有自定义字符的字体库
请注意,这些功能使用卡西欧编码,部分兼容ASCII编码。
例如,我们要显示"agréable "。如果你使用Print("agréable"),你会注意到它显示的是这个:
如果你将文件保存为ANSI而不是UTF-8,则 "agr able"。
所以必须要符合卡西欧的编码。要知道怎么做,请到SDK安装文件夹里去看,里面有5个pdf文件。我们感兴趣的是 "字符集"。
在PDF的第6页,我们看到"é"的编码是0xE60A。
要在字符串中插入这些字节,不需要使用十六进制编辑器来修改.c文件(可能会导致编译错误):你必须使用十六进制转义符\x,通常只需要2位数作为参数。因此我们的代码行将是Print("agr\xE6\x0Aable")。如果我们执行它,它是这样显示的:
问题出在哪里?显然,编译器考虑到\x最多需要3位数,因此翻译成0xE6和0x0Aa→0xAA,而0xE6AA在卡西欧编码中就是中间那个点。并排的字符串是自动关联的。为了避免这种情况,加2个引号就足以让编译器知道应该停止在0A处:
Print("agr\xE6\x0A""able")
|