使用Artemis在monogame或xna中添加鼠标单击矩形的首选方式或点

时间:2014-08-06 13:38:00

标签: c# xna monogame artemis

使用Artemis,Visual Studio,C#和Monogame。

刚刚开始掌握Artemis,但在寻找向实体添加可点击的矩形/区域的适当位置时,屏幕上会有多个实体。

基本简单的想法,我有小方形精灵随机显示和移动2D游戏区域。 我需要能够点击它们并保持简单,删除正方形。

在Artemis中,您有组件,实体,系统。

我知道我将这个矩形区域添加到Texture2D方块,猜测它应该是它自己的组件。

试图找出

  1. 获取方形大小的矩形,并在移动时保持方形。
  2. 如何在某些系统中检测到该方块被点击或触摸过。
  3. 更新

    在我的DrawableGameComponent实体中。 DrawPosition是一个vector2并在主游戏例程中设置。 这是我广场的位置。 我使用它和纹理大小来计算矩形的大小和位置。

    当单击屏幕时,AreItemsIntersecting函数将占用鼠标位置,然后我用它来创建一个小矩形,然后检查2是否相交。如果他们这样做,则点击该对象。

    public override void Update(GameTime gameTime)
    {
    
        var bx = DrawPosition.X;
        var by = DrawPosition.Y;
        var w = _texture.Bounds.Width;
        var h = _texture.Bounds.Height;
    
        _bounds = new Rectangle((int)bx, (int)by, w+1, h+1);
    
        base.Update(gameTime);
    }
    
    public override void Draw(GameTime gameTime)
    {
        if (_texture != null)
        {
            _spriteBatch.Begin();
    
            _spriteBatch.Draw(_texture, DrawPosition, Color.White);
            _spriteBatch.Draw(_texture, _bounds, Color.Transparent); 
    
            _spriteBatch.End();
    
        base.Draw(gameTime);
    }
    
        public bool AreItemsIntersecting(int x, int y)
        {
            var vect = new Rectangle(x, y, 1, 1);
    
            if (vect.Intersects(_bounds))
            {
                return true;
            }
            return false;
        }
    

1 个答案:

答案 0 :(得分:1)

我会创建一个BoundingBox组件。它将公开Bounds类型的Rectangle属性。

使用此组件,您可以创建KillEntityOnClickSystem来处理已点击实体的删除。当单击鼠标按钮时,您只需要检查鼠标是否在实体Bounds的{​​{1}}内。

希望这有帮助!