c++ - SFML 冲突从未在我的系统中注册
问题描述
尝试在 SFML 中首次在 SFML 中创建碰撞系统,而不使用教程,使用基于数组的东西,如下所示:
bool moright, moleft, moup, xcollision, ycollision;
float xvel, yvel;
int position, predictx, predicty, cm, arraynum;
class playerClass{
public:
playerClass(){
}
void update()
{
if (moright == true){
xvel = 2;}
if (moleft == true){
xvel = -2;}
if (!(moright || moleft)){
if (xvel < 0)
xvel = 0;
if (xvel > 0)
xvel = 0;}
}
};
int main()
{
playerClass playerObject;
// Create the main window
RenderWindow window(VideoMode(1080, 720), "SFML window");
// Load a sprite to display
Texture texture;
if (!texture.loadFromFile("gsquare100x100.png"))
return EXIT_FAILURE;
Sprite sprite(texture);
Sprite floor(texture);
Sprite wall(texture);
floor.setPosition(Vector2f(0.f, 498.f));
wall.setPosition(Vector2f(598.f,0.f));
floor.setColor(Color(0, 255, 0));
floor.setScale(12.f, 12.f);
wall.setScale(12.f, 12.f);
wall.setColor(Color(0, 0, 255));
int collisions[2][4]{
{0, 400, 500, 600},
};
// Start the game loop
while (window.isOpen())
{
Vector2f position = sprite.getPosition();
cout << position.y << endl;
predictx = position.x + xvel;
predicty = position.y + yvel;
yvel = 1;
for (arraynum = 0; arraynum < 2; arraynum++){
if ((predictx > collisions[arraynum][0])&&(predictx < collisions[arraynum][1])&&(predicty > collisions[arraynum][2])&&(predicty < collisions[arraynum][3])){
if ((position.y > collisions[arraynum][3])||(position.y < collisions[arraynum][2])){
xcollision = true;}
if ((position.x > collisions[arraynum][1])||(position.x < collisions[arraynum][0])){
ycollision = true;}
}
}
if (xcollision == true)
xvel = 0;
xcollision = false;
if (ycollision == true)
yvel = 0;
ycollision = false;
sprite.move(sf::Vector2f(0.f+xvel, 0.f+yvel));
// Process events
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == Event::KeyPressed)
{if (event.key.code == Keyboard::D)
moright = true;
if (event.key.code == Keyboard::A)
moleft = true;}
if (event.type == Event::KeyReleased)
{if (event.key.code == Keyboard::D)
moright = false;
if (event.key.code == Keyboard::A)
moleft = false;}
playerObject.update();
}
然而,碰撞从未记录,删除检查精灵从哪个方向移动的位无济于事。如果这是一个愚蠢的问题以及我可能过于复杂的碰撞系统,那么对于 c++ 来说非常新,所以很抱歉。
解决方案
由于声誉低,我无法发表评论。
从提供的代码来看,您似乎从未设置xcollision
或ycollision
到true
任何地方。
推荐阅读
- webassembly - emscripten 未定义的导出函数:
- c# - 如何使用 Factory 类方法创建 blackJack 卡(方法)列表。已为值和套装创建了枚举C#
- c++ - 指向成员函数中的字符数组会不会有问题?
- python-3.x - 在 Python 中为 txt 文件添加索引列
- swiftui - SwiftUI: How to constrain image size?
- java - Lcom/google/firebase/FirebaseApp 类中没有虚拟方法 setTokenProvider(Lcom/google/firebase/internal/InternalTokenProvider;)V
- nim-lang - 为什么显式指定泛型类型的 proc 不起作用?
- r - 由于 dplyr 函数参数中的非标准表达式,R 包失败 R CMD 检查
- reactjs - 世博包APK/IPA包过大
- python - (VS Code)Pylint 在导入模块时抛出语法错误,但在我运行代码时工作得很好