持续的数据和搜索

Continuous data and searching

本文关键字:搜索 数据      更新时间:2023-10-16

我想为我的游戏制作一种新的动画处理方式。目前我用两个变量CCD_ 1&CCD_ 2分别用于交换机情况和嵌套交换机情况。我想摆脱这种使用开关盒的方法。

switch (_physics_State)
{
case OBJECT_PHYSICS_STATE_GROUNDED: 
switch(_direction_State)
{
case OBJECT_DIRECTION_UP: _animation_State = ANIMATION_STATE_YS_IDLE_UP; break;
case OBJECT_DIRECTION_UP_RIGHT: _animation_State = ANIMATION_STATE_YS_IDLE_UP_RIGHT; break;
case OBJECT_DIRECTION_UP_LEFT: _animation_State = ANIMATION_STATE_YS_IDLE_UP_LEFT; break;
case OBJECT_DIRECTION_RIGHT: _animation_State = ANIMATION_STATE_YS_IDLE_RIGHT; break;
case OBJECT_DIRECTION_RIGHT_DOWN: _animation_State = ANIMATION_STATE_YS_IDLE_RIGHT_DOWN; break;
case OBJECT_DIRECTION_DOWN: _animation_State = ANIMATION_STATE_YS_IDLE_DOWN; break;
case OBJECT_DIRECTION_DOWN_LEFT: _animation_State = ANIMATION_STATE_YS_IDLE_DOWN_LEFT; break;
case OBJECT_DIRECTION_LEFT: _animation_State = ANIMATION_STATE_YS_IDLE_LEFT; break;     
default: _animation_State = ANIMATION_STATE_YS_IDLE_DOWN; break;
}
break;
}

我提出了一个解决方案,通过按特定顺序读取变量并将其存储在哈希图中来生成字符串。除了最后一个变量_speed之外,这似乎起作用。_speed是连续的,而不是离散的,并且可能具有一系列值,这些值仍将使对象达到相同的动画状态。我不能简单地将速度存储为一个简单的值。你们会如何处理这些连续的数据,让我用离散的数据来搜索它?

std::string animation_state_string_results = "" 
+ std::to_string(_physics_State) 
+ "-" + std::to_string(_direction_State);
+ "-" + std::to_string(G_button_Press_Value);
+ "-" + std::to_string(_speed);

将"连续"量转换为粗略的"标签"很容易。通常的想法是将范围划分为区间;然后使用二进制搜索的变体来标识包含查询值的间隔。存储已知不大于输入的最大值和已知较大的最小值的索引。请注意,您可以考虑n值来定界n+1个区间(其中两个区间是半无限的);如果这适用于您的数据,则必须将一个或两个边界索引初始化为索引超过最外面的值。

您可以将其作为连续变量的预处理步骤,也可以存储(对于其他变量的每个适当组合)一个数据结构,该数据结构包含与用于每个区间的值并行的区间边界。

同时,不要通过组装字符串来制作复合键——你最终会做一些愚蠢的事情,比如稍后对其进行修复。相反,请使用tuple(或自定义类)。然后,您必须提供一个散列函数,但这并不困难(而且存在使其变得琐碎的库)。