PDA

Volledige versie bekijken : 3dArray opbouwen.


Emveedee
%Europe/Berlin %743 %2006, 18:50
Ik heb een scriptje geschreven, dat aan de hand van een array die ik invoer, een andere array maakt.

De eerste array is een 2d array, de array die eruitkomt is een 3d array.

(Dit script heb k gemaakt om me heel veel array-schrijfwerk te besparen)


var heightArray:Array = new Array(
[400,400,405,410],
[400,400,405,405],
[400,395,400,405],
[395,390,395,400],
[400,395,400,400],
[400,400,400,400]
);

function calculateArray(item:Array):Void{
var aWidth:Number = item[0].length;
trace("aWidth: "+aWidth);
var aHeight:Number = item.length;
trace("aHeight: "+aHeight);
var tArray:Array = new Array();
var ttArray:Array = new Array();
var size:Number = 50;
for(var h = 0; h < aHeight; h++){
for(var w = 0; w < aWidth; w++){
ttArray.push(w*size);
ttArray.push(item[h][w]);
ttArray.push(h*size);
tArray.push(ttArray);
ttArray = new Array(); //Hier zou tt Array leeggemaakt moeten worden.
trace(tArray);
}
myArray.push(ttArray);
tArray = new Array();
}
}



calculateArray(heightArray);

Het probleem is nu het volgende:
ttArray wordt niet leeggemaakt, zodat de array veel te groot wordt, en niet klopt.

0,400,0
0,400,0,50,400,0
0,400,0,50,400,0,100,405,0
0,400,0,50,400,0,100,405,0,150,410,0
0,400,50
0,400,50,50,400,50
0,400,50,50,400,50,100,405,50
0,400,50,50,400,50,100,405,50,150,405,50
0,400,100
0,400,100,50,395,100
0,400,100,50,395,100,100,400,100
0,400,100,50,395,100,100,400,100,150,405,100
0,395,150
0,395,150,50,390,150
0,395,150,50,390,150,100,395,150
0,395,150,50,390,150,100,395,150,150,400,150
0,400,200
0,400,200,50,395,200
0,400,200,50,395,200,100,400,200
0,400,200,50,395,200,100,400,200,150,400,200
0,400,250
0,400,250,50,400,250
0,400,250,50,400,250,100,400,250
0,400,250,50,400,250,100,400,250,150,400,250

Dit maakt hij..

Maar dit moet t zijn

0,400,0,50,400,0,100,405,0,150,410,0
0,400,50,50,400,50,100,405,50,150,405,50
0,400,100,50,395,100,100,400,100,150,405,100
0,395,150,50,390,150,100,395,150,150,400,150
0,400,200,50,395,200,100,400,200,150,400,200
0,400,250,50,400,250,100,400,250,150,400,250

Wat doe ik fout?

Roenes
%Europe/Berlin %753 %2006, 19:05
Ik snap niet helemaal waar je heen wil, maar volgens mij wil je dit bereiken:
var heightArray:Array = new Array(
[400, 400, 405, 410],
[400, 400, 405, 405],
[400, 395, 400, 405],
[395, 390, 395, 400],
[400, 395, 400, 400],
[400, 400, 400, 400]);

function calculateArray(item:Array):Void
{
var aWidth:Number = item[0].length;
trace("aWidth: " + aWidth);
var aHeight:Number = item.length;
trace("aHeight: " + aHeight);
var tArray:Array = new Array();
var ttArray:Array = new Array();
var size:Number = 50;
for (var h = 0; h < aHeight; h++)
{
tArray = new Array();
for (var w = 0; w < aWidth; w++)
{
ttArray = new Array();
ttArray.push(w * size);
ttArray.push(item[h][w]);
ttArray.push(h * size);
tArray.push(ttArray);
}
myArray.push(ttArray);
trace(tArray);
}
}

calculateArray(heightArray);Dit geeft in ieder geval de juiste output bij mij :)

Emveedee
%Europe/Berlin %796 %2006, 20:07
Hmsh, ik krijg deze output:

0,400,0,50,400,0,100,405,0,150,410,0
0,400,50,50,400,50,100,405,50,150,405,50
0,400,100,50,395,100,100,400,100,150,405,100
0,395,150,50,390,150,100,395,150,150,400,150
0,400,200,50,395,200,100,400,200,150,400,200
0,400,250,50,400,250,100,400,250,150,400,250
150,410,0,150,405,50,150,405,100,150,400,150,150,4 00,200,150,400,250

Niet de goede dus?

Het idee hierachter is dit:
Ik probeer dus een 3d wereld te maken (ben er nog lang niet).
Ik heb nu een scriptje geschreven waarmee ik handig 3d kan tekenen.
Dit gaat aan de hand van een 3d array.

var myArray:Array = new Array(
[[0,0,0],[10,0,0]],
[[0,0,10],[10,0,10]]
);
// het is dus eigenlijk zo:
// [[x,y,z],[x,y,z]],
// z is de diepte.
// Ik kan met de z en de y of de x de 2d x en y berekenen.
// vervolgens: Als er een nieuwe regel is:
// moveTo(x,y);
// daarna lineTo naar t volgende punt.


Nu is t dus zo dat als ik dan een map wil tekenen, ik heeeel veel punten moet gaan opgeven. (wil ik normaal kunnen variëren in de hoogte).
Het is dus makkelijker om een 2d array te maken met mn hoogtes erin,
die te laten omzetten naar een 3d array, en die 3d array vervolgens te laten tekenen.

Snappie.

Maar t probleem zit m er dus in (bij mijn script) dat ttArray niet leeggemaakt wordt...

Roenes
%Europe/Berlin %806 %2006, 20:21
Test het nog eens want als ik mijn code kopieer en plak uit deze topic en dan de output kopieer naar kladblok oid dan komt die exact overeen met hetgeen wat jij in de beginpost aangaf wat eruit moet komen...

Dus je zult iets verkeerd getest hebben denk ik :)

Emveedee
%Europe/Berlin %829 %2006, 20:53
Hmsh, heel vreemd:


[400, 400, 405, 410], -> 0, 400,0, 50, 400,0, 100,405,0, 150,410,0
[400, 400, 405, 405], -> 0, 400,50, 50, 400,50, 100,405,50, 150,405,50
[400, 395, 400, 405], -> 0, 400,100, 50, 395,100, 100,400,100, 150,405,100
[395, 390, 395, 400], -> 0, 395,150, 50, 390,150, 100,395,150, 150,400,150
[400, 395, 400, 400], -> 0, 400,200, 50, 395,200, 100,400,200, 150,400,200
[400, 400, 400, 400]); -> 0, 400,250, 50, 400,250, 100,400,250, 150,400,250

150,410,0, 150,405,50, 150,405,100, 150,400,150, 150,400,200, 150,400,250


Die onderste rij getallen, die horen er niet.. (maar hij genereert ze wel)

Waar haalt ie die vandaan?

Roenes
%Europe/Berlin %927 %2006, 23:16
Welke array trace jij dan? Want als ik mijn code dus in een lege fla uitvoer krijg ik deze data te zien:
0,400,0,50,400,0,100,405,0,150,410,0
0,400,50,50,400,50,100,405,50,150,405,50
0,400,100,50,395,100,100,400,100,150,405,100
0,395,150,50,390,150,100,395,150,150,400,150
0,400,200,50,395,200,100,400,200,150,400,200
0,400,250,50,400,250,100,400,250,150,400,250Kopiee r je dus wel echt het gehele script of zo? Want er moet ergens iets fout zitten in je fla lijkt me.. :)

SaphuA
%Europe/Berlin %264 %2006, 07:21
Mvd,
Je zult wel ergens anders in je fla nog een code hebben staan die dat traced ;)

~Sph