Hallo,
dies ist mein erster Beitrag hier im Forum, deshalb stelle ich mich kurz vor:
Ich bin 26 Jahre alt und programmiere seit meinem 12 Lebensjahr mal mehr und mal weniger.
Angefangen habe ich mit BlitzBasic. Irgendwann habe ich dann recht viel mit PHP und HTML gemacht. Nun bin ich vor wenigen Wochen auf C# gestoßen.
Dies ist nun auch meine erste Berührung mit der OOP, was mir einige Probleme bereitet.
Ich habe zwar schon viel gelesen, allerdings bleiben doch viele Fragen, weshalb ich mich nun hier angemeldet habe.
Momentan stehe ich vor folgendem Problem bei meinem "Spiel" mit C# und dem MonoGame Framework.
Ich zeichne einen "Menschen". Dann zeichne ich noch einen Menschen.
Beide kann ich instanzieren und dann auch mittels Methode in der Klasse Mensch auch bewegen.
Nun sollen irgendwann mehr Menschen hinzukommen, so dass ich nicht mehr für jeden möglichen Menschen die Methode Bewegen() aufrufen will.
Nun habe ich an eine statische Methode gedacht. Allerdings kann ich in dieser nicht die Positionswerte der zuvor erstellten Menschen nutzen.
Gibt es eine Möglichkeit eine Methode für alle Objekte aufzurufen?
Hier mal mein Quellcode der Methode:
public void Bewegen()
{
// TODO: Add your update logic here
MouseState newState = Mouse.GetState();
//Ball mit links klicken
if (newState.LeftButton == ButtonState.Pressed && oldState.LeftButton == ButtonState.Released && isclicked == false)
{
mausx = newState.X;
mausy = newState.Y;
if (mausx >= mposx && mausy >= mposy && mausx <= mposx + 64 && mausy <= mposy + 64)
{
/*
Random rnd = new Random();
randx = rnd.Next(1, _graphics.PreferredBackBufferWidth - 56);
randy = rnd.Next(1, _graphics.PreferredBackBufferHeight - 56);
*/
isclicked = true;
}
}
if (newState.RightButton == ButtonState.Pressed && oldState.RightButton == ButtonState.Released && isclicked == true && ziel == false)
{
mausx = newState.X;
mausy = newState.Y;
int posx = mposx;
int posy = mposy;
ziel = true;
}
if (isclicked == true && mposx != mausx && ziel == true)
{
if (mposx > mausx) { mposx--; }
if (mposx < mausx) { mposx++; }
}
if (isclicked == true && mposy != mausy && ziel == true)
{
if (mposy > mausy) { mposy--; }
if (mposy < mausy) { mposy++; }
}
if (mposy == mausy && mposx == mausx) { ziel = false; isclicked = false; }
//rechts klick
oldState = newState; //
}
Ich danke euch schon Mal für eure Mühen!
Hallo Jonas2909,
Gibt es eine Möglichkeit eine Methode für alle Objekte aufzurufen?
Speichere alle Menschen in einer Liste, dann kannst du z.B. mit foreach
über diese Liste iterieren und für jedes Menschen-Objekt die Methode aufrufen.
public class Welt
{
private readonly List<Mensch> _menschen;
public void BewegeAlleMenschen(/* ... */)
{
foreach (Mensch mensch in _menschen)
{
mensch.Bewege(/* ... */);
}
}
}
BTW: [Tipp] Anfängerhinweis == true / == false
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
...PHP...C#...OOP... Auf Vorrat: C# erzwingt die Verwendung von Klassen zum Definieren von Variablen und Methoden. Datentypsicherheit wird auch streng gehandhabt: FAQ - Variablennamen zur Laufzeit...
Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉
Ich danke euch! Es funktioniert super und hat mir sogar Probleme erspart, die später aufgetreten wären!
Und auch die von euch verlinkten Feinheiten werde ich gleich einbauen um einen sauberen Code zu bekommen.
Vielen Dank! Hier kann das geschlossen werden.