Kezdőoldal » Számítástechnika » Programozás » Hogyan tudnék c#-ban pong...

Hogyan tudnék c#-ban pong játékot csinálni?

Figyelt kérdés

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?



2015. aug. 6. 13:42
1 2 3
 1/30 anonim ***** válasza:
64%
Tanuld meg használni az Invalidate-függvényt, mert ezekszerint rosszul alkalmazod!
2015. aug. 6. 13:44
Hasznos számodra ez a válasz?
 2/30 A kérdező kommentje:
Akkor hogyan tudnám úgy használni hogy csak az adott elemek rajzolódjanak újra?
2015. aug. 6. 13:54
 3/30 anonim ***** válasza:
A játékok az egészet újraszokták rajzolni ha változik, ha nem.
2015. aug. 6. 15:04
Hasznos számodra ez a válasz?
 4/30 A kérdező kommentje:
De ha az egészet újrarajzolom akkor ahol nem változik ott vibrál.
2015. aug. 6. 15:15
 5/30 iostream ***** válasza:
Használj double bufferinget.
2015. aug. 6. 15:49
Hasznos számodra ez a válasz?
 6/30 anonim ***** válasza:
48%

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);

2015. aug. 6. 20:23
Hasznos számodra ez a válasz?
 7/30 anonim ***** válasza:

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 });

2015. aug. 6. 20:48
Hasznos számodra ez a válasz?
 8/30 A kérdező kommentje:

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.

2015. aug. 6. 21:20
 9/30 anonim ***** válasza:
Erre tegnap már adtam egy működő megoldást. Nem nézted meg?
2015. aug. 6. 21:22
Hasznos számodra ez a válasz?
 10/30 A kérdező kommentje:
Tényleg. Tegnap csak gyorsan átfutottam. Köszi.
2015. aug. 6. 21:35
1 2 3

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!