Avatar
Jenkings
Redaktor
Avatar
Jenkings:

Zdravím. Tvořím v JS plošinovku, a dost se trápím s chozením postavy z kopce.

Problém je následující:

Mapa je uložena ve 2D poli, kde každý prvek reprezentuje jedno pole na mapě (40x40px). veškeré prázdné prvky jsou průchozí. Zbytek prvků které mají jakoukoliv hodnotu(která určuje texturu bloku) jsou neprůchozí. Jedinou výjimkou jsou políčka s hodnotou "hill", která tvoří kopce, které by postava měla plynule vyjít/sejít.

V metodě obsluhující pohyb v ose X, kterou má každý character, potom tedy kontroluji kolize atd.

podstatné řádky kódu metody:

var obstacle = level.obstacleAt(newPos, this.size); // zjišťuji zda character s něčím koliduje

if (obstacle){ //pokud ano
                /* Vycházení kopců */
                if(obstacle.contains("hill") && keys.right){
                        if(level.obstacleAt(newPos.plus(new Vector(1,0)), this.size)){
                                newPos = newPos.plus(new Vector(0,-1*(this.speed.x*step)))
                                this.pos = newPos;
                        }
                }else if(obstacle.contains("hill") && keys.left){
                        if(level.obstacleAt(newPos.plus(new Vector(-1,0)), this.size)){
                                newPos = newPos.plus(new Vector(0,this.speed.x*step))
                                this.pos = newPos;
                        }
                }
                /*    Konec vycházení kopců */
                else{
                        level.playerTouched(obstacle);
                }
        }else{
                this.pos = newPos;
        }

v podstatě se mi podařilo udělat funkční řešení (neříkám že optimální :( ) jak kopce vycházet.
Problém ale je že už se snažím několik dní vymyslet jak udělat plynuté sejití kopce dolů.
snažil jsem se všemožně třeba nejdříve určovat kolize s blokem přímo pod postavou a na základě toho dopočítávat vertikální pohyb podobně jako u chůze vzhůru,ale vždy to skončilo jen zběsilým poskakováním skrze textury

Otočení políčka kopce (zda stoupá vlevo,nebo vpravo) se zjišťuje tím, na jaké straně od kopce se nachází pevný blok

Díky za každou radu

Odpovědět 7.9.2015 20:16
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
MrPabloz
Člen
Avatar
Odpovídá na Jenkings
MrPabloz:

Nevím přesnou odpověď, ale snad ti pomůže toto: http://higherorderfun.com/…platformers/ :)

Editováno 11.9.2015 16:30
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 11.9.2015 16:30
Harmonie těla a duše, to je to, oč se snažím! :)
Avatar
Jenkings
Redaktor
Avatar
Odpovídá na MrPabloz
Jenkings:

Díky. Zatím to vypadá, že bych z toho možná mohl dostat to co potřebuju. Určitě vyzkouším hned jak se dostanu domů.

Nahoru Odpovědět 11.9.2015 16:38
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
Jenkings
Redaktor
Avatar
Odpovídá na MrPabloz
Jenkings:

Tak nakonec se mi to podle toho článku podařilo nějak zprovoznit. Jen to asi bude chtít ještě trochu doladit,ale účel to zatím splňuje.

Díky za radu :)

Nahoru Odpovědět  +1 12.9.2015 17:53
Největší časovou náročnost má výpočet časové náročnosti..
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 4 zpráv z 4.