Javascript variable kopiëren

Gestart doorAntonn6 reacties74 weergaven

7 berichten · pagina 1 van 1

Antonn

Lid · Topicstarter

Berichten
8.649
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Hallo,

Ik ben sinds kort begonnen aan een HTML5 2D game. Alleen loop ik nu vast. Deze code heb ik nu gemaakt:

function maptopf() {
    var pftempmap = map.slice(0);
    for (x = 0; x < mapxtiles; x++) {
        for (y = 0; y < mapytiles; y++) {
            pftempmap[x][y] = ((pftempmap[x][y] == 0) ? 1 : 0);
        }
    }
    return pftempmap;
}


Als ik dit dan doe:

map = [
    [2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
    ];
    var newmap = maptopf();


Zou er dit moeten gebeuren:

map = [
    [2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
    ];
    newmap = [
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    ];


maar dit gebeurt er in werkelijkheid:

map = [
    [2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
    [2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
    ];
    var newmap = maptopf();


Zou er dit moeten gebeuren:

map = [
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    ];
    newmap = [
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    ];


Hij overschrijft de variable map ook terwijl hij die had moeten kopiëren. Ik heb al uren gedebugt en geGoogeld maar ik vind niets. Iemand raad?

Ik heb al ondervonden dat door regel #5 in de bovenste code te commenten, het probleem is verholpen dat de map variable wordt verandert. Mar de functie werkt dan uiteraard niet meer en met de variable newmap gebeurt dan ook niets.

Grtz
0
Berichten
6.485
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Oke ik zie een aantal dingen fout gaan, ik weet niet of dit ligt aan het feit dat je hier maar kleine delen post of doordat er fouten zijn:

1. in de functie bestaan de variablen mapxtiles en mapytiles
2. in de functie bestaat map niet, en deze wordt ook niet meegegeven

Ik denk overigens dat je aanpak verkeerd is voor wat je wil bereiken.

Als je javascript voorbeelden wil zien over mappen kan je http://atlandor.nl/ bekijken, dat is een project dat ik ooit wilde starten. Hij werkt volgens mij goed in webkit browsers, andere heb ik niet getest.

Als je je vraag duidelijk kan stellen, en iets duidelijk kan maken wat je nu bereiken wil. Dan kan je me ff pm sturen.
0
Antonn

Lid · Topicstarter

Berichten
8.649
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Even een verduidelijking van wat ik probeer te bereiken:

De map (code #2 in startpost) is een map die ik heb gemaakt voor mijn 2D spel. 0 = geen tegel 1-999 = wel tegel en het nummer is de hoogte.

Nu wil ik gaan kutten met A* pathfinding en die wilt de map op een andere manier. Die wilt 0 voor wel een tegel en 1 voor geen tegel. Dit script zou dat dus moeten omzetten.

Dat doet het ook goed, maar het overschrijft de map variable. Dat is het enige probleem.

Dit is trouwens de volledige functie, en indien ik console.log(map) in de functie uitvoer geeft die gewoon de map dus de variable map is gewoon "beschikbaar" vanuit de functie.
0
Berichten
6.485
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Oke, leuk dat je A* gaat doen. Dat heb ik voor school als WiD project gedaan.

Codeblok (voorbeeld.php):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

map = [[0, 1, 2],[0, 1, 2]];

function prepareMap(map) {
mapxtiles = map.length;

var preparedMap = [];

for (x = 0; x < mapxtiles; x++) {
mapytiles = map[x].length;
preparedMap[x] = [];
for (y = 0; y < mapytiles; y++) {
preparedMap[x][y] = (map[x][y] === 0) ? 1 : 0;
}
}

return preparedMap;
}

var preparedMap = prepareMap(map);
0
Antonn

Lid · Topicstarter

Berichten
8.649
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Rogier schreef:
Oke, leuk dat je A* gaat doen. Dat heb ik voor school als WiD project gedaan.
Codeblok (voorbeeld.php):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

map = [[0, 1, 2],[0, 1, 2]];

function prepareMap(map) {
mapxtiles = map.length;

var preparedMap = [];

for (x = 0; x < mapxtiles; x++) {
mapytiles = map[x].length;
preparedMap[x] = [];
for (y = 0; y < mapytiles; y++) {
preparedMap[x][y] = (map[x][y] === 0) ? 1 : 0;
}
}

return preparedMap;
}

var preparedMap = prepareMap(map);
worshippy
Zeeeeeeer veel dank biggrin
Eerst had ik iets soortgelijks maar ik was regel #10 vergeten emo
0
Antonn

Lid · Topicstarter

Berichten
8.649
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Maartenf schreef:
Dit kan je ook helpen. smilehttp://buildnewgames.com/astar/
Neen ik heb het al en het werkt allemaal super goed biggrin
Toch bedankt smile
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren