Hier mein Programm: Citybuilder 1.0

Alexander12 hat gesagt.:
Ich lade mir jetzt gerade Gimp runter(7.5 MB *erschöpftkling* ISDN, weißt!).

Ist eh klein? Photoshop CS2 Trial ist über 200 MB groß. Oder wo hast das denn sonst her?

Aber ein Problem habe Ich noch: Kann Ich den Bildern, die per GDI+ ja mit OnPAINT aufegamalt sind einen EventHandler zuweisen? :)

Überleg mal. Nein.
Musst die Maus-Events des Controls abfragen auf dem du zeichnest, und dann kannst dir ja ausrechnen über welchem Feld die Maus ist.
 
Hi.

Ja, also nehme Ich das Form Click Event, aber mit dem Abfangen komm ich noch nicht ganz klar. Kannst du mir ein Beispiel geben?

MfG Alexander12
 
MouseDown, MouseMove, MouseUp - An diese Events solltest dich halten.
Diese liefern dir in den (Mouse-)EventArgs mit welche Maustasten gedrückt wurden, und wo sich die Maus zu dem Zeitpunkt befunden hat.

Wofür genau willst ein Beispiel?
 
Dann wirst du dich aber damit abfinden müssen, dass du unsauberen (kann sein, dass das vielleicht das falsche Wort ist) Code programmierst.
Spätestens, wenn du auf die Idee kommst ein Malprogramm zu entwickeln wirst du dich mit diesen Events auseinandersetzen müssen.
Oder wenn du deinen "FileManager" um die Drag'n'Drop-Funktion erweitern willst.
 
Als Beispiel zum Verschieben von Spielobjekten hab ich dir mal was kleines gebastelt. Den Verschieb-Code zeig ich dir mal hier. Das ganze Projekt ist angehängt. Ist nur ein kleines und simples Beispielprojekt.
Geht noch vieles zum Besser machen. (Einführen von Events für die GameObjekte, und und und..., Gezeichnet hab ich auch nur schnell was kleines)

Code:
IGameEntity selected = null;

private void DrawSurface_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
	if (selected != null)
	{
		Point new_location = new Point(
			e.X-selected.Size.Width/2,
			e.Y-selected.Size.Height/2);
		selected.Location = new_location;
		this.Invalidate();
	}
}

private void DrawSurface_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
	Point mouse = new Point(e.X, e.Y);
	foreach (IGameEntity entity in this.objects)
	{
		if (entity.Border.Contains(mouse))
		{
			selected = entity;
			selected.Select();
			break;
		}
	}
	this.Invalidate();
}

private void DrawSurface_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
	selected.UnSelect();
	selected = null;
	this.Invalidate();
}
 

Anhänge

  • Alexander12_gameTestStuff.zip
    38,8 KB · Aufrufe: 34
Sag mal Alex, hsat leicht zuviel Zeit? *gg*

Aber gleich auch für dich etwas zum Lernen:
ControlStyles.DoubleBuffer ist unter .net 2 deprecated -> use ControlStyles.OptimizedDoubleBuffer instead :)

Und die ScaleDimensions -> AutoScaleDimensions, aber das konvertiert er bei der Umstellung auf ein .net 2.0 Projekt nicht. Trotzdem *kicher*.

Ach ja, dein Teil unterstützt nur Rechtecke *kicher* *rennt*
 
Norbert Eder hat gesagt.:
Sag mal Alex, hsat leicht zuviel Zeit? *gg*

Aber gleich auch für dich etwas zum Lernen:
ControlStyles.DoubleBuffer ist unter .net 2 deprecated -> use ControlStyles.OptimizedDoubleBuffer instead :)

Und die ScaleDimensions -> AutoScaleDimensions, aber das konvertiert er bei der Umstellung auf ein .net 2.0 Projekt nicht. Trotzdem *kicher*.

Ach ja, dein Teil unterstützt nur Rechtecke *kicher* *rennt*

Ist ja auch nur ein fixes Beispiel, erstellt unter VS.net 2003. Also -> .net 1.1
 

Neue Beiträge

Zurück