Ga naar inhoud

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.

using SimplexNoise;

Hier wordt er berekend hoe groot de array moet zijn.

tileImages = new Texture2D[screenTiles.X * screenTiles.Y];

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


Laatst geüpdatet: June 11, 2024
Gecreëerd: June 6, 2024