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 | 2441 (1904) | Miko55 |
» | [c#] seštevanje itemov v checkedListBoxuOddelek: Programiranje | 895 (792) | mihies |
» | [C#] Naključno razporejanje elementov v tabeliOddelek: Programiranje | 2817 (2498) | TheAmunraaa |
» | [C#]Analogna uraOddelek: Programiranje | 2845 (2482) | cekr |
» | C# PomočOddelek: Programiranje | 1471 (1296) | jizzer |