Co budeme potřebovat?
Prvně spíš specifikuji, co budeme vlastně dělat. Máte tedy raketku (svrchu), která se otáčí v rozpětí 360°. Také může létat dopředu a dozadu. To je zatím jasné, to si každý vytvoří hravě sám.
Tenhle návod je však především o určité části střílení, což lodička bez problémů zvládá, ale je to trochu věda, protože střílí ze svého křídla. Popíšeme si tedy, jak vytvořit objekt, který bude z pozice na křídlu střílet a zároveň se natáčet s lodí.
První, co budeme potřebovat, je znát úhel otočení. Ten zjistíme jednoduše pomocí „direction“. Musíme si tedy vytvořit objekt, který se bude natáčet stejně s raketkou, tedy:
A na kliknutí vystřelí. Ale samotnou střelbu zde popisovat nebudu, tenhle článek o tom není, je o trvalém umístění střílejícího objektu na křídle.
Úhel už máme. Dále potřebujeme znát délku. Tu si prostě musíte změřit. Stačí si v GM sprite properities (první tabulka po dvojím kliknutí na obrázek) vycentrovat sprite, zapsat „x“, např. jako "x1". Následně dát kurzor na pozici žádané polohy třeba „kulometu“, který bude vpravo. Zapsat polohu posunutého „x", např. jako "x2" a odečíst jedno od druhého. A je to. Teď k teorii.
Sinus, co to je?
Sinus je goniometrická funkce, definována jako poměr protilehlé přepony a odvěsny v pravoúhlém trojúhelníku. Definována v oboru reálných čísel.
Dále budeme používat ještě kosinus, což je zase poměr přilehlé odvěsny a přepony. Asi mi polovina z vás nerozumněla, hned vám to objasním.
Doufám, že je vám to teď jasné. Je to v základu velice jednoduché, ale zpátky k praktickému využití.
Konečně kód
A máme tu finální část. Konečně se dostáváme ke kódu. Prvně vám ho ukážu a pak vysvětlím.
uhel=degtorad(raketka.direction);
x=raketka.x+sin(uhel)*delka;
y=raketka.y+cos(uhel)*delka;
Takže, musíme začít podstatnou věcí, tohle patří do pravého kulometu. Změření jsem již vysvětlil, takže přejdeme k druhému řádku. Zde si načteme úhel - argument potřebný k sinusu a kosinusu. Ovšem sinus a kosinus vrací výsledek v radiánech, tedy musíme převést ze stupňů na radiány.
Další řádek je složitější:
Protože musíme začít na pozici raketky, je v „x“ prvně x raketky. K té přičteme délku strany trojúhelníku, kterou vypočítáme pomocí sinusu.
To stejné je pak i pro y, jen s tím rozdílem, že použijeme kosinus.
A teď to celé ještě jednou, ale u levého kulometu. Musíme udělat to stejné, akorát místo "+" dáme "-".
uhel=degtorad(raketka.direction);
x=raketka.x-sin(uhel)*delka;
y=raketka.y-cos(uhel)*delka;
A to je vše. Je toho málo? Mně se nezdá. Doufám, že to pro vás bude užitečné. Já jsem si vyléčil svůj komplex z dětství a vy máte zkušenost a znalost. Ale pozor! Zbytek si musíte udělat vy! Já vás jen navedl k tomuto. Tento návod není na ovládání raketky apod.
Těším se u dalšího článku.
Líbí
NelíbíPřečteno 2508-krát
Komentáře
Přidat nový
Pro přispívání musíte být přihlášen
Zapsal KyberSoft - 22.06.2010 12:08
Jednou jsem tohle potřeboval, pak jsem to vyřešil jinak ... Kdybych to tehdy četl, tak by mi to moc usnadnilo práci :D
Zapsal DDL Blue - 21.06.2010 20:17
Jasný. Mě dycky zajímalo, jak tadle funkce vlastně funguje :) I když asi si radši počkám na příští rok matematiky...
Zapsal Zikker - 21.06.2010 19:57
DDL Blue: Jasně. Dá, ale já jim to chtěl ukázat z matematického hlediska, spíš je to o tom způsobu dosažení, než o samotném kódu.
Zapsal DDL Blue - 21.06.2010 19:54
Používání tohodle vzorce mám rtád, dá se s tím fakt kouzlit :)
Pro GMkaře bych dodatl, že se to dá použít ještě jedním způsobem. a to:
x=raketka.x+lengthdir_x(vzdalenos,smer);
y=raketka.y+lengthdir_y(vzdalenos,smer);
Zapsal Adder - 21.06.2010 18:04
Jenom dodám, že touto metodou není sebemenší problém udělat lano poskládané třeba z dvaceti částí, na které působí gravitace. Prostě jenom spojíte jednotlivé přímky těmito funkcemi s tím, že každá následující se bude odkazovat na předchozí instanci a přebírat její hodnoty (například rychlost pohupování - rozdíl posX mezi cykly).
Další praktická využitelnost je třeba tehdy, pokud chcete stavět baráčky na kulaté rotující planetě. A klidně může být jedním z baráčků větrný mlýn, který se bude navíc i otáčet.
Zapsal Zikker - 21.06.2010 15:10
Teda mám tam pár chyb, ale doufám, že to přežijete.
Pro všechny: Díky, vážím si toho.
Zapsal Matt Samyel - 21.06.2010 14:44
Pěknej tutoriál! S timhle maj lidi často problémy, tak je příště případně odkážu na tendle článek:D
Zapsal Firejs - 21.06.2010 14:32
Hezký, možná, že podle toho návodu bych to po sedmi letech s GM dokázal udělat :D
Zapsal PepiCzech - 21.06.2010 08:05
Supr. Přesně s tímhle jsem měl potíže, konečně srozumitelně a blbuvzdorně vysvětleno. Díky moc.






