Forum » Programiranje » [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?
lp
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/
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/
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();
}
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
edit: me je ze VASkO prehitel
Zgodovina sprememb…
- spremenil: Jean-Paul ()
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.
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/
http://mihajerot.si/
Zgodovina sprememb…
- spremenilo: Keki ()
Keki ::
Sem nardil to, pa še vedno isto, blinka samo bol počasi gre. OnPaint metode nimam.
http://www.alfakan.si/
http://mihajerot.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 ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | C# povezava forma in classaOddelek: Programiranje | 2353 (1816) | Miko55 |
» | [c#] seštevanje itemov v checkedListBoxuOddelek: Programiranje | 836 (733) | mihies |
» | [C#] Naključno razporejanje elementov v tabeliOddelek: Programiranje | 2698 (2379) | TheAmunraaa |
» | [C#]Analogna uraOddelek: Programiranje | 2746 (2383) | cekr |
» | C# PomočOddelek: Programiranje | 1410 (1235) | jizzer |