c - 如何使用 SDL 在 C 中单击鼠标时调用函数?
问题描述
我正在制作地形生成器,一切正常。我有terrain[height][width]
哪个以数字为值。然后根据数字,我改变颜色。基本上,我有一个打印函数,它初始化 SDL,然后用几个for
周期遍历数组的元素。然后根据每个元素的值改变颜色,然后在屏幕上打印一个小方块。依此类推,它会移动这些正方形的位置等,然后绘制整个像素化地形。现在我想做的是,当我点击地形时,它会生成一个新的地形来替换旧的地形。这是我尝试做的:
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_QUIT:
running = false;
break;
case SDL_MOUSEBUTTONDOWN:
srand(time(0));
generate(random(20, 52), 55, 40);
generateCave();
generateClouds();
ground();
printf("click");
break;
}
}
在第二个for
我有SDL_PumpEvents();
所以它反应灵敏。除了带有SDL_MOUSEBUTTONDOWN
. 我认为您可以在那里看到我想做什么,但它所做的只是当我单击时,它停止响应并死掉。这样做的正确方法是什么?还告诉我您是否需要更多代码。在此先感谢,也许很抱歉问了一个愚蠢的问题。
解决方案
基本上你想要一个SDL_MouseButtonEvent
并检查坐标(x,y)是否在一个范围内。您可以将正方形传递为SDL_Rects
s,例如:
static int region_match(const SDL_Rect *rect, int x, int y)
{
return ((x >= rect->x) && (x <= rect->x + rect->w) &&
(y >= rect->y) && (y <= rect->y + rect->h));
}
case SDL_MOUSEBUTTONDOWN:
SDL_MouseButtonEvent *mouse = &event.button;
if (mouse->button == SDL_BUTTON_LEFT)
{
if (region_match(rect, mouse->x, mouse->y))
{
// Do your stuff
}
}
break;
推荐阅读
- amazon-web-services - 在 linux 机器上安装 awsebcli 时出现安装错误
- mysql - 使用 group by 在两个表中获取最大值时遇到问题
- javascript - 与多个状态变量反应的通用函数
- python - LinkedIn API“空 oauth2 访问令牌”错误
- mysql - 使用 find_in_set 和 group_concat 的 SQL 极端案例问题
- php - 确定下一个演奏者
- mysql - 是否可以使用列值sql查询作为和条件
- python - 使用计数器后,Python循环没有中断
- python - 用 numpy 实现最大/平均池(有步幅)
- php - 尽管语句在数据库中工作,但 PHP/MYSQL Select 语句引发错误