Diskuze: Problem s otáčaním.

Ostatní jazyky GameMaker GameMaker Problem s otáčaním.

Avatar
alex_laco
Člen
Avatar
alex_laco:

Ahojte,
mám takýto kód

if speed>0 or speed<0  then {
if keyboard_check_direct(vk_left) then {direction+=9};
if keyboard_check_direct(vk_right) then {direction-=9};
image_index=-direction/9
}

if !place_meeting(x,y,obj_ball) then {
if keyboard_check_pressed(vk_up) then {speed=-10};
if keyboard_check_pressed(vk_down) then {speed=10};
if keyboard_check_released(vk_up or vk_down) then {speed=0};
}

Všetko funguje len keď idem napríklad dopredu stlačím otáčanie doľava a pustím otáčanie, tak sa mi objekt zastaví a musím všetky tlačítka pustiť a znova vykonať tento krok.
Ale chcem docieliť aby sa otáčal objekt ale sprite aby sa neotáčal.
Dáke rady ?

Editováno 5. března 2:06
 
Odpovědět 5. března 2:04
Avatar
TomBen
Redaktor
Avatar
Odpovídá na alex_laco
TomBen:

Docela podivně splácaný kód. Ty ses dřív učil Pascal,ne? :-)
Chyba je to ovšem docela zajímavá.

Když jsi psal:

keyboard_check_released(vk_up or vk_down) then {speed=0};

tak jsi měl určitě na mysli "když je puštěna klávesa nahoru nebo dolů" a to takhle napsat nemůžeš. Nejprve se totiž provede operace v závorce a to číselně. Kódy kláves vk_up a vk_down jsou 38 a 40. Jakékoli nenulové číslo použité v logických operacích se bere v GM jako 1. Proto tvůj zápis znamená 1 or 1 a výsledek je vždy 1. Jedna je kód pro any_key a tak jsi vlastně napsal if keyboard_chec­k_released(vk_a­nykey) a tím se ti udělá speed 0 při puštění libovolné klávesy.

Já bych celý kód napsal nějak takhle:

speed=0;
if keyboard_check_direct(vk_up)  {speed=10};
if keyboard_check_direct(vk_down) {speed=-10};

if speed!=0
{
 if keyboard_check_direct(vk_left) direction+=9;
 if keyboard_check_direct(vk_right) direction-=9;
}
image_index=-direction/9;

Ale radši bych použil rychlost 1 místo deset a zvýšil bych místo toho room_speed desetkrát. Výsledek bude stejný, ale FPS ti bude odpovídat pohybu a nebude se cukat obraz.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 5. března 11:45
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
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 2 zpráv z 2.