Hallo Community!
Zur Zeit arbeite ich an einem Strategiespiel (TopDown) bei dem der Spieler sich in einer zufallsgenerierten Map befindet.
Der Generator ist auch garnicht mein Problem:
Zuerst wird der Raum mit Wasserinstanzen (128x128 ist die Größe jedes Spielfeldes) ausgefüllt, dann werden zufällig Inselgruppen
in das Wasser hineingesetzt. Hierbei wird jeweils das Wasserfeld entfernt und durch ein Grasfeld ersetzt.
Auf den Inseln werden dann wiederum Biome und andere Sachen generiert.
Das ganze dauert etwa 1-5 Sekunden, der Raum ist 9600x9600 Pixel groß und die Raumgeschwindigkeit beträgt 60 Steps pro Sekunde.
Nun zum Problem!
Ich möchte beispielsweise einem Grasfeld am Wasser einen anderen Sprite geben als ein Grasfeld was von anderen Grasfeldern umgeben ist.
Einige zusätzliche Schwierigkeiten:
Die Inseln werden nicht gleichzeitig generiert, 1 Grasfeld pro Step, also kann ich nicht einfach eine Abfrage in das Create-event der Grasfelder
schreiben, da beim Generieren bspw. Noch ein Wasserfeld neben dem Grasfeld ist welches im Weiteren Verlauf entfernt wird, somit hätte
das Grasfeld später einen Falschen Sprite.
Ich habe schon mehrere Variationen meiner Abfragetechnik ausprobiert, sie kommt mir allerdings sehr uneffizient vor und führt nicht zum
gewollten Endergebnis.
Wenn ich den Code ins Step-event der Grasfelder schreibe, wobei der Code nur ausgeführt wird wenn alle Inseln generiert wurden(durch Variable
"global.GeneratingIslands=false" erreicht) ändern nur einige ihren Sprite und die FPS sinkt unter 1 (und es liegt sicher nicht daran dass ich einen
schlechten PC hätte ^^).
Auch habe ich getestet ein Objekt zu erstellen was nach der Generation über die Map "fliegt" und wenn es auf ein Grasfeld trifft diesem durch
untenstehenden Code in einer while with Schleife den richtigen Sprite zuordnet, allerdings friert das SPiel in diesem Fall komplett ein sobald
es auf ein Grasfeld trifft.
Vielen Dank im Vorraus für Vorschläge, bin wirklich seit Tagen am verzweifeln!
Hier der Code:
Alles anzeigen
Zur Zeit arbeite ich an einem Strategiespiel (TopDown) bei dem der Spieler sich in einer zufallsgenerierten Map befindet.
Der Generator ist auch garnicht mein Problem:
Zuerst wird der Raum mit Wasserinstanzen (128x128 ist die Größe jedes Spielfeldes) ausgefüllt, dann werden zufällig Inselgruppen
in das Wasser hineingesetzt. Hierbei wird jeweils das Wasserfeld entfernt und durch ein Grasfeld ersetzt.
Auf den Inseln werden dann wiederum Biome und andere Sachen generiert.
Das ganze dauert etwa 1-5 Sekunden, der Raum ist 9600x9600 Pixel groß und die Raumgeschwindigkeit beträgt 60 Steps pro Sekunde.
Nun zum Problem!
Ich möchte beispielsweise einem Grasfeld am Wasser einen anderen Sprite geben als ein Grasfeld was von anderen Grasfeldern umgeben ist.
Einige zusätzliche Schwierigkeiten:
Die Inseln werden nicht gleichzeitig generiert, 1 Grasfeld pro Step, also kann ich nicht einfach eine Abfrage in das Create-event der Grasfelder
schreiben, da beim Generieren bspw. Noch ein Wasserfeld neben dem Grasfeld ist welches im Weiteren Verlauf entfernt wird, somit hätte
das Grasfeld später einen Falschen Sprite.
Ich habe schon mehrere Variationen meiner Abfragetechnik ausprobiert, sie kommt mir allerdings sehr uneffizient vor und führt nicht zum
gewollten Endergebnis.
Wenn ich den Code ins Step-event der Grasfelder schreibe, wobei der Code nur ausgeführt wird wenn alle Inseln generiert wurden(durch Variable
"global.GeneratingIslands=false" erreicht) ändern nur einige ihren Sprite und die FPS sinkt unter 1 (und es liegt sicher nicht daran dass ich einen
schlechten PC hätte ^^).
Auch habe ich getestet ein Objekt zu erstellen was nach der Generation über die Map "fliegt" und wenn es auf ein Grasfeld trifft diesem durch
untenstehenden Code in einer while with Schleife den richtigen Sprite zuordnet, allerdings friert das SPiel in diesem Fall komplett ein sobald
es auf ein Grasfeld trifft.
Vielen Dank im Vorraus für Vorschläge, bin wirklich seit Tagen am verzweifeln!
Hier der Code:
Quellcode
- //water only up
- if collision_point (x,y-128,wld_water1,true,true) &!
- collision_point (x,y+128,wld_water1,true,true)
- &! collision_point (x+128,y,wld_water1,true,true) &! collision_point (x-128,y,wld_water1,true,true)
- {
- sprite_index=spr_wld_grass_up;
- }
- //water only down
- if collision_point (x,y+128,wld_water1,true,true) &!
- collision_point (x,y-128,wld_water1,true,true)
- &! collision_point (x+128,y,wld_water1,true,true) &! collision_point (x-128,y,wld_water1,true,true)
- {
- sprite_index=spr_wld_grass_down;
- }
- //water up &down
- if collision_point (x,y+128,wld_water1,true,true) && collision_point (x,y-128,wld_water1,true,true)
- &! collision_point (x+128,y,wld_water1,true,true) &! collision_point (x-128,y,wld_water1,true,true)
- {
- sprite_index=spr_wld_grass_up_down;
- }
- //water only left
- if collision_point (x-128,y,wld_water1,true,true) &!
- collision_point (x,y-128,wld_water1,true,true)
- &! collision_point (x+128,y,wld_water1,true,true) &! collision_point (x,y+128,wld_water1,true,true)
- {
- sprite_index=spr_wld_grass_left;
- }
- //water only right
- if collision_point (x+128,y,wld_water1,true,true) &!
- collision_point (x,y-128,wld_water1,true,true)
- &! collision_point (x,y+128,wld_water1,true,true) &! collision_point (x-128,y,wld_water1,true,true)
- {
- sprite_index=spr_wld_grass_right;
- }
- //water left & right
- if collision_point (x+128,y,wld_water1,true,true) && collision_point (x-128,y,wld_water1,true,true)
- &! collision_point (x,y+128,wld_water1,true,true) &! collision_point (x,y-128,wld_water1,true,true)
- {
- sprite_index=spr_wld_grass_left_right;
- }
- //water up & left
- if collision_point (x-128,y,wld_water1,true,true) && collision_point (x,y-128,wld_water1,true,true)
- &! collision_point (x,y+128,wld_water1,true,true) &! collision_point (x+128,y,wld_water1,true,true)
- {
- sprite_index=spr_wld_grass_up_left;
- }
- //water up & right
- if collision_point (x+128,y,wld_water1,true,true) && collision_point (x,y-128,wld_water1,true,true)
- &! collision_point (x,y+128,wld_water1,true,true) &! collision_point (x-128,y,wld_water1,true,true)
- {
- sprite_index=spr_wld_grass_up_right;
- }
- //water down & left
- if collision_point (x-128,y,wld_water1,true,true) && collision_point (x,y+128,wld_water1,true,true)
- &! collision_point (x,y-128,wld_water1,true,true) &! collision_point (x+128,y,wld_water1,true,true)
- {
- sprite_index=spr_wld_grass_down_left;
- }
- //water down & right
- if collision_point (x+128,y,wld_water1,true,true) && collision_point (x,y+128,wld_water1,true,true)
- &! collision_point (x,y-128,wld_water1,true,true) &! collision_point (x-128,y,wld_water1,true,true)
- {
- sprite_index=spr_wld_grass_down_right;
- }
- //water up & left & right
- if collision_point (x-128,y,wld_water1,true,true) && collision_point (x,y-128,wld_water1,true,true)
- && collision_point (x+128,y,wld_water1,true,true) &! collision_point (x,y+128,wld_water1,true,true)
- {
- sprite_index=spr_wld_grass_up_left_right;
- }
- //water down & left & right
- if collision_point (x-128,y,wld_water1,true,true) && collision_point (x,y+128,wld_water1,true,true)
- && collision_point (x+128,y,wld_water1,true,true) &! collision_point (x,y-128,wld_water1,true,true)
- {
- sprite_index=spr_wld_grass_down_left_right;
- }
- //water left & up & down
- if collision_point (x-128,y,wld_water1,true,true) && collision_point (x,y-128,wld_water1,true,true)
- && collision_point (x,y+128,wld_water1,true,true) &! collision_point (x+128,y,wld_water1,true,true)
- {
- sprite_index=spr_wld_grass_left_up_down;
- }
- //water right & up & down
- if collision_point (x+128,y,wld_water1,true,true) && collision_point (x,y-128,wld_water1,true,true)
- && collision_point (x,y+128,wld_water1,true,true) &! collision_point (x-128,y,wld_water1,true,true)
- {
- sprite_index=spr_wld_grass_right_up_down;
- }
- //water left & up & down & right
- if collision_point (x-128,y,wld_water1,true,true) && collision_point (x,y-128,wld_water1,true,true)
- && collision_point (x,y+128,wld_water1,true,true) && collision_point (x+128,y,wld_water1,true,true)
- {
- sprite_index=spr_wld_grass_up_down_right_left;
- }
132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code...