Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Pouze tento týden sleva až 80 % na e-learning týkající se C a C++. Zároveň využij akce až 80 % zdarma při nákupu e-learningu - více informací.
c week
Avatar
Damian Beck
Člen
Avatar
Damian Beck:11.8.2016 23:01

ahoj. Mám menší problém s rychlostí hráče. Můj hráč se pohybuje do 8 směrů, ale např: u šipek W,A,S,D je rychlost normální (např: rychlost 5), ale když stisknu klávesy W a A nebo W a D atd. tak je rychlost hráče o něco rychlejší. Nevíte jak mám udělat aby ve všech 8 směrech byla stejná rychlost? :) děkuji předem za odpověď. (GameMaker 8.0) tady přikládám celý můj kód:

if (speed > 2) speed = 2;
speed = max(speed - 1,0);

if keyboard_chec­k(ord("W")) {
sprite_index = spr_Player_Up;
image_speed = .17;
image_xscale = 1;
vspeed -= 2;
}
if keyboard_chec­k(ord("A")) {
sprite_index = spr_Player_Lef­t_Right;
image_speed = .17;
image_xscale = -1;
hspeed -= 2;
}
if keyboard_chec­k(ord("S")) {
sprite_index = spr_Player_Down;
image_speed = .17;
image_xscale = 1;
vspeed += 2;
}
if keyboard_chec­k(ord("D")) {
sprite_index = spr_Player_Lef­t_Right;
image_speed = .17;
image_xscale = 1;
hspeed += 2;
}
if keyboard_chec­k(vk_nokey) {
image_index = 0;
image_speed = 0;
}

if keyboard_chec­k(ord("W")) && keyboard_chec­k(ord("A")) {
image_speed = .17;
sprite_index = spr_Player_Lef­t_Right;
image_xscale = -1;
}
if keyboard_chec­k(ord("W")) && keyboard_chec­k(ord("D")) {
image_speed = .17;
sprite_index = spr_Player_Lef­t_Right;
image_xscale = 1;
}
if keyboard_chec­k(ord("S")) && keyboard_chec­k(ord("A")) {
image_speed = .17;
sprite_index = spr_Player_Lef­t_Right;
image_xscale = -1;
}
if keyboard_chec­k(ord("S")) && keyboard_chec­k(ord("D")) {
image_speed = .17;
sprite_index = spr_Player_Lef­t_Right;
image_xscale = 1;
}

 
Odpovědět
11.8.2016 23:01
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Damian Beck
TomBen:12.8.2016 8:49

Použij místo if příkaz switch.

switch (keyboard_key)
 {
 case ord("W"):  kód pohybu daným směrem; break;
 case ord("A"):  kód pohybu daným směrem; break;
 ... //case kolikrát je potřeba pro všechny různé klávesy
 default: jakýkolikód;
 }

Příkaz switch funguje jako if..else, ale je přehlednější. Z jednotlivých case větví ukončených break se provede jen ta správná a dál už se nic neřeší. Default se provede, když žádná case nesouhlasí. Default je dobré mít vyplněný vždycky, například alespoň show_debug_mes­sage s tím, že switch prošel všechny case nadarmo.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět
12.8.2016 8:49
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.
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Damian Beck
Člen
Avatar
Odpovídá na TomBen
Damian Beck:21.8.2016 22:44

děkuji za pomoc :)

 
Nahoru Odpovědět
21.8.2016 22:44
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 3 zpráv z 3.