Achtergrond¶
Doelstelling¶
Een seed based achtergrond met daarnaast random objecten.
Toegepaste oplossing¶
Ik importeer simplexnoise zodat ik een seed based map genereer waarvan ik de hoogte omzet naar tiles.
Hier wordt er berekend hoe groot de array moet zijn.
Hier importeer ik alle images die nodig zijn voor de tiles en objecten.
preloadedSavannaTileImage = App.AssetManager.GetSprite("Images/UI/tiles/Savanna_grass_mix");
preloadedSavannaObjectImages = App.AssetManager.GetSprite("Images/UI/objects/Savanna_object_mix");
De hoogte wordt gegenereerd en hier omgezet met specifieke nummers om een style te krijgen. Hier in de loop worden de x en y coordinaten gebruikt om de totale hoogte en breedte van het scherm te vullen.
screenTiles = new Point((int)MathF.Ceiling(App.Screen.X / tileSize.X),
(int)MathF.Round(App.Screen.Y / tileSize.Y));
tileImages = new int[screenTiles.X * screenTiles.Y];
Noise.Seed = App.Random.Next(2, 10000);
var scale = 0.07f; // The scale of the noise. The greater the scale, the denser the noise gets
var noiseValues = Noise.Calc2D(screenTiles.X, screenTiles.Y, scale);
for (var x = 0; x < screenTiles.X; x++)
{
for (var y = 0; y < screenTiles.Y; y++)
{
tileImages[screenTiles.X*y + x] = noiseValues[x, y] switch
{
var n when n >= 220 => 6,
var n when n >= 187 => 5,
var n when n >= 154 => 4,
var n when n >= 131 => 3,
var n when n >= 128 => 2,
var n when n >= 105 => 1,
_ => 0 // default value
};
}
}
De images van de achtergrond worden hier getekend op het scherm samen met de images van de objecten uit de list.
public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
{
for (var x = 0; x < screenTiles.X; x++)
{
for (var y = 0; y < screenTiles.Y; y++)
{
var tilePosition = new Vector2(tileSize.X*x, tileSize.Y*y);
spriteBatch.BetterDrawSheet(preloadedSavannaTileImage, new (7, 1), tileImages[x + (y * screenTiles.X)], tilePosition, tileSize);
}
}
for (var i = 0; i < backgroundObjects.Count; i++)
{
spriteBatch.BetterDrawSheet(preloadedSavannaObjectImages, new (15, 1), backgroundObjects[i].Item1, backgroundObjects[i].Item2, new Vector2(30));
}
}
Bronnen¶
- Simplex Noise. (z.d.) wikipedia
Laatst geraadpleegd op 6 juni 2024, van simplex noise - C# documentation. (z.d.) learn.microsoft.com.
Laatst geraadpleegd op 6 juni 2024, van https://learn.microsoft.com/en-uk/dotnet/csharp/ - Monogame documentation. (z.d.) monogame.net.
Laatst geraadpleegd op 6 juni 2024, van https://monogame.net/articles
Laatst geüpdatet:
June 11, 2024
Gecreëerd: June 6, 2024
Gecreëerd: June 6, 2024