C# OOP-Spiel

qaysxdr

Cadet 4th Year
Registriert
Apr. 2011
Beiträge
122
Liebe CB-Community,
im Rahmen des Informatikunterrichts bin ich gerade dabei ein Spiel zu programmieren. Dieses soll dem Spiel "lanesplitter" (Android-Market) ähneln, d.h. man fährt mit einem Motorrad auf einer Straße und überholt Autos.
Mein Problem liegt beim dynamischen erstellen der PictureBoxen für die Streifen, in die ich eine weisse Bitmap lade. Entwerder die Streifen verschwinden völlig (obwol ich .BringToFront verwende) oder sie sind an den falschen stellen.
Für die pictureboxen habe ich ein zwei dimensionales Array angelegt. Der erste Wert soll die Spur, der zweite den Streifen angeben.

Das hier ist die Methode, die die Streifen erstellen soll; übergeben werden die anzahl der Streifen pro spur und die anzahl der Spuren
Code:
void ErstelleStreifen(int anzSpuren, int anzStreifen)
		{	
			
			PictureBox[ , ] streifen= new PictureBox[anzSpuren, anzStreifen];
							
			
			
				
			for(int i=0; i<anzSpuren;i++)
			{	
						for(int j=0; j<anzStreifen; j++)
						{	
							streifen[i,j] = new PictureBox();
							streifen[i,j].Image = new Bitmap("streifen.PNG");
							
							streifen[i,j].Location=new Point(pictureBox1.Width/anzSpuren*(i+1), j*pictureBox1.Height/(120));
							//streifen[i,j].Location=new Point(100, 100);
							
							
							
							streifen[i,j].BringToFront();
							this.Controls.Add(streifen[i,j]);

							
						}
				}					
					
		}


Vielen Dank im voraus
 
Ich vermute aber, es handelt sich um ein Spiel mit schnellen Bewegungen?

Ja genau. Deshalb dachte ich auch, dass PictureBoxen von Vorteil sind, da man die einfach bewegen kann.
 
Ja genau. Deshalb dachte ich auch, dass PictureBoxen von Vorteil sind, da man die einfach bewegen kann.

Das Problem sind die schnellen Bewegungen. Die Pictureboxen werden zu langsam sein, die sind nur für Standbilder zu gebrauchen. Und bei Drawing2D entsteht bei Bewegungen der Flacker-Effekt durch die Neuzeichnung.

Ehrlich gesagt, ist dein Vorhaben nicht einfach. Ein deutlich bessere lösung wäre XNA.
 
Ehrlich gesagt, ist dein Vorhaben nicht einfach. Ein deutlich bessere lösung wäre XNA.
Nagut, das kann ich aber nun nicht ;)

Kannst du, auch wenn der Weg nicht der beste ist, im Script erkennen warum meine PictureBoxen nicht sind wo sie sein sollten? Ich verzweifle gerade...das ist ein Fall für Galileo Mystery, die machen was sie wollen:D
 
Kannst du, auch wenn der Weg nicht der beste ist, im Script erkennen warum meine PictureBoxen nicht sind wo sie sein sollten? Ich verzweifle gerade...das ist ein Fall für Galileo Mystery, die machen was sie wollen

Schick mir mal das ganze Projekt bitte, da kann ichs auch gleich ausprobieren.

Ich lad mir derweil mal das Android-Game aufs Smartphone. Ich muss erst mal verstehen, wie es am Ende aussehen soll.
 
Zuletzt bearbeitet:
Soll ich dir das Projekt per Mail senden oder reicht so? Die Bitmap ist sowieso nur ein Balken
mit 10*60 Pixeln.

EDIT: plötzlich geht es ;)
Code:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace ls2
{
	/// <summary>
	/// Description of MainForm.
	/// </summary>
	public partial class MainForm : Form
	{
		public MainForm()
		{	
		//	int anzahlStreifen=3;
		

		
		//int geschwindigkeit=1;
		
		InitializeComponent();
		
			
			
		// int anzahlSpuren=3;
		// int Spurbreite=20;
		// int Spurhoehe= 40;
		 
		// streifen.erstellen("streifen1", 20, 30, new Point(50,50));
		 
		 
		ErstelleStreifen(4,4);
		
			timer1.Enabled=true;
			
			
			
			
		}
		
		void Timer1Tick(object sender, EventArgs e)
		{
			
		}
		
		void BewegeStreifen (int speed)
		{	
			
			
			//streifen[i,j].Location= new Point(streifen[i,j].Location.X, streifen[i,j].Location.Y +speed);
		
		}
		
		void ErstelleStreifen(int anzSpuren, int anzStreifen)
		{	
			
			PictureBox[ , ] streifen= new PictureBox[anzSpuren, anzStreifen];
							
			
			
				
			for(int i=0; i<anzSpuren;i++)
			{	
						for(int j=0; j<anzStreifen; j++)
						{	
							streifen[i,j] = new PictureBox();
							streifen[i,j].Image=new Bitmap("streifen.PNG");
							streifen[i,j].Location=new Point(pictureBox1.Width/anzSpuren*(i+1), j*100);
							//streifen[i,j].Location=new Point(100, 100);
							
							
							
							this.Controls.Add(streifen[i,j]);
							streifen[i,j].BringToFront();
							
							
							
						}
				}					
					
		}
	}
}
 
Zuletzt bearbeitet:
Eine Sache geht. Hat trotzdem noch Macken ;)
 

Anhänge

  • ls2.7z
    10,2 KB · Aufrufe: 64
Ich hab hier mal ein Screenshot. Was sind jetzt die Streifen? Schaut man von Oben?
 

Anhänge

  • CBProject23.png
    CBProject23.png
    34 KB · Aufrufe: 139
hier ist es jetzt richtig:
Ergänzung ()

kann ich ein ganzes Array direkt ansprechen?
wenn ich jetzt alle Streifen gleichzeitig bewegen will, kann man sowas hier machen
Code:
streifen[].Location= new Point(streifen[].Location.X, streifen[].Location.Y +speed);
 

Anhänge

  • ls2.7z
    10,3 KB · Aufrufe: 70
Zuletzt bearbeitet:
Ah ok.
Dann danke für den netten Plausche ;)
ich muss im Laufe des Projekt sicher noch das ein oder andere fragen ;)
 
Hier mal umgesetzt mit Drawing2D.
Ich hoffe du kannst das öffnen (ich nutze VS2010), sonst start halt die Exe.
 

Anhänge

  • CBProject1.rar
    670,8 KB · Aufrufe: 86
Schon nicht schlecht Thaxll'ssillyia, aber ich würde es mit Doublebuffering machen, dann flackert es nicht. :D
 

Anhänge

  • CBProject1.rar
    9,9 KB · Aufrufe: 88
Zurück
Oben