Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [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

Posty w temacie


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: 23.08.2025 - 15:08