Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Ako vyriešiť tento problém s funkciou v JS [hra]

Zdravím, pracujem na svojej hre v JS a potreboval by som radu ohľadom toho ako vyriešiť jeden problém.
V hre na ktorej pracujem je objekt ktorý chcem aby fungoval ako "elektrina".. Nastavite si kable a potrebujem vyriešiť to aby hra vedela ako tie kable pôjdu za sebou aby sa aktivovali.. Obrazok ako vyzerá "elektrina" od páčky ktorá to aktivuje.. goo.gl/YvfLzC

To čo chcem dosiahnut je ak stlacite pačku bude tento "obvod" vyzerat nejako takto.. aby sa kazdemu bloku nastavila hodnota "active" na 1.. napriklad.. goo.gl/9w8qqG

Ako to robím teraz by teoreticky malo fungovať ale hádže mi to error na každom prehliadači z dôvodu volania funkcie vo funkcii veľa krát..

Ked stlacim páčku{
abcd(0,x - 48,direction);
abcd(2,x - 48,direction);
abcd(3,x - 48,direction);
abcd(0,x - 48,y,direction);
abcd(1,x - 48,y,direction);
abcd(5,x - 48,y,direction);
abcd(1,x + 48,y,direction);
abcd(2,x + 48,y,direction);
abcd(4,x + 48,y,direction);
abcd(3,x,y + 48,direction);
abcd(4,x,y + 48,direction);
abcd(5,x,y + 48,direction);
} //Funkcia abcd ma parametre 1. - akým smerom sa ten blok otaca.. je 6 smerov od 0 - 5
2. x pozicia ktora sa ma checknut 3. y pozicia ktora sa ma checknut 4. tu sa len vlozi stav na aký sa má zmenit ten blok
ak sa najde.. ci sa ma aktivovat alebo deaktivovat..

Takže po tom ako sa stlaci pačka, checknu sa vsetky mozne bloky ktore by mali fungovat a ak sa najdu tak sa aktivuju..
Ak sa ale najdu a aktivuju tak sa znova spusti tato funkcia abcd ale od toho bloku ktory sa aktivoval.. Opäť sa hladaju bloky ktore by
boli vhodne a mali by fungovat a ak sa najdu tak sa znova aktivuje funkcia.. Jednoducho povedane to hlada vsetky mozne cesty az kym sa nezastavi.. Tu som sa to pokusil chaoticky nakreslit.. goo.gl/zkq3qw

Tu je kod funckie abcd

            abcd = function(id,x,y,d){
				for(var i = 0; i < nblocks[0].length; i += 1){
					if(nblocks[0][i].direction == id){
						if(nblocks[0][i].position[0] == x & //position[0] je vlastne X
						nblocks[0][i].position[1] == y){ //position[1] je vlastne Y v arrayi kde su tieto bloky zapisane
							nblocks[0][i].active = d;
							if(id == 0){
								abcd(1,x + 48,y,d);
								abcd(2,x + 48,y,d);
								abcd(4,x + 48,y,d);
								abcd(3,x,y + 48,d);
								abcd(4,x,y + 48,d);
								abcd(5,x,y + 48,d);
							}else if(id == 1){
								abcd(0,x - 48,y,d);
								abcd(1,x - 48,y,d);
								abcd(5,x - 48,y,d);
								abcd(1,x + 48,y,d);
								abcd(2,x - 48,y,d);
								abcd(4,x - 48,y,d);
							}else if(id == 2){
								abcd(0,x - 48,y,d);
								abcd(1,x - 48,y,d);
								abcd(5,x - 48,y,d);
								abcd(3,x,y + 48,d);
								abcd(4,x,y + 48,d);
								abcd(5,x,y + 48,d);
							}else if(id == 3){
								abcd(0,x,y - 48,d);
								abcd(2,x,y - 48,d);
								abcd(3,x,y - 48,d);
								abcd(3,x,y + 48,d);
								abcd(4,x,y + 48,d);
								abcd(5,x,y + 48,d);
							}else if(id == 4){
								abcd(0,x,y - 48,d);
								abcd(2,x,y - 48,d);
								abcd(3,x,y - 48,d);
								abcd(0,x - 48,y,d);
								abcd(1,x - 48,y,d);
								abcd(5,x - 48,y,d);
							}else if(id == 5){
								abcd(0,x,y - 48,d);
								abcd(2,x,y - 48,d);
								abcd(3,x,y - 48,d);
								abcd(1,x + 48,y,d);
								abcd(2,x + 48,y,d);
								abcd(4,x + 48,y,d);
							}
						}
					}
				}
			};

Takto podľa toho čo si myslim by to malo fungovať.. no je to ako som pochopil dost dementne riesenie ked to hadze chybu.. zrejme nieje vhodne volat vlastnu funkciu vo funkcii niekolko-desat-krát..

Vedel by mi niekto poradiť ako by som to mohol efektivne spravit??
Bloky su zapisane normalne ako array takto

0
:
Block {position: Array(2), id: 13, damage: 120, direction: 2, active: 1}
Block {position: Array(2), id: 13, damage: 120, direction: 0, active: 1}
Block {position: Array(2), id: 13, damage: 120, direction: 4, active: 0}....

Odpověď na otázku

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny