Avatar
Okurkin
Člen
Avatar
Okurkin:

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  +1 30.4.2015 10:10
Avatar
Honza
Člen
Avatar
Honza:

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  -1 30.4.2015 10:52
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
Okurkin
Člen
Avatar
Okurkin:
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:

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í
+1 bodů
Ř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:

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  +1 30.4.2015 11:17
Avatar
Odpovídá na Okurkin
Neaktivní uživatel:

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:

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:

Ř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:

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:

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:

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

 
Nahoru Odpovědět  +1 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.