Beetje vage topictitel ben ik bang, maar hier is het probleem:
Ik ben bezig met een spelletje te maken waarin een slang door een doolhof beweegt, even simpel gesteld. De slang bestaat uit een array van rectangles, zodat ik elk deel van de slang afzonderlijk op het scherm kan tekenen. Dit is makkelijk als de slang de bocht om gaat.
Verder heb ik een timer. Bij elke tik van de timer beweegt de slang een bepaalde richting op.
Bij elke tik van de timer doe ik momenteel het hele doolhof + achtergrond + slang opnieuw tekenen. Alhoewel dit allemaal prima werkt is het steeds opnieuw tekenen van het doolhof + achtergrond plaatje bij elke tik niet gewenst. Ik wil alleen de slang opnieuw tekenen door alle onderdelen van de slang bv 1 hokje verder naar links te tekenen, waarbij ook het puntje van de staart 1 hokje naar links gaat en de oude positie van de staart gewist moet worden. (zie plaatje)

Probleem is dat ik geen flauw benul heb hoe ik dit aan moet pakken. Als ik het gele hokje wil wissen, wil ik hier weer de achtergrond zien. Uiteraard heb ik google gebruikt, maar niks bruikbaars kunnen vinden.
Hier de relevante code:
Iemand een idee hoe ik dit kan aanpakken? Ik zat zelf te denken om de slang op een transparente 'layer' te tekenen, maar ik heb geen manier kunnen vinden om dit mogelijk te maken in C#.
Ik ben bezig met een spelletje te maken waarin een slang door een doolhof beweegt, even simpel gesteld. De slang bestaat uit een array van rectangles, zodat ik elk deel van de slang afzonderlijk op het scherm kan tekenen. Dit is makkelijk als de slang de bocht om gaat.
Verder heb ik een timer. Bij elke tik van de timer beweegt de slang een bepaalde richting op.
Bij elke tik van de timer doe ik momenteel het hele doolhof + achtergrond + slang opnieuw tekenen. Alhoewel dit allemaal prima werkt is het steeds opnieuw tekenen van het doolhof + achtergrond plaatje bij elke tik niet gewenst. Ik wil alleen de slang opnieuw tekenen door alle onderdelen van de slang bv 1 hokje verder naar links te tekenen, waarbij ook het puntje van de staart 1 hokje naar links gaat en de oude positie van de staart gewist moet worden. (zie plaatje)

Probleem is dat ik geen flauw benul heb hoe ik dit aan moet pakken. Als ik het gele hokje wil wissen, wil ik hier weer de achtergrond zien. Uiteraard heb ik google gebruikt, maar niks bruikbaars kunnen vinden.
Hier de relevante code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| public class Board : System.Windows.Forms.Form
{
private PictureBox screen;
private Bitmap img;
private Graphics g;
public Board()
{
InitializeComponent();
screen = new PictureBox();
screen.Size = new System.Drawing.Size(620, 545);
Controls.AddRange(new Control[] {screen});
img = new Bitmap(620, 545);
g = Graphics.FromImage(img);
Render();
}
private void Render()
{
g.DrawImage(level.Draw(620, 520), 0, 0); // Draw background image + level
g.DrawImage(snake.GetHeadImage(), snake.body[0].X,snake.body[0].Y); // draw head
for (int i = 1; i < snake.getLength() - 1; i++) // draw bodyparts
g.DrawImage(snake.GetBodyImage(i), snake.body[i].X,
snake.body[i].Y);
g.DrawImage(snake.GetTailImage(),snake.body[snake.getLength()-1].X,
snake.body[snake.getLength() - 1].Y); // draw tail
screen.Image = img;
}
private void OnTimer(object sender, EventArgs e)
{
snake.MoveBody();
Render();
}
} |
Iemand een idee hoe ik dit kan aanpakken? Ik zat zelf te denken om de slang op een transparente 'layer' te tekenen, maar ik heb geen manier kunnen vinden om dit mogelijk te maken in C#.