» »

[c#]4 v vrsto - padanje krogov

[c#]4 v vrsto - padanje krogov

Keki ::

Zdravo!
Nardit moremo igro 4 v vrsto v VS c#. Nardil sem že vse, razen tega da bi krožci padali ko klikneš. Nikakor mi ne gre.
Probal sem nardit for zanko in v njej risat + klicat panel.refresh() kjer sicer pride do efekta padanja vendar mi ob klicu zbriše celotn panel. Tako da je v panelu lahko samo en krozec. Ima kdo kakšno idejo kako bi še lahko zadevo rešil?

 void narisi(Panel panel, Color barva, ref int x)
        {
            SolidBrush polnilo = new SolidBrush(barva);
            Graphics ozadje1 = panel.CreateGraphics();

            int g = x;
            for (int i = 0; i < g ; i++)
            {
                panel.Refresh();
                ozadje1.FillEllipse(polnilo, 0, i, 100, 100);
                
            }
            x = x - 100;
            stevec++;
            preveri();
 
        } 

lp
http://www.alfakan.si/
http://mihajerot.si/
  • spremenilo: Keki ()

VASkO ::

enostavno v refreshu izrisi ostale krozce, ki ze lezijo v polju. pozicije teh moras nekje hraniti.

Keki ::

Točno, kak sem smotan. Sem naredo tak, hvala :D Edino kaj je malo fleša ko na novo riše drugač pa dela :D
http://www.alfakan.si/
http://mihajerot.si/

VASkO ::

doublebuffering bo resil to tezavo, osnovni doublebuffering:

public Form1()
{
InitializeComponent();
this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true);
this.UpdateStyles();

}

Jean-Paul ::

http://msdn.microsoft.com/en-us/library...
edit: me je ze VASkO prehitel

Zgodovina sprememb…

Keki ::

Super, samo to je za formo jaz pa bi mogo spravit na panel. Ker na panelih delam vso risanje.
Edit:
Zaj sem naredo novo kontrolo doublebufferedpanel, sam ni drugega učinka ko pa da se bol počasi spušča. Še vedno blinka.

        public class DoubleBufferPanel : Panel
        {
            public DoubleBufferPanel()
            {
                this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer, true);

                this.UpdateStyles();
            }
        }
http://www.alfakan.si/
http://mihajerot.si/

Zgodovina sprememb…

  • spremenilo: Keki ()

VASkO ::

kaksno imas pa onpaint metodo?

edit: to si preberi

Zgodovina sprememb…

  • spremenil: VASkO ()

Keki ::

Sem nardil to, pa še vedno isto, blinka samo bol počasi gre. OnPaint metode nimam.
http://www.alfakan.si/
http://mihajerot.si/

VASkO ::

namespace WindowsFormsApplication1
{
    partial class Form1
    {
       private System.ComponentModel.IContainer components = null;

       protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.timer1 = new System.Windows.Forms.Timer(this.components);
            this.panel1 = new DoubleBufferedPanel();
            this.SuspendLayout();
            this.timer1.Enabled = true;
            this.timer1.Interval = 10;
            this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
            this.panel1.Location = new System.Drawing.Point(12, 12);
            this.panel1.Name = "panel1";
            this.panel1.Size = new System.Drawing.Size(565, 408);
            this.panel1.TabIndex = 0;
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(602, 579);
            this.Controls.Add(this.panel1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);
        }
        private System.Windows.Forms.Timer timer1;
        private DoubleBufferedPanel panel1;
    }
}


pa se
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication1
{
    public class DoubleBufferedPanel : Panel
    {
        Random rnd = new Random();
        private static int polozaj1_x = 0, polozaj1_y = 0;
        private static int polozaj2_x = 0, polozaj2_y = 0;
        private static int polozaj3_x = 0, polozaj3_y = 0;
        private static int polozaj4_x = 0, polozaj4_y = 0;
        private static int polozaj5_x = 0, polozaj5_y = 0;

        public DoubleBufferedPanel()
        {
            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            this.UpdateStyles();
            this.DoubleBuffered = true;
        }

        private void risi(PaintEventArgs arg)
        {
            Graphics g = arg.Graphics;
            polozaj1_x += ((rnd.Next() % 3) - 1) * 1;
            polozaj1_y += ((rnd.Next() % 3) - 1) * 1;
            polozaj2_x += ((rnd.Next() % 3) - 1) * 1;
            polozaj2_y += ((rnd.Next() % 3) - 1) * 1;
            polozaj3_x += ((rnd.Next() % 3) - 1) * 1;
            polozaj3_y += ((rnd.Next() % 3) - 1) * 1;
            polozaj4_x += ((rnd.Next() % 3) - 1) * 1;
            polozaj4_y += ((rnd.Next() % 3) - 1) * 1;
            polozaj5_x += ((rnd.Next() % 3) - 1) * 1;
            polozaj5_y += ((rnd.Next() % 3) - 1) * 1;
            
            Point center = new Point(arg.ClipRectangle.Width / 2, arg.ClipRectangle.Height / 2);

            SolidBrush polnilo = new SolidBrush(Color.Blue);
            Pen copic = new Pen(Color.Black);

            //narisi center
            Point velikost = new Point(30, 30);
            g.FillEllipse(polnilo, polozaj1_x + center.X - velikost.X / 2, polozaj1_y + center.Y - velikost.Y / 2, velikost.X, velikost.Y);
            g.FillEllipse(polnilo, polozaj2_x + center.X - velikost.X / 2, polozaj2_y + center.Y - velikost.Y / 2, velikost.X, velikost.Y);
            g.FillEllipse(polnilo, polozaj3_x + center.X - velikost.X / 2, polozaj3_y + center.Y - velikost.Y / 2, velikost.X, velikost.Y);
            g.FillEllipse(polnilo, polozaj4_x + center.X - velikost.X / 2, polozaj4_y + center.Y - velikost.Y / 2, velikost.X, velikost.Y);
            g.FillEllipse(polnilo, polozaj5_x + center.X - velikost.X / 2, polozaj5_y + center.Y - velikost.Y / 2, velikost.X, velikost.Y);
            //g.DrawLine(copic, 0, center.Y, arg.ClipRectangle.Width, center.Y);
            //g.DrawLine(copic, center.X, 0, center.X, arg.ClipRectangle.Height);

        }

        protected override void OnPaint(PaintEventArgs e)
        {

            risi(e);
        }
    }
    public partial class Form1 : Form
    {
          
        public Form1()
        {
            InitializeComponent();
        }
    private void timer1_Tick(object sender, EventArgs e)
        {
            panel1.Invalidate(false);
        }
    }
}


tole je moja testna koda, ki rise kr neke kugle ki random migetajo. dela na panel in brez flickerja. pomagaj si s tem ali pa daj kodo gor, da vidimo, kaj ga biksa.

Zgodovina sprememb…

  • spremenil: VASkO ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C# povezava forma in classa

Oddelek: Programiranje
172143 (1606) Miko55
»

[c#] seštevanje itemov v checkedListBoxu

Oddelek: Programiranje
5751 (648) mihies
»

[C#] Naključno razporejanje elementov v tabeli

Oddelek: Programiranje
202487 (2168) TheAmunraaa
»

[C#]Analogna ura

Oddelek: Programiranje
152580 (2217) cekr
»

C# Pomoč

Oddelek: Programiranje
131315 (1140) jizzer

Več podobnih tem