raylib U3 - 计分功能的实现
计分功能的实现依赖于绘制文字,绘制文字的功能一定要会哦。
接下来让我们开始计分。
准备工作
我们在raylib上绘制的是一个char *指向的字符串。所以计分功能的实现自然也是在这个字符串上动手脚。
我们先把计分需要的文字加载出来,然后限定只显示四位

注意理解下标:

计分算法的实现
首先我们要有一个用来计分的变量,然后把这个变量依次放到对应的位置

接下来,把int类型的分数的每一位,放到text对应的位置。看代码:

上面是4位分数显示的基本原理。理解的同学可以试试调整成5位,甚至6位,或者说把前面的0替换成空格。再甚至说试试让分数左对齐显示。
不理解的同学……我最后会给出代码的。
模拟分数增加
上面的工作完成之后,接下来只需要让分数从0开始计数就行了。
注意:下面的这种写法适用于随着时间增加分数也增加的规则。如果是条件触发的计分,根据需求修改。懂的都懂。
我把前面的fs变量改成了double类型,方便控制加分的时间间隔。

然后在主循环里不停地增加分数。


点开复制完整的代码
#include <raylib.h>
#include<bits/stdc++.h>
using namespace std;
int main() {
InitWindow(800, 600,"窗口标题");
SetTargetFPS(60);
//读取字体文件
int fileSize;
unsigned char *fontFileData = LoadFileData("YOUAI_Bold.ttf", &fileSize);
double fs=0;
char text[] = "score:0123456789";
//因为我们要先加载出所有的字符对应的图片,所以要把所有数字都放进来
int codepointsCount;
int *codepoints=LoadCodepoints(text,&codepointsCount);
Font font = LoadFontFromMemory(".ttf",fontFileData,fileSize,50,codepoints,codepointsCount);
UnloadCodepoints(codepoints);
//这次我们先限定加载4位的分数,所以在4位之后加一个'\0',表示字符串结束
text[10]='\0';
while (!WindowShouldClose()) {
fs+=0.02;
int t=fs;
//把分数依次放进去
text[6] = t/1000+'0';
text[7] = t%1000/100+'0';
text[8] = t%100/10+'0';
text[9] = t%10+'0';
BeginDrawing();
ClearBackground(WHITE);
//把文字画出来
DrawTextEx(font,text,Vector2{20,20},50,10,DARKBLUE);
EndDrawing();
}
//千万记得释放资源
UnloadFont(font);
//关闭窗口
CloseWindow();
return 0;
}
把score替换成中文
实现中文计分的关键是理解一个中文在raylib的char数组中占3位。我用普通的C++代码测试却是占2位。很奇怪。有懂这个问题的大佬解释一下吗?
把这个疑问写出来是希望看到这里的各位要有质疑的精神,我就是用了好长时间去实验2位的中文宽度,怎么都试不出来。后来突然想到了宽度问题,改成3位才终于实现了这个功能。


浙公网安备 33010602011771号