人们在非常低的水平上回答你的问题。有时在更高的层次上思考问题会有所帮助。
你需要的是一种状态管理。花哨的计算机科学术语是有限状态机。但现在不要费心去查。起初它相当干燥和令人困惑:)
你的角色目前有一种状态——“站在周围”。您需要添加和处理“步行到目的地”状态。
从我读到的其他鼠标输入来看,我想我需要某种循环
你需要一个循环,称为游戏循环。如果您正在使用 XNA,那么您已经有了一个。但你在正确的轨道上。
每次通过游戏循环时,您都应该处理当前状态,并检查所谓的状态转换。那是当您将世界中的某些事物从一种状态更改为另一种状态的时候。例如,当您单击鼠标时,您希望该人开始移动。
在您的游戏循环中,您检查是否刚刚发生了鼠标点击。如果是,则设置一些数据(移动到哪里),并通过将状态设置为“步行到目的地”来告诉他开始步行。下一次更新,您将改为处理该状态。
当您的角色处于“步行至目的地”状态时,您需要根据自上次游戏更新以来经过的时间来更新他们的位置。在 XNA 中,这是为您计算的。如果您不使用 XNA,那么您必须自己检查。您也许可以使用类之Stopwatch
类的东西,并检查该Elapsed
字段。
如果角色在目的地,则需要将其切换回“站立”状态。
如果您再次收到鼠标点击,您是否希望“步行到目的地”状态注意它取决于您。如果您确实注意它,您会设置与从“站立”状态转换时相同类型的数据。
因此,您将需要这些变量:
- 一个计时器,用于找出自上次游戏循环以来经过的时间(XNA 提供给您)
- 当前玩家状态(可能是
enum
)
- 当前玩家位置(向量)
- 玩家的行走速度(可能是浮点数),以每秒(或毫秒)为单位测量
- “步行到目的地”状态的数据 - 目标位置(另一个向量)
- 与用户输入相关的数据(自上次更新以来发生的鼠标事件、这些点击的位置等)
游戏中每个角色的角色特定数据都会有所不同,因此您需要为每个角色创建一个新副本。你可能想把它放在一个类中。其余部分更具全局性,因此您可以将其分开,或使其成为游戏、游戏循环、输入类等的一部分(无论您选择如何组织它)。
我不会介绍如何实际计算部分运动的矢量数学,因为其他人已经介绍过了。重复这些答案是没有意义的。它基本上归结为在您的当前位置和目标位置之间创建一个向量,并将其乘以/除以您的步行速度(将其切碎到一次更新中移动的距离)。