Avatar
Lukáš Křehula
Redaktor
Avatar
Lukáš Křehula:

Ahoj lidi,
potřeboval bych pomoct opravit chybu v následujícím kódu:
Mám hru, kde vytvářím bloky, přes které musí hráč přeskočit aby neprohrál. Tyhle bloky se pohybují doleva o X pixelů každých 25ms a spawnují se v rozmezí 500 - 1500 px od hráče.
Můj problém: Stačí mi mít vytvořených pouze 10 (možná i míň) tady těchto překážek, takže je pokaždé chci dovytvořit když bude nějaká chybět. Problém je, že se mi vytváří prázdná pole a ta hodně rychle stoupají (ikdyž je to dost zvláštní). Prvních 10 překážek se vytvoří a dál už se mi vytvářejí pouze prázdná pole (nechal jsem si vypisovat .length a dostal jsem se k řádům desetitisícům).
Zde je kód:
Tady detekuji kolizi s hráčem a taky, kdyby se překážka dostala za mapu tak ji zničím:

for(var i = prekazkaX.length; i >= 0; i--)
                                        {
                                                if(Kolize(i))
                                                {
                                                        hrac_Rychlost -= rychlostMapy;
                                                        prekazkaX.splice(i, 1);
                                                }
                                                else
                                                {
                                                        prekazkaX[i] -= rychlostMapy;
                                                        if(prekazkaX[i] < -35)
                                                        {
                                                                hrac_Skore++;
                                                                prekazkaX.splice(i, 1);
                                                        }
                                                }
                                        }

Tady je vytvářím znovu:

function VytvoritPrekazky()
                        {
                                for(var i = prekazkaX.length; i <= 10; i++)
                                {
                                        if(i == 0)
                                                prekazkaX.push(hrac_X + 500);
                                        else
                                                prekazkaX.push(prekazkaX[i-1] + parseInt(Math.floor((Math.random() * 500) + 1500 - (hrac_Skore * 3))));
                                }
                        }

Děkuji za každou radu, jelikož já už jsem bezmocný ;(

 
Odpovědět 28.5.2015 10:06
Avatar
Lukáš Křehula
Redaktor
Avatar
Lukáš Křehula:

Ahoj, jen bych chtěl dodat, že tuto chybu už jsem vyřešil. Byla to moje hloupost :[
Chyba byla zde:

for(var i = prekazkaX.length; i >= 0; i--)

Cyklus se vždy dostal za hranici pole a vytvořil proto nové
Řešení:

for(var i = prekazkaX.length - 1; i >= 0; i--)
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 30.5.2015 13:15
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.