29.03.2011 | 00:06
sve me muci.. =)
Onda nisam siguran da ću ti puno pomoći.
Meni ovo na screenshotu, zbog manjka antialiasinga oko kotačića, a i zbog "kockastih" rubova (obris nije "savršena" kružnica, naziru se poligoni), izgleda kao 3D objekt. Ako to repliciraš u Xcodeu, čeka te OpenGL epizoda, a s obzirom da je prilična tlaka to složiti od nule sa OpenGLom, mogu biti praktičan pa ti preporučiti da pokušaš isto to (ali bez da radiš vlastiti 3D engine samo za kotačić-izbornik) napraviti u Unityu. Ako ništa drugo, barem za prototipirati ideju (i vidjeti koliko je zapravo jednostavno).
U Unityu (ili ako sam radiš "3D engine" ) bi se rješenje svelo na sljedeće:
1. izmodeliraš kotačić i teksturiraš ga (oboje radiš u nekom 3D programu i kao gotov 3D objekt, i pripadnu mu teksturu, importiraš u Unity)
2. kotačiću dodaš (mesh) collider kako bi mogao reagirati (u ovom slučaju) na neki mouse/touch event i tijekom takvog eventa testiraš da li je korisnik kliknuo/dodirnuo (ako je, kliknuo/dodirnuo je objekt) - pohraniš (možeš i screen space) koordinate prvog klika
3. nakon registriranog klika testiraš drag - s obzirom da to radiš u svakom frejmu, već u prvom sljedećem (nakon frejma u kojem je napravljen prvi mouse/touch event) možeš dobiti "smjer" u kojem korisnik vuče miša/prst
4. koristeći koordinatu prvog klika i smjer u kojem korisnik vuče miša/prst, možeš izračunati u kojem smjeru i kojim intenzitetom je pokrenut kotačić
5. kotačić pripremiš tako da "reagira na silu" (koja će ga vrtiti za N stupnjeva u plus ili minus) i da ima nekakav "damping" koji će ga, poput opruge, usporiti nakon što sila prestane djelovati - tako dobiješ efekt koji vidim u Touchgrind traileru
- ako korisnik nastavi okretati kotačić (umjesto da ga pusti), sila će se pobrinuti da damping ne dođe do izražaja dok god korisnik vrti kotačić
6. djelovanje sile na kotačić će mijenjati kut pod kojim se nalazi kotačić (kada bi ga gledali iz tlocrta, kut bi se odnosio na Y os) - ovisno o kutu ("ako je veći od neke i manji od neke druge vrijednosti" ), u frejmu u kojem testiraš koji izbornik prikazati, prikazat ćeš odgovarajući izbornik
I to je sva mudrost.
Ako ti 3D nije opcija, možeš, jednostavnije, imati teksturu kruga (ili čega god, kružnog) s ucrtanim opcijama i rotirati 2D view (UIImageView, ako pričamo o iOSu) koji je prikazuje. U tom slučaju ne treba ti collider (koji je potreban samo za 3D objekt) jer view hendla toucheve. Toucheve parsaš na sličan način kao gore opisano - ako usput izbaciš i damping, bit će još jednostavnije.