Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:

Našel by se někdo, kdo by mi pomohl se hrou v JavaME? Mám v podstatě vše naprogramováno, nejde mi ale vytvořit kolize objektů, které chci řešit pomocí spritů. Do těch jsem se zamotal.

 
Odpovědět 24.4.2013 9:26
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:

Nikdo neumí Javu? :-D

 
Nahoru Odpovědět 24.4.2013 17:08
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na jiri.sverak
Jiří Gracík:

To druhý byla blbá poznámka :D Spíš do toho nikdo nechce ;)

Nahoru Odpovědět  +1 24.4.2013 17:11
Creating websites is awesome till you see the result in another browser ...
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:

Já vím, ale vidíš, že ses ozval alespoň ty :-D Fakt se jedná jen o cca dvě otázky. Když ne o spritech, tak alespoň ohledně vláken.

 
Nahoru Odpovědět 24.4.2013 17:13
Avatar
Odpovídá na jiri.sverak
Luboš Běhounek (Satik):

V Javě neprogramuji, tak ti poradím jen obecně - vycházej z toho, že sprity jsou obdélníky, takže řeš kolize obdélníků (pokud si nebudeš vědět rady, tak google napoví).

Poté (pokud nastane kolize těch obdélníků) můžeš ještě řešit kolize per-pixel, prostě postupně projedeš všechny "pixely" z obou objektů, který si odpovídají a zkontroluješ, jestli oba z té dvojice mají nastaveno, že kolidují.

Nahoru Odpovědět 24.4.2013 17:16
:)
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na jiri.sverak
David Čápka:

Kolize ve hrách někdy jako obdélníky stačí.

Nahoru Odpovědět 24.4.2013 17:20
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Luboš Běhounek (Satik):

Tady máš ukázku kolizí per-pixel, kdyžtak můžu dodat zdroják v C#.

http://www.youtube.com/watch?…

Nahoru Odpovědět 24.4.2013 17:23
:)
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:

Per pixel jsem raději vzdal.

Abych lépe popsal problém. Dělám pong. Mám třídu Ball (pohybující se balónek) a Paddle (tedy ty dvě odrazové pálky). Nevím, jak z nich udělat sprity. Na jejich kolizi slouží metoda collidesWith (v podstatě to stejné jako intersect v JavaSE).

Prokousávám se programováním a Javou už v podstatě dva roky, ale stále nechápu některé základní věci. Třeba vlákna. Spustím si vlákno v každé třídě, pak ale nevím, jak s nimi naložit v Canvasu (Midlet - základní třída, co se volá po spuštění - slouží jen k zobrazení třídy Canvas). Tedy hlavní mojo se děje v Canvasu. Měl bych mít všechno správně, potřebuji jen udělat z balónku a pádel sprity, v Canvasu udělat jednu metodu pro kolizi (collidesWith) a vše spustit opět ve vlákně.

 
Nahoru Odpovědět 24.4.2013 17:24
Avatar
jiri.sverak
Člen
Avatar
Odpovídá na Luboš Běhounek (Satik)
jiri.sverak:

Já mám zdroják k per pixel i v Javě, ale naprosto nevím, co s tím. Jak jsem psal, jsem v podstatě začátečník.

 
Nahoru Odpovědět 24.4.2013 17:25
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na jiri.sverak
David Čápka:

Já nevím, ale na tak jednoduchou věc jako je pong nepotřebuješ ani vlákna ani třídy, jen kreslíš kolečko a obdélníčky.

Nahoru Odpovědět 24.4.2013 17:26
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
jiri.sverak
Člen
Avatar
Odpovídá na David Čápka
jiri.sverak:

sdraco: Tobě to přijde jednoduché, ale pro mě je naprogramovat i něco tak jednoduchého nadlidský úkol :-D

 
Nahoru Odpovědět 24.4.2013 17:29
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na jiri.sverak
David Čápka:

A co je tedy za problém? Vezmi míček jako obdélník a máš to.

Nahoru Odpovědět  +1 25.4.2013 10:54
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na jiri.sverak
David Čápka:

Koukám, že to tak dokonce i máš. Ale nechápu, proč má pálka i míček run, to je hloupost. Herní cyklus je přeci jeden. Aby pálka odrazila míček, můžeš jí ho předat třeba v konstruktoru.

Nahoru Odpovědět 25.4.2013 10:58
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:

Já ho jako obdélník mám. Nevím, jak poté vše "sesumírovat" v MyCanvas, tedy jak spustit vlákna a jak udělat kolizi. Per pixel nerozumím, tedy jedinou možností (alespoň o jiné nevím) je metoda collidesWith ze třídy Sprite. Ta ale bere pouze objekty jako obrázky.

 
Nahoru Odpovědět 25.4.2013 10:59
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:

Takže si vytvořím jen jedno vlákno v MyCanvas, ve kterém spustím instanci míčku a dvě instance pálek, tzn. odstraním run ze tříd Ball a Paddle?

 
Nahoru Odpovědět 25.4.2013 11:01
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na jiri.sverak
David Čápka:

Ano, budeš mít jednu herní smyčku, tam si vytvoříš 2 pálky a míček a budeš je obsluhovat. Otázka je, jak udělat kolizi, buď předáš míček pálkám (aby na něj viděly a mohly na něj reagovat), nebo dáš pálkám getter na jejich Rectangle, stejně to uděláš míčku a v tom hlavním cyklu budeš kontrolovat, zda se tyto 2 Rectangly nekříží.

Editováno 25.4.2013 11:09
Nahoru Odpovědět 25.4.2013 11:09
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na jiri.sverak
David Čápka:

Na Sprity se zatím vykašli, udělej to takhle a až ti to bude fungovat, řeš obrázky :)

Nahoru Odpovědět 25.4.2013 11:10
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Hynek
Redaktor
Avatar
David Hynek:

Pong jsem dělal v Pascalu, ale podstata je stejná. Víš kde je míček a víš kde je pálka. Palka stojí na ose X třeba X = 1, a pohybuje se po ose Y (1 až 32) když se míček dostane na pozici X = 2, pošleš otázku, kde je pálka, jestli bude odpověď, že Y pálky (+ - šířka pálky) a míčku stejná, dáš odraz. Jestli je mimo, set končí, změníš počet bodu a začíná se od protihráče. V Pascalu byl pong na pár řádků. Sice pod grafikou 320 x 240px ale zrovna u pongu je to jedno :)

Editováno 25.4.2013 11:11
Nahoru Odpovědět 25.4.2013 11:11
Čím víc vím, tím víc věcí nevím.
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:

Dobře, díky oběma. Pochopil jsem, jak dál postupovat. Až to vše udělám a nepojede mi to (jako vždy), opět se zeptám.

 
Nahoru Odpovědět  +1 25.4.2013 11:30
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:

Asi bych to měl vědět, ale proč nemůžu po vytvoření instance třídy Ball v ní volat getter? Ono je to asi stejně zbytečné, ale zajímalo by mě to.

 
Nahoru Odpovědět 25.4.2013 18:26
Avatar
David Čápka
Tým ITnetwork
Avatar
Nahoru Odpovědět 25.4.2013 20:16
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:

http://leteckaposta.cz/667317231

Místo yDirection v metodě kolize() bych měl balonek.getYDi­rection();

 
Nahoru Odpovědět 25.4.2013 22:22
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na jiri.sverak
David Čápka:

Nevím, jak to myslíš, gettery jsou od toho, aby se používaly mimo třídu. Strašně se mi nelíbí, že je v Ball balónek, je to zmatečné. Ten rectangle by se měl jmenovat třeba oblast, to dává smysl, Ball má nějakou oblast na obrazovce. Ale že Ball má balónek... A proč máš v balónku canvas? Balónek je samostatná komponenta, canvas máš jeden mimo, to jsme přeci již řešili.

Nahoru Odpovědět 26.4.2013 7:22
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:

Většina toho kódu je z nějakého Youtube tutoriálu. Je pravda, že mi některé věci připadaly přinejmenším divné. Takže, pokud správně chápu, budu mít třídu balónek, která bude jen vytvářet balónek a náhodně ho odrážet od okrajů. Pak třídu pálek, jež se bude starat jen o vytvoření dvou instancí na základě ID, jejich ovládání a aby nepřejely okraje. Veškerou logiku jako kolizi atd. vyřeším v MyCanvas. Je tak?

 
Nahoru Odpovědět 26.4.2013 9:19
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:

Canvas tam mám jen kvůli tomu, aby mi vrátil zobrazitelnou oblast.

 
Nahoru Odpovědět 26.4.2013 9:20
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na jiri.sverak
David Čápka:

To jsi dělal podle nějakého divného tutoriálu :) Já bych do těch komponent žádnou extra logiku nedával a vše si řešil v Canvasu, pálka a míček by měly jen rectangle a vykreslování, dále metody, které by s nimi hýbaly.

Možná bude lepší, když si sedneš a napíšeš to znovu.

Nahoru Odpovědět 26.4.2013 11:42
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
jiri.sverak
Člen
Avatar
Odpovídá na David Čápka
jiri.sverak:

Už to píšu celé znovu ;) Ještě nechápu jednu věc. Jak potom v MyCanvas vykreslím vše potřebné? Už nepoužiji metodu paint, ale všechno spustím v run?

 
Nahoru Odpovědět 26.4.2013 12:02
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na jiri.sverak
David Čápka:

Máš ten svůj Canvas, ten má metodu Paint, která bere v parametru graphics nebo alespoň tak nějak podobně by to mělo být. Pálce i míčku uděláš metodu Vykresli, co bere v parametru graphics a na graphics nakreslíš na pozice míčku míček, v pálce to samé, jen na pozici pálky pálku. V Paint v Canvas pak zavoláš micek.Vykresli(g) a palka1.Vykresli(g) atd., g je Graphics, co má Paint v parametru. Kdyby jsi se v tom ztratil, tak pošli kód.

Nahoru Odpovědět 26.4.2013 12:12
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
jiri.sverak
Člen
Avatar
Odpovídá na David Čápka
jiri.sverak:

Já už fakt nevím. Nic se nevykreslí, překladač vyhodí Out of memory.

http://leteckaposta.cz/154153318

 
Nahoru Odpovědět 27.4.2013 21:49
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na jiri.sverak
David Čápka:

Teď je to dobře, jen voláš v paint repaint(), což znovu zavolá paint a znovu repaint až ti dojde zásobník :) Dej to repaint pryč.

Nahoru Odpovědět 28.4.2013 9:35
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:

Já myslel, že je repaint na to, aby vždy překreslil celý canvas. Teď mi to pro změnu vyhodí Execution failed with error code 1.:D

 
Nahoru Odpovědět 28.4.2013 9:53
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na jiri.sverak
David Čápka:

To ano, ale repaint musíš volat mimo paint, dělá se to obvykle v nějakém timeru. Repaint ti totiž zavolá paint a když v ní voláš repaint, tak si to zacyklíš.

Nahoru Odpovědět 28.4.2013 9:56
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:

Jo takhle. Stále ale nechápu, proč se mi nevykreslí alespoň ty dvě pálky.

 
Nahoru Odpovědět 28.4.2013 10:53
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na jiri.sverak
David Čápka:

Co jsi posílal naposled, tak mělo prázdný run. Musíš si tma udělat timer a v něm volat repaint.

Nahoru Odpovědět 28.4.2013 11:07
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na jiri.sverak
David Čápka:

I když jednou by se vykreslit měly. Nicméně to máš napsané teď dobře a návod jak něco vykreslit v JavaME určit najdeš :)

Nahoru Odpovědět 28.4.2013 11:08
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
jiri.sverak
Člen
Avatar
Odpovídá na David Čápka
jiri.sverak:

Já už fakt nevím. Čím víc se do toho dívám, tím méně tomu rozumím. Nenašel jsem podklady, ze kterých bych pochopil, co mám dál udělat.

 
Nahoru Odpovědět 28.4.2013 11:50
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 37 zpráv z 37.