【发布时间】:2021-04-27 15:30:39
【问题描述】:
这个问题看起来很简单,但无论如何我都无法解决...
我在课堂上有原型,没有相同名称的重复原型,也没有功能。却找不到。
看看这些截图,看看我的意思
在这里我尝试使用所有弹出的函数和变量都没有的东西。
正如您在该图像中看到的那样,RemoveParticle 函数与 FindTargetEffect 函数位于同一区域,但它可以找到 RemoveParticle 很好,而 FindTargetEffect 它不能。
这里是头类。
class CParticleEntityManager {
public:
friend class CParticleEntity;
friend class CParticleBundle;
CParticleEntityManager();
int AddParticleToTargetBone(const char *name,
DWORD targetID,
int effectBoneIndex,
bool useEffectBoneRotation,
D3DXVECTOR3 &offset,
bool autoRemove = true,
/*bool bNonstopPlay = false,*/
bool continued = false,
D3DXMATRIX matContinued = D3DXMATRIX(0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f)/*
#ifdef DEF_XMODEL_BONE_EFFECT_OEN_081125
, bool bXModel = false
#endif
#ifdef DEF_ADD_PARTICLE_OEN_081211
, float fDelayTime = -1
#endif
#ifdef DEF_BUG_PARTICLE_OEN_090310
, int nTargetType = 0
, bool bOverlap = true
#endif*/
);
// Ä«¸Þ¶ó Áß¾Ó¿¡ ÆÄƼŬ °³Ã¼ »ý¼º, Çڵ鰪 ¸®ÅÏ
int AddParticleToCameraCenter(const char *name, bool autoRemove = true);
// ÁöÁ¤ÇÑ À§Ä¡¿Í ¹æÇâ¿¡ ÆÄƼŬ °³Ã¼ »ý¼º, Çڵ鰪 ¸®ÅÏ
int AddParticle(const char *name, D3DXVECTOR3 &position, D3DXMATRIX &rotation, bool autoRemove = true);
// ÁöÁ¤ÇÑ À§Ä¡¿¡ ÆÄƼŬ °³Ã¼ »ý¼º, Çڵ鰪 ¸®ÅÏ
int AddParticle(const char *name, D3DXVECTOR3 &position, bool autoRemove = true);
// ÆÄƼŬ °³Ã¼¸¦ À̵¿
void MoveParticle(int hEntity, D3DXVECTOR3 &position);
// ÆÄƼŬ °³Ã¼¸¦ À̵¿°ú ȸÀü
void MoveParticle(int hEntity, D3DXVECTOR3 &position, D3DXMATRIX &rotation);
// ÆÄƼŬ °³Ã¼ »èÁ¦ (immediately °¡ true ¸é ¹Ù·Î »èÁ¦, false ¸é ÇöÀç»ý¼ºµÈ ÆÄƼŬÀÇ ¼ö¸íÀÌ ´ÙÇÒ¶§±îÁö ±â´Ù¸²)
void RemoveParticle(int hEntity, bool immediately);
/**
* ÆÄƼŬ °³Ã¼ ¸®¼Â
* \date 2008-04-23
* \author oen
* \param hEntity ¸®¼Â ¿£Æ¼Æ¼ ÇÚµé
* \param *replace ÆÄƼŬÀ» º¯°æÇÑ´Ù¸é º¯°æÇÒ ÆÄƼŬ ¸í
* \param restart_ ¸®¼Â ÈÄ ÆÄƼŬÀ» ´Ù½Ã Ç÷¹ÀÌ ½ÃųÁö À¯¹«
*/
void ResetParticle(int hEntity, const char *replace = NULL, bool restart_ = true);
/**
* ÇØ´ç ÇÚµéÀ» °¡Áø °³Ã¼ÀÇ ºñÀúºíÀ» ¼³Á¤
* \date 2008-04-23
* \author oen
* \param hEntity ÇÚµé
* \param visible_ true : º¸ÀÓ false : ¾Èº¸ÀÓ
*/
//void SetVisible(int hEntity, bool visible_);
// ¸ðµç ÆÄƼŬ °³Ã¼ ¸®¼Â (¿¡µðÅÍ¿¡¼ »ç¿ë)
void ResetAllParticles();
// CMyD3DApplication::RenderView ¿¡¼ È£Ãâ (postRender ´Â ³ªÁß¿¡ µû·Î ·»´õ¸µÃ³¸®°¡ ÇÊ¿äÇÑ °æ¿ì¶§¹®¿¡ (¿¹¸¦ µé¸é ¹è°æÈ¸éÀ» ¿Ö°îÇÏ´Â È¿°ú)
HRESULT Render(bool postRender);
// CMyD3DApplication::FrameMove ¿¡¼ È£Ãâ
void FrameMove(float elapsedTime);
// ±ÍÂúÀº DX °´Ã¼ º¹±¸ °ü¸® ÇÔ¼öµé :-(
HRESULT InitDeviceObjects(IDirect3DDevice9 *pDevice);
HRESULT RestoreDeviceObjects();
HRESULT InvalidateDeviceObjects();
HRESULT DeleteDeviceObjects();
#ifdef _TOOL
// ÀÌÆåÅ͵éÀ» Á¤¸®ÇÑ´Ù.
void Clear();
#endif
#if defined(DEF_BUG_PARTICLE_OEN_090310) || defined(DEF_EFFECT_OEN_090325)
/**
* µ¿ÀÏÇÑ ID ¿¡ µ¿ÀÏÇÑ ÀÌÆåÅͰ¡ ºÙ¾î ÀÖ´ÂÁö »ìÇÉ´Ù.
* \param dwID ãÀ» ID
* \param strEffectName ãÀ» ÀÌÆåÅÍ ¸í
* \return ã¾Ò´Ù¸é ÇØ´ç ÀÌÆåÅ͸¦ ¸øÃ£¾Ò´Ù¸é -1
*/
int FindTargetEffect(DWORD dwTargetID, LPCSTR strEffectName);
#endif
// ¿¡µðÅÍ¿¡¼ »ç¿ëÇÏ´Â º¯¼öµé
int m_hTestParticle;
D3DXVECTOR3 m_testParticleOffset;
bool m_showWireFrame;
bool m_freeze;
bool m_fixPosition;
int m_numDrawParticles;
bool m_bTabSelect; // ù¹øÂ° ÅÇÀÌ ¼±Åà µÇ¾ú´ÂÁö È®ÀÎ Çϱâ À§ÇÑ º¯¼ö
#ifdef DEF_EFFECT_BOX_ESCAFLOWNE_2006_03_16 // ÀÌÆåÆ®Åø ¿¡¹ÌÅÍ
BOXVERTEX m_Vertices[ 8 ];
BOXINDEX m_Indices[ 12 ];
LPDIRECT3DVERTEXBUFFER9 m_pBoxVB;
LPDIRECT3DINDEXBUFFER9 m_pBoxIB;
int m_nTest;
#endif
// ÆÄƼŬ °´Ã¼ Á¢±ÙÀ» À§ÇØ Á¢±Ù¿µ¿ª º¯°æ
CParticleEntity * GetEntityByHandle(int handle);
private:
void Init();
int GetNewHandle();
int GetSortedDrawEntities(CParticleEntity **drawEntities);
void FlushVertexBuffer(prtShaderStage_t *shader, int vbWriteOffset, int vbWriteSize);
#ifdef DEF_EFFECT_BOX_ESCAFLOWNE_2006_03_16 // ÀÌÆåÆ®Åø ¿¡¹ÌÅÍ
void InitBox(); // ¹Ú½º ÃʱâÈ
void RenderBox(); // ¹Ú½º ±×¸®±â
#endif
CParticleEntity * m_pEntities[MAX_PARTICLE_ENTITIES];
CParticleEntity * m_pEntityList;
int m_numEntities;
float m_fElapsedTime;
bool m_bConfirmDevice;
bool m_bRestoreDevice;
bool m_bSoftware;
PDIRECT3DDEVICE9 m_pD3DDev;
PDIRECT3DVERTEXBUFFER9 m_pVertexBuffer;
PDIRECT3DINDEXBUFFER9 m_pIndexBuffer;
PDIRECT3DVERTEXSHADER9 m_pBumpEnvVertexShader;
PDIRECT3DPIXELSHADER9 m_pBumpEnvPixelShader;
PDIRECT3DVERTEXSHADER9 m_pHeatHazeMaskVertexShader;
PDIRECT3DPIXELSHADER9 m_pHeatHazeMaskPixelShader;
CTexture * m_pHeatHazeTexture;
};
extern CParticleEntityManager g_particleEntityManager;
【问题讨论】:
-
这些是您在构建时遇到的实际错误,还是智能感知错误?您的代码使用预处理器来有条件地编译类的各个部分。这很可能会让智能感知偏离轨道。
-
FindTargetEffect是有条件编译的,而RemoveParticle是无条件编译的。检查您的宏定义是否生效。 -
是的,我也认为它可能是
defined(..)命令本身,但是你可以看到我有 2 个错误。另一个错误是cannot open source file "StdAfx.h"我通常忽略我不相信这意味着一段时间后它会停止显示该错误。您还可以看到它们是紫色的,这意味着它们确实存在并且已定义。看看我试过的这张图片.. 还是不行i.imgur.com/K7Dc4mT.png -
尽量不要删除任何ascii cmets,它们会导致不可预知的结果,甚至在处理时暴露给代码。
-
@4xy。实际上 MS 编译器支持 non-ascii ,即使在标识符中也是如此(这是标准允许的)。但这可能是个问题,一些非 ascii 看起来与 latin1 字母相同或几乎相同。比较
cout和соut- 这是两个不同的 id。没有帮助 c 和 с 在同一个键上。