Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Problem]Zmiana w tablicy X zmienia również dane w tablicy Y
Kongo
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 12.05.2013

Ostrzeżenie: (0%)
-----


@EDIT: NAPRAWIONE ,lecz jeśli ktoś wie dlaczego tak się dzieje prosiłbym o wytłumaczenie!
Jak naprawiłem:
Zdefiniowałem 2 zmienną (arrka2) i zrobiłem pętlę na kolumny arrka. później dałem arrka2[cs] = arrka[c]; i jest okey.
###########################

Witam! Piszę sobie skrypt w NodeJS (w którym piszemy w JavaScript) i mam mianowicie taki problem iż przy zmianie pozycji x lub y w tablicy MapMobs zmienia również dane w tablicy MapMobsOrginal.

Sposób tworzenia tablicy MapMobsOrginal i MapMobs:
Kod
var i = Array();
for(c in MAPMOBS) {
if(i[MAPMOBS[c]['Map_ID']] == undefined) i[MAPMOBS[c]['Map_ID']] = 0;
if(MapMobs[MAPMOBS[c]['Map_ID']] == undefined) MapMobs[MAPMOBS[c]['Map_ID']] = {};
if(MapMobsOrginal[MAPMOBS[c]['Map_ID']] == undefined) MapMobsOrginal[MAPMOBS[c]['Map_ID']] = {};
  //MapMobs - my array
  //MAPMOBS - MySQL Array
  var kn;
  for(ka in Mobs) {
   if(Mobs[ka]['Id'] == MAPMOBS[c]['Mob_ID']) {
    kn = ka;
    break;
   }
  }
  var arrka = {
   '0': i[MAPMOBS[c]['Map_ID']]+1,     //Id
   '1': 1,       //Hp Mobs[kn]['Hp']
   '2': MAPMOBS[c]['x'],      //x
   '3': MAPMOBS[c]['y'],      //y
   '4': Mobs[kn]['Name'],     //Name
   '5': Mobs[kn]['Level'],    //Level
   '6': Mobs[kn]['Hp'],       //Max-Hp
   '7': 'WALKING',            //What he do
   '8': MAPMOBS[c]['Mob_ID'], //Mob Id in General
   '9': MAPMOBS[c]['Id']      //Mob Id in Game
  };
  //jak tu zmieniasz to pamiętaj o lini ok. 387 w nw_functions
  MapMobs[MAPMOBS[c]['Map_ID']][i[MAPMOBS[c]['Map_ID']]] = arrka;
  MapMobsOrginal[MAPMOBS[c]['Map_ID']][i[MAPMOBS[c]['Map_ID']]] = arrka;
  i[MAPMOBS[c]['Map_ID']]++;
}


To jak zmieniam x i y nie ma znaczenia ,ale wrzucę:
(stworek nie może się ruszyć więcej niż o 2 pola od miejsca w którym został utworzony (czyli max zmiana x o 2 i y o 2)
Kod
var MobsPosChange = setInterval(function() {
for(a in MapMobs) {
if(a == 0 || a == 2) continue;
  //S- tam jakies moby. 20% szansy na ruch :
//Rozpier... tablicę:
var nox = MapMobs[a];
for(b in nox) {
var Mob = nox[b];
if(Mob[7] == 'WALKING') {
//console.log('Split for map: '+a+'\nMobKey: '+b+'\nMob Id: '+Mob[0]);
// if(rand(1,2) == 1) { //
   //Okey lecim.
   //Wybierz w jakim kierunku : 2 3
  var directs=Array('',true,true,true,true); //żaden, góra, dół, lewo, prawo
var Mob2= MapMobsOrginal[a][b];    // 3 - y, 2 - x
   if(parseInt(Mob[3]) == parseInt(Mob2[3])-2) directs[1]=false; //Nie moze isc do gory
   if(parseInt(Mob[3]) == parseInt(Mob2[3])+2) directs[2]=false; //Nie moze isc do dolu
   if(parseInt(Mob[2]) == parseInt(Mob2[2])-2) directs[3]=false; //Nie moze isc do lewo
   if(parseInt(Mob[2]) == parseInt(Mob2[2])+2) directs[4]=false; //Nie moze isc do prawo
   var i = 1;
   console.log(directs);
   console.log("Up: "+parseInt(Mob[3])+' == '+(parseInt(Mob2[3])-2));
   console.log("Down: "+parseInt(Mob[3])+' == '+(parseInt(Mob2[3])+2));
   console.log("Left: "+parseInt(Mob[2])+' == '+(parseInt(Mob2[2])-2));
   console.log("Right: "+parseInt(Mob[2])+' == '+(parseInt(Mob2[2])+2));
   console.log("############################");
   for(i>0;i<=2;) {
   var direct = rand(1,4);
   if(direct == 1 && directs[1] == true) { MapMobs[a][b][3]--; break; } //Up
   if(direct == 2 && directs[2] == true) { MapMobs[a][b][3]++; break; } //Down
   if(direct == 3 && directs[3] == true) { MapMobs[a][b][2]--; break; } //Left
   if(direct == 4 && directs[4] == true) { MapMobs[a][b][2]++; break; } //Right
   }
//  }
}
//Tu daj nową warto
console.log(MapMobsOrginal);
}
for(sendall in CLIENTS_MAP[a]) {
if(CLIENTS_MAP[a][sendall] != undefined) {
CLIENTS_MAP[a][sendall].emit('map', {'what': 'MobsOnMap', 'data': MapMobs[a]});
  }
}
}
}, 10000); //TRUE - 10000


Jeśli ktoś czegoś nie rozumie to wytłumaczę (IMG:style_emoticons/default/wink.gif) .

Wielkie dzięki za pomoc!

Jeszcze dorzucę jak wygląda to z poziomu konsoli:
(IMG:http://s3-eu-west-1.amazonaws.com/screenshooter-legacy/ed-lravcwhfletcwgzdmdkh.jpg)
tam gdzie mamy Up/Left/Right/Down:.... to po lewej jest jego aktualna koordynata x lub y ,a po prawej stronie jest wartość stała!

Ten post edytował Kongo 22.12.2013, 17:55:42
Go to the top of the page
+Quote Post
lukasz1985
post
Post #2





Grupa: Zarejestrowani
Postów: 205
Pomógł: 43
Dołączył: 5.03.2012

Ostrzeżenie: (0%)
-----


Proste - dlatego, że tablice są przypisywane przez referencję, a nie przez kopiowanie.


[JAVASCRIPT] pobierz, plaintext
  1. // kopiowanie:
  2.  
  3. var a = 0;
  4. var b = 0;
  5.  
  6. a = 10;
  7. b; // wciąże jest 0
  8.  
  9. // referencja
  10.  
  11. var tab1 = [0,1,2,3,4];
  12. var tab2 = tab1;
  13.  
  14. tab2[0] = 10;
  15.  
  16. tab1[0] ; // 10;
  17.  
  18.  
[JAVASCRIPT] pobierz, plaintext



Piszę o tym tutaj:

http://kursjs.net76.net/spis-tresci/82-pro...ja-i-kopiowanie

Ten post edytował lukasz1985 22.12.2013, 19:20:31
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 15:35