So, hab mich jetzt mit dieser Frage etwas in XNA verkrochen und habe dort aber eine gute idee gefunden. Ist recht simpel auf JS umzumünzen.
Ich wollte nur mal meinen Ansatz hier mit euch teilen
(Bitte erwartet keinen optimierten Code, dafür war ich zu faul
):
|
C#-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
Texture2D grass = new Texture2D(GraphicsDevice, 1, 1);
grass = textureList["grass"];
Color[] dataPainted = new Color[textureList["grass"].Width * textureList["grass"].Height];
textureList["grass"].GetData(dataPainted);
_g = dataPainted.GetHashCode();
double texHeight = grass.Height, texWidth = grass.Width;
double numberOfTilesVertical = (double)GraphicsDevice.Viewport.Height / (double)texHeight;
double numberOfTilesHorizontal = (double)GraphicsDevice.Viewport.Width / (double)texWidth;
double digitsAfterDotVert = Math.Round(numberOfTilesVertical - Math.Round(numberOfTilesVertical, 0), 3), digitsAfterDotHori = Math.Round(numberOfTilesHorizontal - Math.Round(numberOfTilesHorizontal, 0), 3);
numberOfTilesVertical = numberOfTilesVertical - digitsAfterDotVert;
numberOfTilesHorizontal = numberOfTilesHorizontal - digitsAfterDotHori;
texHeight = (double)GraphicsDevice.Viewport.Height / numberOfTilesVertical;
texWidth = (double)GraphicsDevice.Viewport.Width / numberOfTilesHorizontal;
Vector2 proportions = new Vector2(((float)texWidth / (float)grass.Width), ((float)texHeight / (float)grass.Height));
for (int i = 0; i < numberOfTilesHorizontal; i++)
{
for (int j = 0; j < numberOfTilesVertical; j++)
{
float posX = (float)texWidth * i;
float posY = (float)texHeight * j;
Tile _tile = new Tile();
_tile.Position = new Vector2(posX, posY);
_tile.Proportions = proportions;
_tile.Texture = grass;
_tile.Texture.Name = "grass";
battlefieldList.Add(_tile);
}
}
|
Im Draw wird dann ganz normal mittels:
|
C#-Quelltext
|
1
2
3
4
|
for (int i = 0; i < battlefieldList.Count; i++)
{
generalSpriteBatch.Draw(battlefieldList[i].Texture, battlefieldList[i].Position, null, Color.White, 0f, battlefieldList[i].Proportions / 2, battlefieldList[i].Proportions, SpriteEffects.None, battlefieldList[i].drawIndex);
}
|
der Sprite gemalt, die Objekt-Eigenschaft "Proportions" ist in diesem Fall der Scale-Wert, also Textur mit normaler Größe aber dann je nach Wert skaliert.
Trotzdem danke für eure Ideen hierzu!
Danke auch noch mal an Sylence für den Vorschlag mit der Raumgenerierung.