Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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
mbeloch97
Člen
Avatar
mbeloch97:23.3.2015 0:55

Zdravím, potřeboval bych pomoc s otáčením obrázku. Když zmáčknu pravou šipku, tak se obrázek otočí o trochu doprava (záleží, jak dlouho šipku držím). Levá šipka -> doleva. Už jsem si k tomu něco hledal, ale moc to nechápu - např zde: http://www.codeproject.com/…ox-Rotations
Abych upřesnil, obrázek je hráč, který se v závislosti na stisku kláves otáčí. Děkuji moc za rady.

 
Odpovědět
23.3.2015 0:55
Avatar
rawen
Člen
Avatar
Odpovídá na mbeloch97
rawen:23.3.2015 3:17

A s čím tam máš konkrétně problém? Oni tam mají napsanou metodu RotateImage, která bere parametry: (jaký obrázek chtějí rotovat), (bod, kolem kterého chtějí rotovat) a (o kolik stupňů). V podstatě jediné co už jen potřebuješ je, si udělat události na zmáčknutí tlačítka a podle toho volat tuto jejich metodu s daným úhlem. Jo a taky by bylo fajn si pamatovat aktuální úhel od kterého budeš přidávat nebo odečítat úhel při zmáčknutí. :)
Mohlo by to vypadat nějak takhle (je to v podstatě to jejich + volání té metody v závisloti na stisku + dvě proměnné)

private Image image;
private int actualAngel;

public Form1()
{
    InitializeComponent();
    actualAngel = 0;
    image = new Bitmap(@"C:\\nejakyObrazek.png");
    pictureBox1.Image = (Bitmap)image.Clone();
}

public Bitmap RotateImage(Image image, PointF offset, float angle)
{
    if (image == null)
        throw new ArgumentNullException("image");

    Bitmap rotatedBmp = new Bitmap(image.Width, image.Height);
    rotatedBmp.SetResolution(image.HorizontalResolution, image.VerticalResolution);
    Graphics g = Graphics.FromImage(rotatedBmp);
    g.TranslateTransform(offset.X, offset.Y);
    g.RotateTransform(angle);
    g.TranslateTransform(-offset.X, -offset.Y);
    g.DrawImage(image, new PointF(0, 0));
    return rotatedBmp;
}

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    // rotace jsou o 10° kolem vlastního středu obrázku
    if(e.KeyData == Keys.Left)
        pictureBox1.Image = RotateImage(image, new Point(image.Width / 2, image.Height / 2), actualAngel -= 10);

    if (e.KeyData == Keys.Right)
        pictureBox1.Image = RotateImage(image, new Point(image.Width / 2, image.Height / 2), actualAngel += 10);
}

Ten druhý parametr při rotaci jsem dal na polovinu výšky a šířky obrázku, aby se to rotovalo kolem středu obrázku. Jinak teda nejsem si jist jestli je WF nejlepší volba na hru, ikdyž dost záleží co všechno v ní chceš mít. :)

Akceptované řešení
+20 Zkušeností
Řešení problému
Nahoru Odpovědět
23.3.2015 3:17
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
vodslon
Člen
Avatar
Odpovídá na mbeloch97
vodslon:23.3.2015 10:25

Hezký den,

Takovej off topic trochu, možná jeslti máš hru kde máš panáčka co bude pobíhat a něco dělat, vůbec neřeš otáčení obrázku jako takového. Koukni na všechny staré hry, je ten panáček "statickej" že prostě kouká pořád na stejnou stranu a hejbe se ta ikona s ním, chci říct, at si v tom neuděláš zbytečnej zmatek a kod navíc :-)

 
Nahoru Odpovědět
23.3.2015 10:25
Avatar
mbeloch97
Člen
Avatar
Odpovídá na rawen
mbeloch97:23.3.2015 16:53

Děkuju moc, už jsem si to docela ujasnil :)

 
Nahoru Odpovědět
23.3.2015 16:53
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 4 zpráv z 4.