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í.

Diskuze: C# pohyb obrazka a kreslenie perom v jednom paneli naraz

Aktivity
Avatar
joko86
Člen
Avatar
joko86:21.5.2017 20:37

Ahojte, potreboval by som trosku poradit, chcem vytvorit aplikaciu, kde bude obrazok, ktory sa bude pohybovat a zaroven bude zanechavat stopu v podobe pera. Pohybovat sa bude na zaklade kliknutia na jedno zo styroch tlacidiel(hore, dole, vpravo , vlavo). Viem menit poziciu obrazka a viem aj vytvorit pero, ktoré po stlacení daneho tlacidla vykreslí dalsiu usecku, ktorá znazornuje trasu, kde uz objekt bol. Problem je v tom , ze to neviem spravit naraz. V jednom programe hýbem objektom a v druhom vykreslujem trasu pomocou pera. Neviem to spojit, pretoze pohyb obrazku funguje na principe mazania predchadzajucej pozicie - panel1.Refresh(); - a samozrejme,ze ked to chcem spojit , tak mi maze aj pero. Uz neviem vobec nic vymysliet. Vsetko sa to vykresluje v paneli. Napadlo ma ,ze vytvorim druhy panel2, kde budem vykreslovat pero a na paneli1 sa bude vykreslovat obrazok. Neviem to vsak urobit. Pvry zdrojak je pero a druhy obrazok. Za rady vopred dakujem.

namespace KresleniePen
{
    public partial class Form1 : Form
    {
        float posX, posY;
        int x1, y1;
        int x2, y2;
        Graphics g;

        public Form1()
        {
            InitializeComponent();
            g = panel1.CreateGraphics();
            posX = panel1.Width / 2;
            posY = panel1.Height / 2;
            x1 = panel1.Width / 2;
            y1 = panel1.Height / 2;
            x2 = panel1.Width / 2;
            y2 = panel1.Height / 2;
        }

        private void button1_Click(object sender, EventArgs e)
        {
           Pen pero = new Pen(Color.Red, 3);
            Point[] points =
           {
                 new Point(x1+15,  y1+15),
                 new Point(x2+15, y2+10),

             };
            y1 -= 5;
            y2 -= 5;

        }

        private void button2_Click(object sender, EventArgs e)
        {
            Pen pero = new Pen(Color.Red, 3);
            Point[] points =
           {
                 new Point(x1+15,  y1+15),
                 new Point(x2+15, y2+20),

             };
            y1 += 5;
            y2 += 5;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            Pen pero = new Pen(Color.Red, 3);
            Point[] points =
           {
                 new Point(x1+15,  y1+15),
                 new Point(x2+20, y2+15),

             };
            x1 += 5;
            x2 += 5;

        }

        private void button4_Click(object sender, EventArgs e)
        {
            Pen pero = new Pen(Color.Red, 3);
            Point[] points =
           {
                 new Point(x1+15,  y1+15),
                 new Point(x2+10, y2+15),

             };
            x1 -= 5;
            x2 -= 5;
        }
    }
}
namespace Bitmap
{
    public partial class Form1 : Form
    {

        float posX, posY;
         int x1, y1,x2,y2;
        Graphics g;


        public Form1()
        {
            InitializeComponent();
            posX = panel1.Width / 2;
            posY = panel1.Height / 2;
            g = panel1.CreateGraphics();
        }


        private void panel1_Paint(object sender, PaintEventArgs e)
        {
             Bitmap bmp = new Bitmap("sipka.png");
              e.Graphics.DrawImage(bmp, posX, posY, 30, 30);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            posY = posY - 5;
            panel1.Refresh();
        }
        private void button2_Click(object sender, EventArgs e)
        {
            posY = posY + 5;
            panel1.Refresh();
        }
        private void button3_Click(object sender, EventArgs e)
        {
            posX = posX + 5;

            panel1.Refresh();
        }
        private void button4_Click(object sender, EventArgs e)
        {
            posX = posX - 5;
            panel1.Refresh();
        }

    }
}
 
Odpovědět
21.5.2017 20:37
Avatar
rdaek
Člen
Avatar
rdaek:21.5.2017 22:17

Musíš si zapamatovat všechny čáry,které uz jsi kreslil a v události panel1_paint je vykreslit pomoci e.Graphics.Draw­Line(2 body) a nebo e.Graphics.Draw­Lines (ted si nejsem jisty jestli existuje nebo jsem si psal svoji ;) )

Nahoru Odpovědět
21.5.2017 22:17
Důležité je udělat program blbuvzdorným... Je pravda že mi často dost vzdorují :D
Avatar
HONZ4
Člen
Avatar
Odpovídá na joko86
HONZ4:21.5.2017 22:18

Ukládej si pozice bodů kde jsi byl do listu a při vykreslování je spoj pomocí čar.

 
Nahoru Odpovědět
21.5.2017 22:18
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.