none
Movimientos de Objetos

    Question

  • Hola a todos!<o:p></o:p>

    <o:p> </o:p>

    Disculpen la pregunta, se que va a ser un poco escueta pero verdaderamente estoy desubicado.<o:p></o:p>

    <o:p> </o:p>

    Estoy haciendo un programa en C# en programación en capas (tres capas) con visual studio 2010, lo que requiero es poner un objeto dentro de un picture box, el objeto es otra imagen, y requiero que este objeto se mueva en forma aleatoria dentro del picture, simulando el movimiento de un pez. Realmente nunca he programado algo se mueva por lo que está resultando un verdadero dolor de cabeza, he visto que se habla de que debo usar un método Timer pero no logro encontrar la lógica…<o:p></o:p>

    Como dije sé que la pregunta es muy escueta pero si alguien pudiera darme un poco de luz con respecto a cómo manejar este objeto se lo agradecería!! <o:p></o:p>

    Wednesday, February 22, 2012 4:23 AM

Answers

  • Un form, un timer, un picturebox, un image. Un evento load del form, tick del timer y paint del picturebox.

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            Bitmap pez;
            Point pos;
            int dx;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                pez = new Bitmap(@"c:\walter\pescado.png");
                pos = new Point(0, (pictureBox1.Height - pez.Height) / 2);
                dx = pez.Width / 2;
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                pos.X += dx;
    
                if ((pos.X + pez.Width > pictureBox1.ClientRectangle.Width)||(pos.X < 0))
                {
                    pez.RotateFlip(RotateFlipType.RotateNoneFlipX);
                    dx *= (-1);
                }
    
                pictureBox1.Refresh();
            }
    
            private void pictureBox1_Paint(object sender, PaintEventArgs e)
            {
                e.Graphics.DrawImage(pez, pos);
            }
        }
    }
    

    • Marked as answer by Arbac Wednesday, February 29, 2012 4:08 AM
    Wednesday, February 22, 2012 6:22 AM

All replies

  • hola

    o sea quieres que algo se mueva dentro de un picturebox

    no has evaluado crear una imagen que sea un gif animado ? dig este tipo de imagen se moveria dentro del picturebox

    pero seria una imagen que es justamente lo que este control permite visualizar

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Wednesday, February 22, 2012 4:28 AM
  • mmm creo que no me sirve. 

    A ver si me explico mejor, el objeto que hay que insertar de hecho es un pez, pero el usuario tiene la potestad de elegir entre varios tipos, el objeto pez ya esta creado y agregarlo al form donde está el picturebox no lo veo tan complicado, el problema es: ¿Como hago que se mueva el vendito animal este? No es que necesito que mueva la cola y todo eso, solo que se mueva dentro del picturebox que será su pecera.


    Arbac


    • Edited by Arbac Wednesday, February 22, 2012 4:59 AM
    Wednesday, February 22, 2012 4:41 AM
  • Un form, un timer, un picturebox, un image. Un evento load del form, tick del timer y paint del picturebox.

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            Bitmap pez;
            Point pos;
            int dx;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                pez = new Bitmap(@"c:\walter\pescado.png");
                pos = new Point(0, (pictureBox1.Height - pez.Height) / 2);
                dx = pez.Width / 2;
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                pos.X += dx;
    
                if ((pos.X + pez.Width > pictureBox1.ClientRectangle.Width)||(pos.X < 0))
                {
                    pez.RotateFlip(RotateFlipType.RotateNoneFlipX);
                    dx *= (-1);
                }
    
                pictureBox1.Refresh();
            }
    
            private void pictureBox1_Paint(object sender, PaintEventArgs e)
            {
                e.Graphics.DrawImage(pez, pos);
            }
        }
    }
    

    • Marked as answer by Arbac Wednesday, February 29, 2012 4:08 AM
    Wednesday, February 22, 2012 6:22 AM
  • me pare un buen ejemplo como el de MDV. pero pues igual puede manejar dos imagene de los dos lados izquierdo y derecho cuando llehe al limite o tope te dara un egecto de que el pez se voltea.
    Wednesday, February 22, 2012 4:09 PM
  • A ver!! Según el codigo de MDV, debería crear el meto que carge al pez dentro del form, y que este metodo llame a los metodos Form1_Load(), timer1_Tick() y pictureBox1.Refresh()?


    Arbac

    Thursday, February 23, 2012 1:15 PM
  • El ejemplo responde a la pregunta de como mover una imagen dentro de un picturebox.

    ¿si yo usaría un picturebox para esto? Jamás, pienso.

    ¿si está bien usar un timer? a mí me parece bien. Podrías ejecutar un stream de midievent's y capturarlos en un callback y desde allí mover el pescau al ritmo de la música.

    En el Load del form cargas la imagen porque allí es donde el form inicia. En el tick del timer modificas la posición de la imagen y haces el refresh del picturebox. En el paint dibujas la imagen en la posición actual. En paint es ordenado por el sistema operativo como un side effect del refresh.

    Thursday, February 23, 2012 11:11 PM
  • Ok listo el pez se mueve...

    mmm para el que lo vea el pos, lo que dio MDV sirve, lo único antes de

    pos.X += dx;

    hay que agregar algo como

    pez.Location = pos;

    Gracias a todos

     

    Arbac

    Wednesday, February 29, 2012 4:05 AM
  • A ver!! Según el codigo de MDV, debería crear el meto que carge al pez dentro del form, y que este metodo llame a los metodos Form1_Load(), timer1_Tick() y pictureBox1.Refresh()?


    Arbac

    El código de MDV ya contempla eso!!

    Esta linea hace que el pez se volteé 

    pez.RotateFlip(RotateFlipType.RotateNoneFlipX);


    Arbac

    Wednesday, February 29, 2012 4:07 AM