Hallo leude,
ich war grade dran eine Füll-Funktion für meinen Karten editor zu schreiben, als ich auf ein Problem traf das ich bisher nicht lösen konnte.
Der gedanke war recht einfach: Ich wollte die möglichkeit haben alle zusammenhängenden Felder mit einer bestimmten Textur eine andere Textur zuzuweisen.
Dazu dachte ich, bau ich mir eine kleine Recursive-Funktion auf die von dem Startpunkt, alle benachbarten Felder untersucht, von denen die Textur ändert und dann weiter sucht.
bis 50*50 Felder gehts gut, aber dann is ende. Dummerweise ist die Standardgröße 500*500 Felder. Seltsamerweise krieg ich keine Exception wenn ich nur nach oben, rechts und links suche.
Sobald ich nach unten suche bricht der bei X: 7 Y: 422 ab. Das ganze sieht so aus:
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:
| private void _fillMap() { this._findFields(499, 499, 10); }
private int _getTextureIDByPosition(int X, int Y, int LayerIndex) { if (X >= 0 && Y >= 0 && X < this._map.MapSize.Width && Y < this._map.MapSize.Height) { return this._map.Tiles[X, Y, LayerIndex].Texture.TextureIndex; } return -1; }
private void _findFields(int X, int Y, int CurrentTextureID) { this._changeFieldTexture(X, Y - 1, CurrentTextureID); this._changeFieldTexture(X, Y + 1, CurrentTextureID); this._changeFieldTexture(X - 1, Y, CurrentTextureID); this._changeFieldTexture(X + 1, Y, CurrentTextureID); }
private void _changeFieldTexture(int X, int Y, int CurrentTextureID) { int TextureID = this._getTextureIDByPosition(X,Y, this._layer);
if (CurrentTextureID == TextureID && this.TextureID != TextureID) { System.Diagnostics.Debug.WriteLine("X: " + X + " Y: " + Y); this._map.Tiles[X, Y, this._layer].Texture.TextureIndex = this.TextureID; this._findFields(X, Y, CurrentTextureID); } } |
jemand eine idee wieso er sich da aufhängt?