Stránka 1 z 1

Otáčení objektu za kurzorem myši + pohyb

Napsal: srpen 3, 2014, 9:08 am
od tschmied
Ahoj, v tomto návodu se naučíme jak přimět objekt, aby se otáčel podle kurzoru myši. Je to velmi jednoduché.

Otáčení
Ze všeho nejprve si vytvoříme objekt (Název je na vás) se spritem, který směřuje směrem doprava a je vycentrovaný (Animace bude fungovat také).
Obrázek
Do Step eventu vložíme následující kus kódu:

Kód: Vybrat vše

direction = point_direction(x, y, mouse_x, mouse_y); // natočí objekt směrem k myši
image_angle = direction; // natočí sprite podle směru objektu
.

Pohyb
Pohyb je velice jednoduchý. V eventu Create spustíme následující kód:

Kód: Vybrat vše

friction=0.3  //Můžete si upravit
Poté vytvořte event, který by podle vás měl spustit chůzi vzhůru (Asi nejlepší volbou je šipka nahoru, či klávesa W), a do něj vložíme jednoduchý kód:

Kód: Vybrat vše

vspeed=-5
Podobné provedeme u eventů, které spustí chůze dolů, doleva a doprava.

Kód: Vybrat vše

vspeed=5 //DOLU

Kód: Vybrat vše

hspeed=5 //DOPRAVA

Kód: Vybrat vše

hspeed=-5 //DOLEVA
Spustíme hru a zkoušíme. Za drobné chybky se omlouvám a doufám, že jsem někomu pomohl :-)

-Quake

Re: Otáčení objektu za kurzorem myši + pohyb

Napsal: srpen 3, 2014, 9:24 am
od D-Sheep
Mě se moc nelíbí, že to děláš přes speed, protože ta se jednou nastaví a objekt se pak pohybuje pořád. Při puštění klávesy se nezastaví. Proč nemáš ve svém návodu nějaké řešení toho, co dělat, když je objekt moc blízko kurzoru? Ono to pak hrozně rychle skáče tam a sem. Strafování podle mě nebude fungovat moc dobře, protože ta funkce změní hodnotu direction a sprite se nebude zobrazovat ve správným směru.

Re: Otáčení objektu za kurzorem myši + pohyb

Napsal: srpen 3, 2014, 9:35 am
od tschmied
Opravím to, děkuji za názor :-)
(A to direction by to změnit nemělo - pouze s tím pracuje O_o

Re: Otáčení objektu za kurzorem myši + pohyb

Napsal: srpen 3, 2014, 9:49 am
od D-Sheep
No, upřímně, taky si tím teď nejsem jistej a nemůžu si to ověřit, ale domnívám se, že na konci Stepu vezme GM hodnoty speed a direction, spočítá rozdíl x a y a objekt posune. Potom jak jinak by motion_set měla ovlivnit směr pohybu než změnou té proměnné?

Re: Otáčení objektu za kurzorem myši + pohyb

Napsal: srpen 3, 2014, 10:01 am
od tschmied
Tak jsem ten pohyb udělal úplně jinak - z nějakého důvodu při strafování se objekt choval jako kdybych zmáčkl šipku nahoru -...-

Re: Otáčení objektu za kurzorem myši + pohyb

Napsal: srpen 3, 2014, 11:01 am
od D-Sheep
OMG! Zkoušíš si vůbec to, co sem píšeš? Vždyť vspeed a hspeed se s pohybem za myší nedají vůbec spojit! Víš, jaký je význam těch dvou?

Re: Otáčení objektu za kurzorem myši + pohyb

Napsal: srpen 3, 2014, 12:21 pm
od tschmied
Ano, ale já změnil celou mechaniku toho pohybu. Teď je to jak v top-down střílečkách

Re: Otáčení objektu za kurzorem myši + pohyb

Napsal: srpen 4, 2014, 12:14 pm
od xan1995
Tutoriál je určený pro začátečníky, proto bych je nezatěžoval s drawem. Zjednodušil bych to na:

Kód: Vybrat vše

direction = point_direction(x, y, mouse_x, mouse_y); // natočí objekt směrem k myši
image_angle = direction; // natočí sprite podle směru objektu
Píšeš, že sprite je vycentrovaný. Ve screenu ho však vycentrovaný nemáš. K pohybu se raději vyjadřovat nebudu.

Re: Otáčení objektu za kurzorem myši + pohyb

Napsal: srpen 6, 2014, 4:55 am
od tschmied
*vzdech*
Ten screen byl vytažen z původního video tutoriálu (který postrádal pohyb) ve špatnou chvíli. Dobrá. Uznávám - ale ten screen je tam stejně jen pro ilustraci - jinak by tam nebyl jen jeden.





A k tomu pohybu...
Co je špatné na TopDown RPG-based pohybu???

Re: Otáčení objektu za kurzorem myši + pohyb

Napsal: srpen 6, 2014, 9:55 am
od niko.las
Top-Down pohyb přes vpseed a hspeed? :roll:
Co takhle radši zkusit něco takového? (navíc s kolizním kódem)

Kód: Vybrat vše

//příklad pro pohyb doleva
if(keyboard_check(ord("A"))) {
    repeat(spd) { //spd si nastavíš v create třeba na 4
         if(place_free(x-1,y)) {
            x -= 1;
        }
    }
}

Re: Otáčení objektu za kurzorem myši + pohyb

Napsal: srpen 6, 2014, 1:33 pm
od tschmied
Ale to by to nebylo plynulý - to by nešlo
frition=0.2;