[vyřešeno]Bezradnost z hexů ...opět.

Pokud si nevíte s něčím rady ohledně tvorby v Game Makeru - pište sem!
Odpovědět
Goblin
Příspěvky: 134
Registrován: červenec 2, 2014, 2:42 pm

[vyřešeno]Bezradnost z hexů ...opět.

Příspěvek od Goblin » květen 3, 2016, 8:58 am

Fakt si s tímhle nevím rady. Co by měl tenhle skript dělat je tvorba hexových políček v kruhu kolem jednoho středového a uložit do arraye jejich souřadnice (array ve formátu x,y,z). Array v arrayi funguje. To mám odzkoušené. V principu jde o tvorbu hexů ve směrových "paprscích" a u každého pak jakoby svastikovým vzorem dopňuji políčka do strany

Pomocí vykreslování jsem zjistil následující:
-opravdu se všechna políčka vytvoří
-ale souřadnice jsou nesprávné
-skončím se dvěma hromádkami políček, které leží na sobě a mají shodné x,y a z
-souřadnice odpovídají koncům smyček "b" a "d"
-cell_data.blocked jsem použil abych pak barevně otestoval obě hromádky
-první hromádka leží tam, kde by měl být konec posledního paprsku (tedy konec smyčky "b")
-druhá jakoby na konci posledního "háku" (tedy konec smyčky "d")
-vypadá to jakoby se mi celá array přepisovala poslední použitou hodnotou x,y,z
-což mi nedává smysl, když hodnotu c, kterou používám, aby to hlídala, po tvorbě každého políčka zvýším...

Kód: Vybrat vše

globalvar cell;
var a,b,c,d,map_size,s,ders,na_stranu;

map_size=argument0

//úvodní buňka
s[0]=0
s[1]=0
s[2]=0

c=0
cell[c,cell_data.sour]=s
cell[c,cell_data.blocked]=false
c+=1


//hlavní smyčka -6směrů

for(a=0;a<6;a++){
    //vedlejší smyčka -počet kroků přímo
    
    for(b=1;b<=map_size;b++){
        //buňka v přímém směru
        
        s[0]=(b*sour[a,0])
        s[1]=(b*sour[a,1])
        s[2]=(b*sour[a,2])
        
        cell[c,cell_data.sour]=s
        cell[c,cell_data.blocked]=false
        c+=1
        
        //smyčka úkroků stranou
        for(d=1;d<b;d++){
            //nastavení směru
            na_stranu=(a+2) mod 6
            
            ders[0]=(s[0]+d*sour[na_stranu,0])
            ders[1]=(s[1]+d*sour[na_stranu,1])
            ders[2]=(s[2]+d*sour[na_stranu,2])
            
            cell[c,cell_data.sour]=ders
            cell[c,cell_data.blocked]=true
            c+=1
        }
    
    }
}

Už jsem eliminoval všechno mimo tento skript a jsem si naprosto jistý, že chyba je někde v něm, ale zírám na to už hodiny a nic nemůžu najít.

poznámka:Array "sour" je souřadnicový systém, kde všechna políčka mají shodný počet souřadnic. Je to ve formátu sour[směr,souřadnice]:

Kód: Vybrat vše

sour[0,0]=1
sour[0,1]=-1
sour[0,2]=0

sour[1,0]=1
sour[1,1]=0
sour[1,2]=-1

sour[2,0]=0
sour[2,1]=1
sour[2,2]=-1

sour[3,0]=-1
sour[3,1]=1
sour[3,2]=0

sour[4,0]=-1
sour[4,1]=0
sour[4,2]=1

sour[5,0]=0
sour[5,1]=-1
sour[5,2]=1
Naposledy upravil(a) Goblin dne květen 26, 2016, 3:21 pm, celkem upraveno 2 x.
"Understanding is not required. Only obedience."

Goblin
Příspěvky: 134
Registrován: červenec 2, 2014, 2:42 pm

Re: Bezradnost z hexů ...opět.

Příspěvek od Goblin » květen 26, 2016, 8:21 am

Edit: Je to dané způsobem, jakým fungují arraye. Je to občas trochu matoucí, ale když uvnitř smyčky lokální array nejprve inicializujete jako obyčejnou proměnnou, tak to funguje.
"Understanding is not required. Only obedience."

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti