大家好我有一个小问题,但对我来说,这是个大问题。
首先,我有一个名为NPC
public void Update()
{
if (m_iMoveX != 0 || m_iMoveY != 0)
m_iFrame = (m_iFrame + 1) % 16;
else
m_iFrame = 0;
if (m_iPause > 0)
--m_iPause;
if (m_iMoveX > 0)
{
m_iPosX += 2;
m_iMoveX -= 2;
}
if (m_iMoveX < 0)
{
m_iPosX -= 2;
m_iMoveX += 2;
}
if (m_iMoveY > 0)
{
m_iPosY += 2;
m_iMoveY -= 2;
}
if (m_iMoveY < 0)
{
m_iPosY -= 2;
m_iMoveY += 2;
}
}
描述。
m_iMove
是首先行走的存储动作
m_iPos
是NPC的真实坐标。
当我进行npc步行时,我设置m_iMove + 32
。
在更新中,iPos
递增并且iMove
递减。
如果iMove
为0则移动完成。
NPC在网格上行走32x32像素。
现在我认为工作正常,但请参阅此屏幕截图
iMove
等于0.实际上没有动作。
iPos
是96,这是NPC Coords。
当我增加动作时
pl.m_iMoveY += 32; //Increments iMove for the movement
pl.m_npcDirection = NPCDirection.Dowm; //Setup the face
if (pl.m_iMoveY > 32) //if i press KeyDown and iMove have a value > of 32
pl.m_iMoveY = 32; //Force to execute 32 pixel movement
请参阅此屏幕
现在NPC Coords是132?
对此错误没有任何想法。 我为这个动作增加了32个像素。
96 + 32 = 128但我看到132
有没有人有想法?
答案 0 :(得分:0)
它与您的if (m_iMoveY < 0)
和类似的检查有关。条件代码执行的次数超过了必要的次数。你必须调整条件。
m_iPosY += 2;
显然执行的次数超过了必要的两倍。在该线上放置一个断点并观察它何时被击中。特别要注意当m_iPosY大于你预期的时候 - 在时间点检查其他变量中的值。