Hallo alle zusammen!
Ich bin gerade an einem neuen Projekt, bei dem die Welt von Spieler beliebig geändert werden kann.
Wenn dies geschieht, sollen sich aber auch die Sprites änder, zb. die obere kante einer platform darzustellen.
Dafür benutze ich momentan eine menge if abfragen. Bei vielen Objekten im raum wird das aber zu einer gewaltigen Performance Bremse.
gibt es eine andere möglichkeit als das mit if's zu lösen?
mein momentaner code sieht so aus:
Spoiler anzeigen
Alles anzeigen
Das muss doch irgendwie besser gehen oder?
vielen dank schonmal im vorraus!
mfg gmr_08
Ich bin gerade an einem neuen Projekt, bei dem die Welt von Spieler beliebig geändert werden kann.
Wenn dies geschieht, sollen sich aber auch die Sprites änder, zb. die obere kante einer platform darzustellen.
Dafür benutze ich momentan eine menge if abfragen. Bei vielen Objekten im raum wird das aber zu einer gewaltigen Performance Bremse.
gibt es eine andere möglichkeit als das mit if's zu lösen?
mein momentaner code sieht so aus:

GML-Quellcode
- var a , iid , xx , yy;
- xx=floor(x/16)
- yy=floor(y/16)
- image_speed=0
- //
- a[1]=ds_grid_get(variable_global_get("map_0"),xx-1,yy-1)
- a[2]=ds_grid_get(variable_global_get("map_0"),xx,yy-1)
- a[3]=ds_grid_get(variable_global_get("map_0"),xx+1,yy-1)
- a[4]=ds_grid_get(variable_global_get("map_0"),xx+1,yy)
- a[5]=ds_grid_get(variable_global_get("map_0"),xx+1,yy+1)
- a[6]=ds_grid_get(variable_global_get("map_0"),xx,yy+1)
- a[7]=ds_grid_get(variable_global_get("map_0"),xx-1,yy+1)
- a[8]=ds_grid_get(variable_global_get("map_0"),xx-1,yy)
- var i;
- i=1
- while(i!=9)
- {
- a[i]=string(a[i])
- i+=1
- }
- //Change Subimage
- //mitte
- if ( (a[2]!="0" && a[2]!="") && (a[4]!="0" && a[4]!="") && (a[6]!="0" && a[6]!="") && (a[8]!="0" && a[8]!="") )//oben,unten,links,rechts muss besetzt sein
- {
- image_index=0;//mitte
- exit;
- }
- //oben links
- if ( (a[8]="0" || a[8]="") && (a[2]="0" || a[2]="") && (a[4]!="0" && a[4]!="") )//links muss frei sein, oben auch, rechts besetzt, der Rest ist egal
- {
- image_index=1;//oben links
- exit;
- }
- //oben rechts
- if ( (a[4]="0" || a[4]="") && (a[2]="0" || a[2]="") && (a[8]!="0" && a[8]!="") )//rechts muss frei sein, oben auch, links besetzt, der Rest ist egal
- {
- image_index=3;//oben rechts
- exit;
- }
- //oben
- if ( (a[2]="0" || a[2]="") )//oben muss frei sein, der rest ist egal
- {
- image_index=2;//oben
- exit;
- }
- //links
- if ( (a[8]="0" || a[8]="") && (a[2]!="0" && a[2]!="") && (a[4]!="0" && a[4]!="") && (a[6]!="0" && a[6]!="") )//links muss frei sein, rechts & oben & unten besetzt der rest ist egal
- {
- image_index=8;//links
- exit;
- }
- //rechts
- if ( (a[4]="0" || a[4]="") && (a[2]!="0" && a[2]!="") && (a[8]!="0" && a[8]!="") && (a[6]!="0" && a[6]!="") )//rechts muss frei sein, links & oben & unten besetzt der rest ist egal
- {
- image_index=4;//rechts
- exit;
- }
- //unten links
- if ( (a[8]="0" || a[8]="") && (a[6]="0" || a[6]="") && (a[4]!="0" && a[4]!="") )//links & unten muss frei sein, rechts besetzt der rest ist egal
- {
- image_index=7;//unten links
- exit;
- }
- //unten rechts
- if ( (a[4]="0" || a[4]="") && (a[6]="0" || a[6]="") && (a[8]!="0" && a[8]!="") )//rechts & unten muss frei sein, rlinks besetzt der rest ist egal
- {
- image_index=5;//unten rechts
- exit;
- }
- //unten
- if ( (a[6]="0" || a[6]="") )//unten muss frei sein
- {
- image_index=6;//unten
- exit;
- }
- //trifft nichts des oberen zu? =mittelfeld!
- image_index=0;
- exit;
Das muss doch irgendwie besser gehen oder?
vielen dank schonmal im vorraus!
mfg gmr_08