Каков предпочтительный способ или место, используя Artemis в моногам или xna, чтобы добавить прямоугольник щелчка мышью

Использование Artemis, Visual Studio, C# и Monogame.

Просто начинайте понимать Artemis, но ищите подходящее место, чтобы добавить кликабельный прямоугольник / область к сущности, на экране появится несколько сущностей.

Основная простая идея, у меня есть маленькие квадратные спрайты, случайно показывающие и перемещающиеся в 2D игровой зоне. Мне нужно иметь возможность нажимать на них и, не усложняя, удалить квадрат.

В Артемисе у вас есть Компоненты, Объекты, Системы.

Я знаю, что добавлю эту область прямоугольника к квадрату Texture2D, предполагая, что это должен быть его собственный компонент.

Пытаться понять

  1. Получите прямоугольник размером с квадрат и оставайтесь с квадратом при его движении.
  2. Как в какой-то системе обнаружить, что на этот квадрат щелкнули или коснулись.

ОБНОВИТЬ

В моей сущности DrawableGameComponent. DrawPosition - это вектор2, установленный в рутине основной игры. Это местоположение моей площади. Я использую это и размер текстуры, чтобы вычислить размер и местоположение моего прямоугольника.

Функция 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 ответ

Решение

Я бы создал BoundingBox составная часть. Это выставит Bounds свойство типа Rectangle,

С этим компонентом на месте вы можете создать KillEntityOnClickSystem обрабатывать удаление нажатых объектов. Вам просто нужно проверить, находится ли мышь внутри Bounds сущности BoundingBox когда кнопка мыши нажата.

Надеюсь это поможет!

Другие вопросы по тегам