J'essaye de faire du code pour détecter une certaine image et jouer un son. Dans ma source, j'utilise ImageGetName pour obtenir le nom de l'image elle-même.C++: strcmp étant ignoré
ImageGetName est comme suit:
const char *ImageGetName(const image_c *image)
{
const image_c *rim;
rim = (const image_c *) image;
return rim->name;
}
Dans ma fonction principale, j'ai cette définition:
const char *image = ImageGetName(mo->subsector->sector->floor.image);
Il devrait simplement pointer * image pour floor.image quand appelé et les trier comme approprié.
Maintenant, ce que je veux faire est d'accéder au nom de l'image actuelle avec
ImageGetName(mo->subsector->sector->floor.image).
Donc, pour ce faire, je suppose que je dois utiliser strcmp. Mais peut-être que je ne le fais pas correctement. Le bloc en question:
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);
}
Le problème ici est qu'il est ignorant complètement la première strcmp if (strcmp (image, "EAU")!) et aller droit à la deuxième: else if (strcmp (image, "EAU") == 0). Cela ne devrait pas être le cas. Dans la plupart des cas, la première partie doit être considérée comme vraie à moins que le joueur ne marche réellement sur une image WATER. Le problème est que le joueur ne marche pas réellement sur l'image marquée "EAU", mais plutôt chaque image seule image le pas du joueur produira la deuxième sortie (Détecté EAU!).
J'en ai besoin pour évaluer l'image accessible - si elle ne la trouve pas, "Normal Floor", et si c'est le cas, "Detected WATER!". L'utilisation de! Strcmp devrait supposer qu'il n'a même pas besoin de se soucier de regarder l'image, alors que strcmp normal devrait évaluer l'image sur laquelle on marche. Mais ce n'est pas le cas.
Puis-je avoir de l'aide ici? J'apprécie vraiment cela!
Utilisez 'std :: string' et appréciez les opérateurs de comparaison qui sont réellement lisibles par l'homme. –
L'implémentation de 'ImageGetName' est loin d'être verbeuse. Il suffit d'écrire 'return image-> name;'. –