Autor Zpráva
final
Profil
zdravím,
function drawA(){
    for (var i = 0; i < height; i++) {
        for (var j = 0; j < width; j++) {
            context.drawImage(img, j*field, i*field);
        }
    }//pozadie

}
function drawB(){
        context.drawImage(image, a.x, a.y);//postava
}
function update(){
  //eventy na klávesnicu(šípka hore ,dole..)
  drawB();//aby sa postava posunula
}
 setInterval(function() {
         update();
        }, 1000/FPS);
1. v tomto príklad sa mi zobrazí iba postava a dá sa s ňou hýbať, ale chýba celé pozadie..
2. ak by som drawA a drawB spojil tak postava sa tak divno zjavuje..(zjaví sa zmizne, zjaví sa zmizne)

Ako to spojiť nejak dokopy aby mi to fungovalo spolu? (Aj pozadie,aj postava + hýbanie)
ďakujem
peta
Profil
final: Pouzit dva canvasy pres sebe? Pozadi a pruhledny s panackem.
Prekreslovani canvasu kazdych 10s neni moc in, to prohlizec asi neda, neni to 3d hra vykreslovana pres nabusenou grafickou kartu, ale pouhy javascript.
1Pupik1989
Profil
final:
Jak píše peta, canvasy měj dva. Jeden bude vlastně statický (pozadí) a druhý se bude animovat (panáček). Tipuju že to bude skákačka ala Mario. setInterval úplně vyhoď a změň za requestAnimationFrame případně dej do funcke drawB setTimeout, který bude volat znovu drawB, čímž vznikne smyčka. Čas je v pořádku. Tipuju, že FPS bude na 60, čili 16.6 ms na znovu zavolání funkce je v pořádku. Hlavně nezapomeň mazat plátno a pokud máš a.x a a.y typu float, tak zaokrouhlovat. Pokud to chceš ještě více zrychlit, tak můžeš zkusit off-screen metodu. Více koukni na HTML5 Rocks.

peta:
I v internet exploreru je možnost zapnout GPU akceleraci. :)
final
Profil
1Pupik1989:
no malo by to byť skôr niečo na spôsob bombermana, a tým pádom nie som si istý či keby mám 2 canvasy(1 s blokami,2 s panáčikom) či by som dokázal napr. zistiť kolíziu(panáčik nemôže ísť cez stenu)
peta
Profil
Polohu objektu mas preci v js poli. Canvas zobrazi jen grafiku.
final
Profil
njn, tiež pravda..a ešte k tým 2 canvasom aby som si bol istý či som dobre pochopil
<style>
canvas {
  position: absolute; top: 50px; left: 50px;
}
</style>
<canvas id="a"></canvas>//pozadie
<canvas id="b"></canvas>//postava
tak nejak?
1Pupik1989
Profil
Přesně tak. U hry typu bomberman není třeba řešit složitě kolize. Poloha panáčka + pohyb panáčka a zjistit jestli pole na které se chceš přesunout je volné nebo to je zeď. Máš třeba mapu:

var map = [
    [1,1,1,1,1,1,1,1,1,1],
    [1,0,0,0,0,0,0,0,0,1],
    [1,0,0,0,0,0,0,0,0,1],
    [1,0,0,1,1,1,0,0,0,1],
    [1,0,0,0,0,1,0,0,0,1],
    [1,0,0,1,1,1,0,0,0,1],
    [1,0,0,0,0,0,0,0,0,1],
    [1,0,0,0,0,0,0,0,0,1],
    [1,0,0,0,0,0,0,0,0,1],
    [1,0,0,0,0,0,0,0,0,1],
    [1,1,1,1,1,1,1,1,1,1],
  ];

Když bude panáček na map[4][4], tak víš, že může jen doleva. Protože

map[4][5] == 1; //je tam zeď
map[5][4] == 1; //je tam zeď
map[3][5] == 1; //je tam zeď
map[4][3] == 0; //je tam volno

//edit: K tomu pozicování: Ano, může být. Většinou ale radši používám nějaký obalový div.
final
Profil
1Pupik1989:
áno, tak tú mapu mám aj spravenú :)
ďakujem za pomoc
final
Profil
budem pokračovať v tejto téme..
mám teda 2 canvasy: 1. na pozadie, 2. na postavu, ale ide o to, že tých postáv tam bude viac(chcem to skúsiť spraviť multiplayer)
pri pohybe postavy vždy zmažem starú pozíciu postavy a nastavím novú
plContext.clearRect(oldX, oldY, width, height);
    plContext.drawImage(person, x, y);
to by fungovalo, ale čo v prípade, že 1 postava prejde cez druhú postavu?(napr. druhá sa nebude hýbať a prvá cez druhú prejde) v takom prípade druhá postava zmizne..

napadlo ma len vždy pri pohybe nejakej postavy prekresliť potom všetky ostatné, ale to by prakticky nič nevyriešilo
1Pupik1989
Profil
Pokud to bude na styl bombermana, tak bych to řešil stejně. Prostě vykreslit hráčovu postavu až na konec. U této hry asi nemá cenu řešit nic složitého, když je to pár obrázků co se vykreslí do plátna.
final
Profil
ako na koniec? vykresliť vždy všetky postavy na novo? ale čo v prípade že 2 postavy by mali rovnakú pozíciu?
1Pupik1989
Profil
Má-li některá postava stejnou pozici jako hráčova, tak přeci není potřeba vykreslit. Pokud to tedy bude online multiplayer.
final
Profil
áno online multiplayer, ale pokiaľ sa 2 postavy dostanú na rovnakú pozíciu (na 1 canvase) tak bude vidieť len 1 (tú 2., pretože tá prekreslí tú prvú)
1Pupik1989
Profil
Pokud jsou dvě postavy na jednom místě, tak vykreslím pouze svojí postavu.
if(jinaPostava.x !== mojePostava.x && jinaPostava.y !== mojePostava.y){
 //vykreslím jinaPostava
}

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: