C++,在 class 变量中添加条件语句
C++, Adding conditional statements in class vars
抱歉,但我必须重复我之前问过的相同问题“”。
我这里用的是SDL2
在obj.h中:(不包括预处理器命令)
class obj {
public:
SDL_Rect clip;
void addCollideWith( SDL_Rect rect );
void hasCollide();
void clearCollideWith();
private:
std::list<bool *> collideWith;
};
在obj.cpp中:(不包括预处理器命令)
void obj::addCollideWith( SDL_Rect rect )
{
collideWith.push_back(SDL_HasIntersection(obj.clip, rect));
}
void obj::hasCollide()
{
bool retval = true;
for (std::list<bool *>::iterator it = collideWith.begin(); it != collideWith.end(); it++)
{
retval = retval && **it;
}
return retval;
}
void clearCollideWith()
{
collideWith.clear();
}
在main函数中,我说的是物体移动一个像素,每移动一个像素,它就会检查是否与其他物体发生碰撞。我清除了指针“*”,因为我没有输入 variables,如您所见:collideWith.push_back(SDL_HasIntersection(obj.clip, rect));
。我做的是让它移动一个像素,清除collideWith并再次添加collideWith条件用于updating无论是真还是假。
现在,问题是什么?
它让程序真的很慢!如果我删除 collideWith 东西然后启动程序,它会变得更加流畅。现在,我想要的是存储 语句 而不是 true 或 false。 std::list
占用:
collideWith.pushBack(true /*OR*/ false);
但我想要的是:
collideWith.pushBack(/*statement determining whether it is true or false*/ var1 > var2);
如果缺少上下文或问题不知何故,无法理解,请务必投诉!
(注意:未提及与移动对象和声明对象剪辑子变量相关的上下文,因为它们不是问题的一部分。)
您可以尝试更换
std::list<bool *> collideWith;
和
std::list<SDL_Rect> collideWith;
以便跟踪您要考虑的矩形。
实施可以是:
void obj::addCollideWith( SDL_Rect rect )
{
collideWith.push_back(rect);
}
// to test if it collides with at least one rectangle
bool obj::hasCollide()
{
bool retval = false;
for (std::list<SDL_Rect>::iterator it = collideWith.begin(); it != collideWith.end(); it++)
{
retval = retval || SDL_HasIntersection(obj.clip, *it);
}
return retval;
}
// to test if it collides with all rectangles
/* bool obj::hasCollide()
{
bool retval = true;
for (std::list<SDL_Rect>::iterator it = collideWith.begin(); it != collideWith.end(); it++)
{
retval = retval && SDL_HasIntersection(obj.clip, *it);
}
return retval;
} */
抱歉,但我必须重复我之前问过的相同问题“
我这里用的是SDL2
在obj.h中:(不包括预处理器命令)
class obj {
public:
SDL_Rect clip;
void addCollideWith( SDL_Rect rect );
void hasCollide();
void clearCollideWith();
private:
std::list<bool *> collideWith;
};
在obj.cpp中:(不包括预处理器命令)
void obj::addCollideWith( SDL_Rect rect )
{
collideWith.push_back(SDL_HasIntersection(obj.clip, rect));
}
void obj::hasCollide()
{
bool retval = true;
for (std::list<bool *>::iterator it = collideWith.begin(); it != collideWith.end(); it++)
{
retval = retval && **it;
}
return retval;
}
void clearCollideWith()
{
collideWith.clear();
}
在main函数中,我说的是物体移动一个像素,每移动一个像素,它就会检查是否与其他物体发生碰撞。我清除了指针“*”,因为我没有输入 variables,如您所见:collideWith.push_back(SDL_HasIntersection(obj.clip, rect));
。我做的是让它移动一个像素,清除collideWith并再次添加collideWith条件用于updating无论是真还是假。
现在,问题是什么?
它让程序真的很慢!如果我删除 collideWith 东西然后启动程序,它会变得更加流畅。现在,我想要的是存储 语句 而不是 true 或 false。 std::list
占用:
collideWith.pushBack(true /*OR*/ false);
但我想要的是:
collideWith.pushBack(/*statement determining whether it is true or false*/ var1 > var2);
如果缺少上下文或问题不知何故,无法理解,请务必投诉! (注意:未提及与移动对象和声明对象剪辑子变量相关的上下文,因为它们不是问题的一部分。)
您可以尝试更换
std::list<bool *> collideWith;
和
std::list<SDL_Rect> collideWith;
以便跟踪您要考虑的矩形。
实施可以是:
void obj::addCollideWith( SDL_Rect rect )
{
collideWith.push_back(rect);
}
// to test if it collides with at least one rectangle
bool obj::hasCollide()
{
bool retval = false;
for (std::list<SDL_Rect>::iterator it = collideWith.begin(); it != collideWith.end(); it++)
{
retval = retval || SDL_HasIntersection(obj.clip, *it);
}
return retval;
}
// to test if it collides with all rectangles
/* bool obj::hasCollide()
{
bool retval = true;
for (std::list<SDL_Rect>::iterator it = collideWith.begin(); it != collideWith.end(); it++)
{
retval = retval && SDL_HasIntersection(obj.clip, *it);
}
return retval;
} */