所以,我有一个3d平台游戏.而且我想要一个按钮,如果你握住它会让你"回到过去".值得庆幸的是,游戏相当简单,只有一个实体,因此每帧必须保存的唯一内容是.
struct Coord {
float x;
float y;
float z;
}
structure Bool6 {
bool front;
bool back;
bool left;
bool right;
bool top;
bool bottom;
}
struct Player {
Coord Pos;
Coord Vel;
Bool6 Col;
}
Run Code Online (Sandbox Code Playgroud)
但是我担心这是很多数据,特别是因为我的游戏理论上运行在60fps左右,所以保存5秒左右(300帧)的数据可以在滚动后访问.我认为每个框架都是这样做的
Player Data[300];
for (int i = 299; i > 0; i--)
{
Data[i] = Data[(i-1)];
}
Data[0] = "THIS FRAMES DATA";
Run Code Online (Sandbox Code Playgroud)
然而,这听起来意味着在存储每个帧时只需要大量的处理能力.
它们是一种更有效的方式来存储这些数据,保持所有数据的有序性吗?
还有一种方法我可以告诉阵列插槽它什么都没有?如果播放器在所有阵列插槽填满之前或回滚之后尝试回滚,那么它们不会出现问题?我相信C#我会把它设置为等于NULL ...但是这在c ++中不起作用可能是因为我正在使用结构.
非常感谢!
所以,我一直在尝试添加一个函数,你传递一个函数的字符串(例如"sin(x)")和一些边界,并通过制作GL_LINE_STRIP来绘制线条.我根据开发人员制作的示例1编写了该函数.这是我创建的功能.//摘自draw.h模板void GraphY(std :: string ln){typedef exprtk :: symbol_table symbol_table_t; typedef exprtk :: expression expression_t; typedef exprtk :: parser parser_t;
T x;
symbol_table_t symbol_table;
symbol_table.add_variable("x", x);
symbol_table.add_constant();
expression_t expression;
expression.register_symbol_table(symbol_table);
parser_t parser;
parser.compile(ln, expression);
glLineWidth(w);
glColor4f(outline.r / 255, outline.g / 255, outline.b / 255, outline.a / 255);
glBegin(GL_LINE_LOOP);
for (x = T(-5); x <= T(+5); x += T(0.001))
{
T y = expression.value();
glVertex3f(x, y, 0);
}
glEnd();
}
Run Code Online (Sandbox Code Playgroud)
这个函数似乎没有错误,我相信它一旦调用它就可以正常工作.我有一个调用此函数的函数(它在一个不同的文件中).就是这样.
//Excerpt from render.cpp
GraphY("sin(x)");
Run Code Online (Sandbox Code Playgroud)
它会产生以下错误
1>Render.obj : error LNK2019: unresolved external …Run Code Online (Sandbox Code Playgroud)