琢磨这个东西好久了,一直不得要领,今天终于有所突破,写一篇说明吧,把这个内容彻底讲透。IsoMetric斜45度的游戏有很多很多,比如我喜欢的龙之崛起。虽然我得到了它的全部美工素材,但要把素材用起来,需要一个自己的坐标系统,这个坐标系统要迎合或满足游戏的素材,即都是45度的视角。
这其实是一个逆向的问题:我们有了45度视角的素材,怎么才能得到对应的坐标系统呢?

我们再明确一下,上面的7个雕像,它们应该是横向的一致排开,虽然你看到它们如下图右边的样子是斜做排列的,但其实在等距的游戏世界中,它们应该是如下图左边的样子横向的一排。因为素材的角度是45度看过去,所以它们看起来是斜的一排,但那只是视角的不同而已。

我需要一个坐标系统,在真实的世界里,是7个雕像横向的在X方向排成了一排,就像上图的左边格子。我只增加X方向上的数值,它们就可以按右边的45度视角排成了一排。有了这个左边系统,我在游戏世界中就可以按左边的格子操作游戏对象,而看上去,它们是右边这种45度的。这个坐标系统其实是通过一个函数,来把左边的坐标转成右边的坐标。查不到这块的资料,我去问了豆包,它居然回答了我想要的东西。

第一次它回答了我一个瓦块地图的公式,但我不想去处理瓦块的长和宽。我再问了一下


然后我在Godot的C#脚本中,使用了这个函数
cs
public static Point RotatePoint(Point origin)
{
double newX = origin.X - origin.Y;
double newY = (origin.X + origin.Y) / 2;
return (new Point((int)newX, (int)newY));
}
cs
public override void _Ready()
{
for (int i = 1; i < 10; i++)
{
one(new Point(i*39, 100), "res://China_Aesthetic_00009.png");
}
}
public void one(Point point, string texturePath)
{
Point point2 = RotatePoint(point);
// 创建 Sprite 实例
Sprite2D sprite = new Sprite2D();
sprite.Texture = GD.Load<Texture2D>(texturePath); // 确保路径正确
// sprite.Centered = false;
AddChild(sprite); // 将 Sprite 添加到场景树中
sprite.Position = new Vector2(point2.X, point2.Y); // 设置 Sprite 的位置
}
只在X方向上增加数值,雕像们就被排成了一排;然后我还找了一个雕像把键盘"上下左右"对应到X,Y的一个值上,移动雕像,它就是按如图所示的方向在移动,就是我想要的坐标系统。
