Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Pomoc s JavaME

Aktivity
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:24.4.2013 9:26

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:24.4.2013 17:08

Nikdo neumí Javu? :-D

 
Nahoru Odpovědět
24.4.2013 17:08
Avatar
Odpovídá na jiri.sverak
Neaktivní uživatel:24.4.2013 17:11

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

Nahoru Odpovědět
24.4.2013 17:11
Neaktivní uživatelský účet
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:24.4.2013 17:13

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:24.4.2013 17:16

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
https://www.facebook.com/peasantsandcastles/
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na jiri.sverak
David Hartinger:24.4.2013 17:20

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

Nahoru Odpovědět
24.4.2013 17:20
You are the greatest project you will ever work on.
Avatar
Luboš Běhounek Satik:24.4.2013 17:23

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
https://www.facebook.com/peasantsandcastles/
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:24.4.2013 17:24

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:24.4.2013 17:25

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 Hartinger
Vlastník
Avatar
Odpovídá na jiri.sverak
David Hartinger:24.4.2013 17:26

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
You are the greatest project you will ever work on.
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:24.4.2013 17:27

Zdroják:

http://leteckaposta.cz/761348277

 
Nahoru Odpovědět
24.4.2013 17:27
Avatar
jiri.sverak
Člen
Avatar
Odpovídá na David Hartinger
jiri.sverak:24.4.2013 17:29

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 Hartinger
Vlastník
Avatar
Odpovídá na jiri.sverak
David Hartinger:25.4.2013 10:54

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

Nahoru Odpovědět
25.4.2013 10:54
You are the greatest project you will ever work on.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na jiri.sverak
David Hartinger:25.4.2013 10:58

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
You are the greatest project you will ever work on.
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:25.4.2013 10:59

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:25.4.2013 11:01

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 Hartinger
Vlastník
Avatar
Odpovídá na jiri.sverak
David Hartinger:25.4.2013 11:09

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
You are the greatest project you will ever work on.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na jiri.sverak
David Hartinger:25.4.2013 11:10

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
You are the greatest project you will ever work on.
Avatar
David Hynek
Tvůrce
Avatar
David Hynek:25.4.2013 11:11

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:25.4.2013 11:30

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
25.4.2013 11:30
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:25.4.2013 18:26

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 Hartinger
Vlastník
Avatar
Odpovídá na jiri.sverak
David Hartinger:25.4.2013 20:16

Jaký getter?

Nahoru Odpovědět
25.4.2013 20:16
You are the greatest project you will ever work on.
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:25.4.2013 22:22

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 Hartinger
Vlastník
Avatar
Odpovídá na jiri.sverak
David Hartinger:26.4.2013 7:22

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
You are the greatest project you will ever work on.
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:26.4.2013 9:19

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:26.4.2013 9:20

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 Hartinger
Vlastník
Avatar
Odpovídá na jiri.sverak
David Hartinger:26.4.2013 11:42

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
You are the greatest project you will ever work on.
Avatar
jiri.sverak
Člen
Avatar
Odpovídá na David Hartinger
jiri.sverak:26.4.2013 12:02

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 Hartinger
Vlastník
Avatar
Odpovídá na jiri.sverak
David Hartinger:26.4.2013 12:12

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
You are the greatest project you will ever work on.
Avatar
jiri.sverak
Člen
Avatar
Odpovídá na David Hartinger
jiri.sverak:27.4.2013 21:49

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 Hartinger
Vlastník
Avatar
Odpovídá na jiri.sverak
David Hartinger:28.4.2013 9:35

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
You are the greatest project you will ever work on.
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:28.4.2013 9:53

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 Hartinger
Vlastník
Avatar
Odpovídá na jiri.sverak
David Hartinger:28.4.2013 9:56

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
You are the greatest project you will ever work on.
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:28.4.2013 10:53

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 Hartinger
Vlastník
Avatar
Odpovídá na jiri.sverak
David Hartinger:28.4.2013 11:07

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
You are the greatest project you will ever work on.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na jiri.sverak
David Hartinger:28.4.2013 11:08

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
You are the greatest project you will ever work on.
Avatar
jiri.sverak
Člen
Avatar
Odpovídá na David Hartinger
jiri.sverak:28.4.2013 11:50

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.