Hogyan tudnék c#-ban pong játékot csinálni?
Nagyából tudom hogy kell csak annyi gondom lenne hogy a panel-en vannak olyan elemek amiket csak egyszer kell rárajzolni vagy ritkán kell újrarajzolni és vannak olyanok amiket többször de ha a refresh függvényt használom akkor az egész panel újrarajzolódik ha pedig az invaildate függvényt akkor pedig semmi sem.
Ezt hogy tudnám megoldani?
Nagyobb játékoknál valóban az egész képet újrarajzolják, de azok DirectX-et vagy OpenGL-t használnak, az más téma...
...ilyen kis programoknál, főleg, ahol kevés a rajzolnivaló, ott nagy erőforráspazarlás ha mindig kirajzoltatjuk az egész képet...
Válassz:
1.: public void Invalidate(Region region);
2.: public void Invalidate(Region region, bool invalidateChildren);
3.: public void Invalidate();
4.: public void Invalidate(bool invalidateChildren);
5.: public void Invalidate(Rectangle rc);
6.: public void Invalidate(Rectangle rc, bool invalidateChildren);
Ezek közül talán az 5-ös pont az, aminek hasznát tudod venni, itt ugyanis medagod azt a négyszöget, amelyet újra akarsz rajzolni...
Pl.:
Rectangle rc;
rc = new Rectangle(10, 10, 50, 50);
Invalidate(rc);
Reflection-nel engedélyezheted a double buffering-et. Ezt még azelőtt kell, mielőtt még bármit is elkezdenél kirajzolgatni.
using System.Reflection;
typeof(Panel).InvokeMember("DoubleBuffered", BindingFlags.SetProperty
| BindingFlags.Instance | BindingFlags.NonPublic, null,
[panel neve], new object[] { true });
Igaz Mondó, így próbáltam de nem sikerült:
private Rectangle r;
public Form1()
{
InitializeComponent();
panel1.BackColor = Color.Black;
r = new Rectangle(0, panel1.Height / 2 - rSize / 2, rSize, rSize)
panel1.Paint += new PaintEventHandler(panel1_Paint);
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawRectangle(Pens.White, r);
}
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
r.X = e.X;
r.Y = e.Y;
//panel1.Refresh();
panel1.Invalidate(r);
}
A négyzet fenti és bal oldala minden újrarajzolásnál megmaradt.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!