C++:strcmp 被忽略

标签 c++ image audio strcmp

我正在尝试编写一些代码来检测特定图像并播放声音。在我的源代码中,我使用 ImageGetName 来获取图像本身的名称。

ImageGetName如下:

const char *ImageGetName(const image_c *image)
{
    const image_c *rim;

    rim = (const image_c *) image;

    return rim->name;
}

在我的主函数中,我定义了这个:

const char *image = ImageGetName(mo->subsector->sector->floor.image);

它应该在调用时将 *image 指向 floor.image 并根据需要对它们进行排序。

现在,我要做的是使用

访问当前图像名称
ImageGetName(mo->subsector->sector->floor.image). 

所以要做到这一点,我假设我必须使用 strcmp。但也许我没有正确地做到这一点。有问题的 block :

            if (mo->player && gravity > 0 && -zmove > OOF_SPEED && ! fly_or_swim)
        {

            if(!strcmp(image, "WATER")) //false, do no lookup
            {
            CON_Message("Normal Floor!");
            mo->player->deltaviewheight = zmove / 8.0f;
            S_StartFX(mo->info->oof_sound, P_MobjGetSfxCategory(mo), mo);
            }
            else if(strcmp(image, "WATER") == 0) //true, look this up!!
            CON_Message("Detected WATER FLAT!");
            mo->player->deltaviewheight = zmove / 10.0f;

            S_StartFX(mo->info->secretsound, P_MobjGetSfxCategory(mo), mo);
        }

所以这里的问题是它完全忽略了第一个 strcmp if(!strcmp(image, "WATER")) 并直接转到第二个:else if(strcmp(image , "水") == 0)。它不应该那样做。在大多数情况下,它应该将第一部分评估为真实,除非玩家实际踩到 WATER 图像。

问题是玩家实际上并没有踩到标记为“WATER”的图像,而是玩家踩到的每一个图像都会产生第二个输出(检测到水!)。

我需要它来评估访问的图像 - 如果它没有找到它,“正常地板”,如果找到,“检测到水!”。

使用 !strcmp 应该假定它甚至不需要费心查看图像,而普通的 strcmp 应该评估被踩踏的图像。但这并没有发生。

我可以在这里得到一些帮助吗?非常感谢!

最佳答案

修复缩进,其中一个问题变得清晰:

if(!strcmp(image, "WATER")) //false, do no lookup
{
    CON_Message("Normal Floor!");
    mo->player->deltaviewheight = zmove / 8.0f;
    S_StartFX(mo->info->oof_sound, P_MobjGetSfxCategory(mo), mo);
}
else if(strcmp(image, "WATER") == 0) //true, look this up!!
    CON_Message("Detected WATER FLAT!");
mo->player->deltaviewheight = zmove / 10.0f;

S_StartFX(mo->info->secretsound, P_MobjGetSfxCategory(mo), mo);

最后两行不是 else if block 的一部分。您需要用花括号将您希望包含在 else if block 中的语句括起来。

另一个问题是 !strcmp(image, "WATER")strcmp(image, "WATER") == 0 做完全相同的事情 - 或者它们都是真的,或者它们都是假的。我不知道你想在那里做什么,但这不是它实际做的。

关于C++:strcmp 被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34447701/

相关文章:

c++ - 在 C++ 中取消读取文件

ios - 创建具有可调整大小的自定义背景的 texview

javascript - 如何运行随机音频文件Chrome扩展程序

audio - 改变音调的算法

ios - 在 Swift 中使用 AV Audio Player 有条件地播放音频

c++ - 全局 namespace 中没有名为 'isinf'的成员

c++ - 为什么这个 `int` 有错误的值?

c++ - 当仅需要 X-Y 旋转时,3D 对象沿所有三个轴旋转

html - 照片和缩略图有什么区别?

javascript - 如何在上传到服务器之前保存 Canvas 图像?