IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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í.
Avatar
Okurkin
Člen
Avatar
Okurkin:30.4.2015 10:10

Zdravím, měl by někdo prosím nápad, jak udělat pohyb při zapnutém timeru??
Potřebuju, aby se objekt pohyboval stéle stejnám směrem, dokud nestisknu klávesu pro jiný směr... :)

Díky za rady...

 
Odpovědět
30.4.2015 10:10
Avatar
Honza
Člen
Avatar
Honza:30.4.2015 10:52

Ahoj, bylo by dobré to trošku rozvést.
Zejména jak máš řešený pohyb, co přesně dělá timer (zda má na starosti pohyb, tzn. při každém tiku timeru se pohne objekt a nebo řeší něco jiního) a jak máš vyřšenou změnu směru.

Pokud objektem pohybuje timer, tak by se např. dalo udělat to že daný objekt bude mít v sobě property s informací kam se má v dalším tiku pohnout. Stiskem klávesy změníš hodnotu té property. Při tiku timeru se vždycky nejdřív zjistí jaký směr je v property nastavený a pak provedeš samotný pohyb objektu.

Nahoru Odpovědět
30.4.2015 10:52
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
Okurkin
Člen
Avatar
Okurkin:30.4.2015 11:00
private static int counterX = 0;
private static int counterY = 0;
 static void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            int[,] pole = new int[20, 10];
            int smer =4;
            if (smer == 1)
            {
                pole[counterY += 1, counterX] = 1;
            }
            else if (smer == 2)
            {
                pole[counterY -= 1, counterX] = 1;
            }
            else if (smer == 3)
            {
                pole[counterY, counterX += 1] = 1;
            }
            else if (smer == 4)
            {
                pole[counterY, (counterX -= 1)] = 1;
            }

            vypis(pole);
        }

Ten timer mám takto, v podstatě překresluje celé pole. Udělal jsem si tam napevno ten směr a myslel sem, že bych si vytvořil nějakou funkci, která by měla v sobě klávesy a ten směr by nastavovala... Bohužel nevím, jak udělat to, aby ta klávesa byla mačkána nepovinně...
OT : OOP bohužel ještě neumím....

Editováno 30.4.2015 11:01
 
Nahoru Odpovědět
30.4.2015 11:00
Avatar
Odpovídá na Okurkin
Neaktivní uživatel:30.4.2015 11:08

Ahoj,

jak psal Honza, v každém ticku timeru budeš pohybovat objektem.
V nějaké proměnné budeš mít uložený směr pohybu (např. integer) a do timeru
vložíš switch/if-else.

Řešení s if-else by pouze při mačkání šipek mohlo vypadat např. takto:

public Form1()
  {
   InitializeComponent();
   KeyDown += new KeyEventHandler(Form1_KeyDown);
  }

  void Form1_KeyDown(object sender, KeyEventArgs e)
  {
   int x = pictureBox1.Location.X;
   int y = pictureBox1.Location.Y;

   if (e.KeyCode == Keys.Right) x += 1;
   else if (e.KeyCode == Keys.Left) x -= 1;
   else if (e.KeyCode == Keys.Up) y -= 1;
   else if (e.KeyCode == Keys.Down) y += 1;

   pictureBox1.Location = new Point(x, y);
  }

Sám si to už předělej do ticku odpovídajícího timeru.

Hodně zdaru :)

Editováno 30.4.2015 11:09
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
30.4.2015 11:08
Neaktivní uživatelský účet
Avatar
Okurkin
Člen
Avatar
Odpovídá na Neaktivní uživatel
Okurkin:30.4.2015 11:17

Hmm... Děkuji, bohužel ten kód mi nějak neleze do hlavy... Jak jsem již psal OOP ještě neovládám, proto bych poprosil o vysvětlení co ten kód dělá... :) Děkuji

 
Nahoru Odpovědět
30.4.2015 11:17
Avatar
Odpovídá na Okurkin
Neaktivní uživatel:30.4.2015 11:25

V konstruktoru formuláře si pohlídáš hlídanou klávesu.
Pak si v metodě hlídající stisknutí nějaké klávesy uložíš do čísla X,Y souřadnice obrázku (např. pictureBox1).

Pak se v konstrukci if-else if-else if bla bla bla...
pohlídáš případy, kdy se stisklá klávesa rovná tomu, co chceš (šipky).
Na konci nastavíš souřadnice obrázku na nový bod x,y. :)

Nahoru Odpovědět
30.4.2015 11:25
Neaktivní uživatelský účet
Avatar
Okurkin
Člen
Avatar
Okurkin:30.4.2015 11:32

Aha, už tomu začínám rozmět...
Je to tak, že tu josu v podstatě tři základní kroky.
1, Zjištění, zdali je klávesa stisknu a případně jaká
2, Pokud ano zjistí se objekt na jakých je souřadnicích a poté se mu souřadnice změní a pokračuje jiným směrem
3, pokud klávesa neni stisknuta objekt jede stejným směrem

Je to tak??

 
Nahoru Odpovědět
30.4.2015 11:32
Avatar
Odpovídá na Okurkin
Neaktivní uživatel:30.4.2015 11:50

Řekněme :)

Jen pokud není stisknuta ani jedna odpovídající klávesa tak objekt NEjede dále.

Tím bych to asi uzavřel.

Editováno 30.4.2015 11:51
Nahoru Odpovědět
30.4.2015 11:50
Neaktivní uživatelský účet
Avatar
Okurkin
Člen
Avatar
Okurkin:30.4.2015 11:54

A to je právě ten problém, já potřebuji, aby objekt jel dále, jak jsem již zmiňoval.... Potřebuji jen měnit směry... :)

 
Nahoru Odpovědět
30.4.2015 11:54
Avatar
Odpovídá na Okurkin
Neaktivní uživatel:30.4.2015 11:59

No tak si uprav to co jsem ti poslal... je tam všechno, co potřebuješ.
A používej tlačítko odpovědět. ;)

Nahoru Odpovědět
30.4.2015 11:59
Neaktivní uživatelský účet
Avatar
Okurkin
Člen
Avatar
Odpovídá na Neaktivní uživatel
Okurkin:30.4.2015 12:04

Dobře, zkusím to přepsat do kódu kterému rozumím...

 
Nahoru Odpovědět
30.4.2015 12:04
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 11 zpráv z 11.