如何使用 Vector2 {get;set;} 来计算正方形的角

本文关键字:计算 正方形 set 何使用 Vector2 get | 更新日期: 2023-09-27 17:55:34

这是我的第一个问题,几天前我刚开始用 C# 编码,所以如果我在做一些愚蠢的事情,请善待。问题是,我想用xna编写一个小型2D游戏,因此我创建了一个带有纹理的32x32像素框,这应该是播放器。我可以使用箭头键通过为玩家编写一个类来移动播放器,例如

namespace MyGame
{
    class Player
    {
        public Texture2D Textur;
        public Vector2 Position { get; set; }
    }
}

然后使用

KeyboardState keyboard = Keyboard.GetState();
if (keyboard.IsKeyDown(Keys.Right)) player.Position += new Vector(5,0);
//and so on

其中 5 是像素量,玩家通过一次击键移动。我正在尝试写这样的东西

class Player
{
    public Texture2D Textur;
    public Vector2 Position { get; set; }
    public Vector2 UpperRightCorner = new Vector2(Position.X + 32, Position.Y);
}

但显然它不起作用。甚至以为我阅读了 msdn 上关于 get 的文档;设置;我真的不明白,它是如何工作的。我需要角,或者更准确地说是角旁边的像素,来编写碰撞方法。这种方法应该每次按下箭头键时询问玩家面前是什么样的水平块,然后调整速度或将移动设置为 0,如果有实心块(如墙)。

知道吗,我如何在玩家类中编写这个角落的东西?我可以在实例化播放器后在主类中调用它,但我更愿意将其放入播放器类中。

如何使用 Vector2 {get;set;} 来计算正方形的角

它不起作用,因为您的职位尚未创建。

在播放器构造函数(例如public Player())中,必须先将位置设置为new Vector2。例如:

public Player()
{
    Position = new Vector2(0,0);
    UpperRightCorner = new Vector2(Position.X + 32, Position.Y);
}

你在实例化时UpperRightCorner赋值。此值将保持不变。这可以用 getter 重写,以便在每次访问时重新计算UpperRightCorner。例:

public Vector2 UpperRightCorner
{
    get
    {
        return new Vector2(Position.X + 32, Position.Y);
    }
}

Ginosaji 的回答应该会给你你想要的东西。只需稍作修改,也可以自动处理您选择的任何尺寸的纹理:

public Vector2 UpperRightCorner {
    get {
        return new Vector2(Position.X + Textur.Width, Position.Y);
    }
}