c++ - SDL 冲突处理

标签 c++ sdl collision

我有一个 SDL_Rect 位于大 SDL_Rect 内部的实例,我需要它来制作它,这样它就不能离开那个矩形,但仍然可以移动。小 rect 的移动需要像棋盘游戏移动一样,您单击一次按钮,它会移动特定的绳索,这是我的代码:

if( event.type == SDL_KEYDOWN) { 
switch( event.key.keysym.sym ) { 
case SDLK_UP:
    yVel -= 10;
    if (!check_collision(box,Cont))
    {
      std::cout<<"in the water"<<std::endl;
      box.y -= yVel - 10;
    }
    break;
case SDLK_DOWN:

       if (!check_collision(box,Cont))
    {
      std::cout<<"in the water"<<std::endl;
      box.y -= yVel + 20;
    }
    else
    {
      yVel += 10;
    }
    break; 
case SDLK_LEFT:
    xVel -= 10;
       if (!check_collision(box,Cont))
    {
      std::cout<<"in the water"<<std::endl;
    }
    break; 
case SDLK_RIGHT:
    xVel += 10;
       if (!check_collision(box,Cont))
    {
      std::cout<<"in the water"<<std::endl;
    }
    break; 
case SDLK_1:
    return 2;
    break;

  }
} 

最佳答案

您的 SDLK_DOWN 和其余输入不一致 - 如果没有碰撞,则不会发生速度变化。

您输入的代码正在改变坐标,不应该是这样的。让您的输入代码管理“意图”,并让游戏循环将速度应用于对象和碰撞检测。

另外,你的碰撞检查应该检查我是否在 position 并且我移动 delta,我会碰撞吗?如果发生碰撞,碰撞 react 是什么?您希望实体在碰撞时“滑动”还是在检测到碰撞时立即停止?

考虑到您正在玩棋盘游戏,您甚至不必进行碰撞检测。将您的棋盘表示为您的单位可能位于的位置图,将鼠标点击转换为棋盘坐标并计算当前位置和目的地之间的最短路径(使用 A* algorithm );无效点击(越界)不应转化为移动命令。

关于c++ - SDL 冲突处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17637485/

相关文章:

c++ - GLEW 编译,但在运行时崩溃

c - 进程在 TTF_RenderText_Shaded 行结束

hash - 你能告诉我两个产生相同 MD5 或 SHA1 哈希值的实际的、非平凡的字符串吗?

javascript - 在 JavaScript 中解决冲突时出现意外结果

c++ - 选择概率与信任成正比的节点

c++ - 程序在Turbo C中运行良好,但在MSVC中失败,出现未处理的异常

c++ - 使用 OpenGL 和 SDL 的 Sprite 表

java - 如何在 LIBGDX 中检查曲线的碰撞检测?

c++ - 在 g++ 上无效使用不完整类型

C++:创建一个指向类对象的 vector