Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Vertikalno pomeranje objekta

[es] :: Art of Programming :: Vertikalno pomeranje objekta

[ Pregleda: 2880 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Aleksandar Ilić
Software Developer
Beograd

Član broj: 15867
Poruke: 417

Sajt: www.ailic.rs


+3 Profil

icon Vertikalno pomeranje objekta12.06.2009. u 23:45 - pre 180 meseci
Pišem sličnu igricu kao HelicopterGame u Javi i muči me horizontalno pomeranje objekta (helikoptera). Objekat treba da ide naviše kada se drži taster miša, a da pada kad se pusti, baš kao u datom primeru. Prvo sam krenuo najjednostavnije što sam mogao tako što se yKoordinata povećava ili samanjuje zavisno da li je mousePressed ili mouseReleased. Međutim ovakav način nije dobar, jer se javlja naglo padanje i penjanje objekta.

I onda sam se setio da preko sinusa ili cosinusa nalazim yKoordinatu, jer ove funkcije po prirodi nemaju nagle padove i uspone. I sad ne znam kako ovo da realizujem. Kada napišem metod da yKoordinata ne zavisi od miša, vertikalno kretanje objekta izgleda baš kako treba. Ali kada ubacim MouseListener stvar se zakomplikuje i treba mi pomoć.


Svaki savet je dobrodošao. Hvala.
„Naposletku, suština saznavanja nije u tome gubimo li igru, već kako je gubimo,
šta time spoznajemo, čemu nas je poraz naučio i kako nas to menja. Gubiti na određen
način znači - dobijati.”

Richard Bach
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Vertikalno pomeranje objekta13.06.2009. u 07:04 - pre 180 meseci
Sila se uči negde u višim razredima osnovne škole...

http://en.wikipedia.org/wiki/Force
http://en.wikipedia.org/wiki/Acceleration

http://www.jdonohue.com/java/JDLunarLander/JDLunarLander.html

[Ovu poruku je menjao jablan dana 13.06.2009. u 08:46 GMT+1]
 
Odgovor na temu

Aleksandar Ilić
Software Developer
Beograd

Član broj: 15867
Poruke: 417

Sajt: www.ailic.rs


+3 Profil

icon Re: Vertikalno pomeranje objekta13.06.2009. u 21:24 - pre 180 meseci
Hvala na linkovima, međutim ne znam kako ovo da implementiram.
Imam klasu Fish koja trenutno ima polja boolean mousePressed i int yPos. Kada se klikne miš, mousePressed postane true, a kad se pusti - false. I imam metodu move() koja će se pozivati iz threada i ona bi trebala da updejtuje yPoziciju. Iscrtavanje se vrši u drugom metodu.

Ova move() metoda mi je problem. Jel može neko usmerenje?


Hvala.
„Naposletku, suština saznavanja nije u tome gubimo li igru, već kako je gubimo,
šta time spoznajemo, čemu nas je poraz naučio i kako nas to menja. Gubiti na određen
način znači - dobijati.”

Richard Bach
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Vertikalno pomeranje objekta13.06.2009. u 21:36 - pre 180 meseci
Može. Kad ne držiš taster, na objekat deluje njegova težina nadole pod uticajem gravitacije, a kad ga držiš, pored te sile uključuje se i sila motora nagore, koja mora da bude veća od težine objekta, da bi objekat mogao da se diže. Ako zanemariš masu objekta (pretpostaviš da se ne menja tokom vremena), računaš samo sa ubrzanjima (ubrzanjem nadole g dok ne držiš taster i ubrazanjem nagore a dok ga držiš). Formula za ubrzanje je a = v/t = s/(t^2), pa računaš, u svakom trenutku, znajući koje su bile vrednosti u prethodnom trenutku.
 
Odgovor na temu

DjoleReject
Djordje Knezevic
Zvezdara

Član broj: 85258
Poruke: 309
*.dynamic.sbb.rs.



+1 Profil

icon Re: Vertikalno pomeranje objekta14.06.2009. u 00:24 - pre 180 meseci
Citat:
Aleksandar Ilić
Ova move() metoda mi je problem. Jel može neko usmerenje?


Ako ti je prekomplikovano ovo sa silom, a ti lepo povecavaj Y kad je mis stisnut, ali ne za ceo broj, nego napravi neki float i kad je mis stisnut povecavaj ga za 0.1 (ili 0.01, 0.001... ako je ovo i dalje prebrzo), pa tako dobijen float dodaj na vec postojeci Y.
De si Deda...
 
Odgovor na temu

Aleksandar Ilić
Software Developer
Beograd

Član broj: 15867
Poruke: 417

Sajt: www.ailic.rs


+3 Profil

icon Re: Vertikalno pomeranje objekta14.06.2009. u 00:48 - pre 180 meseci
Rešio sam problem na sledeći način.
Code:
public void move() {
        if (mousePressed) {     
            ubrzanje += 0.025;
        }
        else {
            ubrzanje -= 0.025;
        }
        
        if ((int)ubrzanje > (int)gravitacionoUbrzanje) {
            yPos--;
        }
        else if ((int)ubrzanje < (int)gravitacionoUbrzanje) {
            yPos++;
        }
    }
gravitacionoUbrzanje je double konstanta na 9.5. Promenljiva ubrzanje je takođe dobule koja se povećava i smanjuje za 0.025. Na mousePressed i mouseReleased ubrzanje dobije vrednost gravitacionogUbrzanja. U drugom if-u kastovao sam obe vrednosti u int i tako se odseku decimale. GravitacionoUbrzanje postane 9, a ubrzanje krene od 9,5 da se povećuje ili smanjuje, i sve dok ne postane 10 ili padne ispod 9, yKoordinata se ne menja i na taj način objekat nešto malo ostane u istoj poziciji prilikom promene smera kretanja.

Koliko je ovo pametno ne znam. Ako neko ima komentar, rado bih ga čuo.
„Naposletku, suština saznavanja nije u tome gubimo li igru, već kako je gubimo,
šta time spoznajemo, čemu nas je poraz naučio i kako nas to menja. Gubiti na određen
način znači - dobijati.”

Richard Bach
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Vertikalno pomeranje objekta14.06.2009. u 06:47 - pre 180 meseci
Na dobrom putu si ali još nije to to. Ono što moraš da pamtiš u novom atributu nije ubrzanje, već (vertikalna) brzina, i ona se menja ovako kao što se tebi menja ubrzanje dole, ako je pritisnut taster u sledećoj iteraciji poveća se za neki broj X, a ako se ne drži, smanji za Y. Negativna brzina znači da pada, pozitivna da se diže. U svakoj iteraciji prvo proračunaš brzinu na taj način, pa onda na osnovu nje i vertikalnu poziciju (npr. uzmeš da je vremenska jedinica 1, i onda jednostavno dodaš vertikalnu brzinu na trenutnu poziciju).

Naravno, sve bi bilo lakše kad bi zaista pročitao Viki članke o sili, ubrzanju i brzini ili barem uzeo svoj srednjoškolski udžbenik iz fizike i obnovio gradivo.
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Vertikalno pomeranje objekta14.06.2009. u 09:35 - pre 180 meseci
U akcionim igrama sprajtovi ne treba da imaju pravu inerciju, niti zakoni fizike treba da se primenjuju. Može malo ubrzanja zbog efekta, ali zamisli Space Invaders u kom bi ti trebala sekunda da skreneš brod pod punom brzinom.
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Vertikalno pomeranje objekta14.06.2009. u 11:31 - pre 180 meseci
Kako u kojim igrama. Neke igre se, naprotiv, baziraju na inerciji. Na primer, čuvene "[url=http://en.wikipedia.org/wiki/Lunar_Lander_(arcade_game)]lunar lander[/url]", "marble madness" i "oxyd".

Hehe, evo jedne online:

http://www.1001webgames.com/game/marblet/index.php

[Ovu poruku je menjao jablan dana 14.06.2009. u 18:07 GMT+1]
 
Odgovor na temu

[es] :: Art of Programming :: Vertikalno pomeranje objekta

[ Pregleda: 2880 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.