c# - 使某物同时在 X 轴和 Y 轴上移动
问题描述
对于我为学习目的而制作的简单游戏,我试图让角色从 A 点移动到 B 点。
我已经尝试了一些东西,但我发现的唯一方法是先转到 B 点的 X 值,然后转到 Y 值
public void Walk(Vector2D target)
{
var distance = Character.Position.Distance(target);
bool positiveX = target.X > Character.Position.X;
bool positiveY = target.Y > Character.Position.Y;
for (var i = 0; i < distance.X; i++)
{
var position = Character.Position.Clone();
position.X = (positiveX ? 1 : -1) + position.X;
if (Map.IsWalkable(position))
{
Character.Move(position);
}
}
for (var i = 0; i < distance.Y; i++)
{
var position = Character.Position.Clone();
position.Y = (positiveY ? 1 : -1) + position.Y;
if (Map.IsWalkable(position))
{
Character.Move(position);
}
}
}
解决方案
首先,您需要一个循环,而不是两个循环。其次,您不能在 x 方向上的每一步都在 y 方向上移动一步。相反,您需要以相同的步数将它们平均分配:
public void Walk(Vector2D target)
{
var distance = Position.Distance(target);
var steps = 5;
var stepX = distance.X / steps;
var stepY = distance.Y / steps;
bool positiveX = target.X > Position.X;
bool positiveY = target.Y > Position.Y;
for (var i = 0; i < steps; i++)
{
var position = Position.Clone();
position.X = (positiveX ? 1 : -1) * stepX + position.X;
position.Y = (positiveY ? 1 : -1) * stepY + position.Y;
if (Map.IsWalkable(position))
{
Character.Move(position);
}
}
}
这里我选择了5个步骤。或者,您可以选择固定距离以在每一步上移动。然后,您可以使用一些三角函数或比例来计算在 x 和 y 方向上移动多远以沿直线移动所选距离。
推荐阅读
- python - python3输入中的大写
- css - 角浏览器动画从底部向上滑动
- javascript - 在处理 React 时如何将 react-particles-js 设置为背景
- batch-file - Jenkins 中的 WinSCP 因“无法打开文件”...\WinSCP.ini“而失败。该进程无法访问该文件,因为它正被另一个进程使用”
- git - 通过删除二进制文件来减少 git 包的大小
- flutter - Flutter 如何从一个 List 中的 assets 文件夹中获取所有文件
- typescript - 打字稿:使一个参数的一种类型依赖于另一个参数的值
- excel - Excel 在验证列表中循环并导出为工作簿
- react-native - React Native 中的嵌套导航器导致 iOS 中的 View Controller 错误
- java - 是否可以在处理器中扫描类路径上的注释?