Каков предпочтительный способ или место, используя Artemis в моногам или xna, чтобы добавить прямоугольник щелчка мышью
Использование Artemis, Visual Studio, C# и Monogame.
Просто начинайте понимать Artemis, но ищите подходящее место, чтобы добавить кликабельный прямоугольник / область к сущности, на экране появится несколько сущностей.
Основная простая идея, у меня есть маленькие квадратные спрайты, случайно показывающие и перемещающиеся в 2D игровой зоне. Мне нужно иметь возможность нажимать на них и, не усложняя, удалить квадрат.
В Артемисе у вас есть Компоненты, Объекты, Системы.
Я знаю, что добавлю эту область прямоугольника к квадрату Texture2D, предполагая, что это должен быть его собственный компонент.
Пытаться понять
- Получите прямоугольник размером с квадрат и оставайтесь с квадратом при его движении.
- Как в какой-то системе обнаружить, что на этот квадрат щелкнули или коснулись.
ОБНОВИТЬ
В моей сущности 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
когда кнопка мыши нажата.
Надеюсь это поможет!