Я создаю моноигру XAML и хочу установить фиксированную игровую зону в SwapChainBackgroundPanel
. Я имею в виду, представьте себе: игровой экран (например, 1920 x 1080) и игровая область (например, 1280 x 800) — это только часть этого, а остальное пространство предназначено для различной информации, такой как счет, уровень, опыт и т. д., а также разные кнопки, как на этой картинке:
Как установить фиксированную игровую зону в xaml monogame?
Ответы (1)
Вы можете установить несколько целей рендеринга для отрисовки вашего пакета спрайтов. Я бы сделал так, чтобы вся ваша игровая логика или область отображались как или возвращали Texture2D желаемого размера. Затем в вашем Game1.cs или где-либо еще вы размещаете эту текстуру соответствующим образом в дополнение к элементам пользовательского интерфейса, которые вы рисуете.
public override Texture2D Draw(SpriteBatch spriteBatch)
{
spriteBatch.GraphicsDevice.SetRenderTarget(gameRenderTarget);
spriteBatch.Begin(SpriteSortMode.FrontToBack, null);
sky.Draw(spriteBatch);
ground.Draw(spriteBatch);
background.Draw(spriteBatch);
player.Draw(spriteBatch);
spriteBatch.End();
return (Texture2D)finalRenderTarget;
}
Теперь вся область игрового процесса представляет собой текстуру, которой можно манипулировать так же, как и всем остальным в вашей игре! Ваша основная игра может предопределить макет игры, и вы просто визуализируете каждую область по мере необходимости.
Другой вариант — один вызов Draw, в котором вы устанавливаете несколько целей рендеринга и просто передаете предыдущую цель рендеринга для отрисовки в следующем вызове spriteBatch.Draw между spriteBatch.Begin() и spriteBatch.End().