Toon posts:

[flash] array uit textveld

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een tilebased game (zoals zovelen) maar nu zit ik een beetje vast.

Ik wil dat mensen rechtstreeks een 2 dimensionele array kunnen plakken in een textveld en dan wil ik deze uittekenen.

Nu wil ik dus de waarde van een textveld vb:
[[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,1,1,1,1],[5,1,5,5,5,5,5,5,5,5,1,1,1,1,1,6,1,1,1,1],[5,5,5,5,5,1,1,1,5,5,1,1,1,1,1,6,1,1,1,1],[1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,5,5,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]]
omzetten naar een array zodat ik deze kan aanspreken met array[x][y].

Ik heb al verschillende syntaxen geprobeerd maar hij steekt de waardes in de eerste cel van de array.
Moet ik nu echt met split en join en zo heel mijn text gaan opknippen om deze in een array te krijgen?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 12:26

crisp

Devver

Pixelated

als dat de precieze notatie is dan kan je het door eval() heenhalen, maar dat levert uiteraard ook weer een risico op aangezien je dan allerlei code kan injecteren.

Intentionally left blank


Verwijderd

Topicstarter
crisp schreef op dinsdag 18 juli 2006 @ 10:51:
als dat de precieze notatie is dan kan je het door eval() heenhalen, maar dat levert uiteraard ook weer een risico op aangezien je dan allerlei code kan injecteren.
In de help staat dat eval sinds flash 4 niet meer gebruikt wordt om arrays te simuleren maar alleen nog om movieclips aan te spreken, ik krijg het alleszins niet aan de praat met eval.

Het lijkt nochtans zo simpel :(

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 12-01 16:11
Hier heb je vast wel wat aan: http://www.tonypa.pri.ee/tbw/start.html

Verwijderd

Topicstarter
thx, deze had ik al gezien maar mij probleem is dat

myMap = [
[1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 1, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 1, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 1],
[1, 1, 1, 1, 1, 1, 1, 1]
];


wel werkt maar zodra de

[1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 1, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 1, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 1],
[1, 1, 1, 1, 1, 1, 1, 1]
];

uit een textveld komt ik er geen array meer van kan maken en dus aanspreken op de normale manier

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Kan je het ook niet omzetten naar een array d.m.v. split(",");?

Verwijderd

Topicstarter
radem205 schreef op dinsdag 18 juli 2006 @ 11:14:
Kan je het ook niet omzetten naar een array d.m.v. split(",");?
Omdat het een 2dimensionele array is is dat een beetje prustwerk denk ik, omdat er "," tussen de arrays staan en in de arrays.

Met een beetje programmeerwerk is dit wel doenbaar op deze manier maar er moet toch een simpelere manier zijn?

  • Arjen Tempel
  • Registratie: Januari 2002
  • Niet online
Eerst splitsen op ],[ geeft je de regels.
Vervolgens splits je de regels op , in kolommen.

[ Voor 8% gewijzigd door Arjen Tempel op 18-07-2006 11:41 ]


  • LB Back
  • Registratie: November 2004
  • Laatst online: 03-06-2025
Kun je mensen niet alleen de nullen en enen in laten vullen?
Zoiets als:

1, 1, 1, 1, 1, 1, 1, 1
1, 0, 0, 0, 0, 0, 0, 1
1, 0, 1, 0, 0, 0, 0, 1
1, 0, 0, 0, 0, 1, 0, 1
1, 0, 0, 0, 0, 0, 0, 1
1, 1, 1, 1, 1, 1, 1, 1

Dat voorkomt dat mensen een extra [ of ] aan het begin en eind vergeten
(zoals jij ook bij het pasten van het voorbeeldje uit het tekstveld :P )

Dan eerst splitten op \r
dat weer splitten op ,
en klaaris je tweedimensionale array.

Om het helemaal fool-proof te maken kun je ook met losse tekstveldjes in een grid
of een datagrid werken.

Verwijderd

Ik denk zelf dat de mensen juist niet nullen en eenen moeten vullen.
Gezien hier maar steeds 8 waarden per regel in gebruik zijn zou het
handiger zijn met hexadecimale codes te werken (maakt het splitsen
ook simpeler)..

Verwijderd

Topicstarter
De flash app is eigelijk gewoon een snelle mapbuilder die arrays genereerd om deze gewoon in andere pakketen (java) over te nemen in de code.

Het genereren naar een textveld is geen probleem, er moeten ook arrays moeten kunnen worden ingeven en "geplot" om de map na te kijken.

Andere structuren en zo is dus niet mogelijk omdat het easy copypasteble moet zijn.

Verwijderd

Topicstarter
Voor de geintresseerden ik heb het nu zo gedaan:


function splitIt(what):Array{
var temp:String = what
arr_array = temp.split("[[")

temp = arr_array[1].toString()
arr_array = temp.split("]]")

temp = arr_array[0].toString()
arr_array = temp.split("],[")

for(i=0;i<arr_array.length;i++){
arr_array[i] = arr_array[i].split(",")
}

return arr_array;
}


Toch raar dat het niet korter kan, thx anyway

Verwijderd

Een alternatieve methode. Ik heb hem voor het gemak in js gemaakt. Voor Flash heb je wel een externe regexp-klasse nodig.

JavaScript:
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
34
35
function stringToArray(s)
{
    s = s.replace(/[\s\n\r\t]/g, "");
    var a = s.split(",");
    var hasSubArray = false;
    var tmp = [];   
    var result = [];        

    for (var i in a)
    { 
        if (i != (a.length -1) && (/\]/.test(a[i])))
        {
            hasSubArray = false;
            tmp.push(/[^\]]+/.exec(a[i])); 
            result.push(tmp);
            tmp = "";
        }
        else if (i != 0 && (/\\[/.test(a[i]) || hasSubArray))
        { 

            hasSubArray = true;
            tmp.push(/[^\\[]+/.exec(a[i])); 
        }
        else
        {
            if (tmp == "")
            {
                result.push(/[^\\[\]]+/.exec(a[i]));
            }
            
        }   
    }

    return result;
}
Pagina: 1