Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

BLU3 L30PARD

Treue Seele

  • »BLU3 L30PARD« ist der Autor dieses Themas

Beiträge: 336

Wohnort: Hoch oben im Norden Schleswig Holsteins

Beruf: Schüler

  • Private Nachricht senden

21

31.12.2010, 15:08

Ok ich habe jetzt die Klassen Game, ObjectManager, GameObject und Player (Gegner Klasse hab ich erstmal weggelassen)
Jetzt müsste ich ja, um in der Game Klasse (enthält Main funktion) ObjectManager.Draw() und ObjectManager.Update()
aufrufen zu können, folgendes tun:

Player Klasse:

C#-Quelltext

1
2
3
4
public class Player : GameObject
{
    // Player Eigenschaften etc.
}


GameObject Klasse:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class GameObject
{
    // Was genau sollte man hier eig. reinschreiben?
    // Alles wirklich wichtige haben ja schon die Object Klassen (Player, etc.) selbst ...

    public GameObject()
    {
        // ...
    }

    public void Draw(RenderWindow targetWindow)
    {  
        // ...
    }
 
    public void Update()
    {  
        // ...
    }
}


ObjectManager Klasse:

C#-Quelltext

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
public class ObjectManager
{
    List<GameObject> objects = new List<GameObject>();
    Player player = new Player();
    
    public ObjectManager()
    {
        objects.Add(player);
    }

    public void Draw(RenderWindow targetWindow)
    {
        for (int i = 0; i < objects.Capacity; i++) {
            objects[i].Draw(targetWindow); // Hier tritt beim kompilieren ein Fehler auf:
                                                          // Der Index lag außerhalb des Bereichs. Er muss nicht 
                                                          // negativ und kleiner als die Auflistung sein.
                                                          // Parametername: index
        }
    }

    public void Update()
    {
        for (int i = 0; i < objects.Capacity; i++) {
            objects[i].Update();
        }
    }
}


Game Klasse:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Game
{
    ObjectManager objectManager = new ObjectManager();    

    public Game()
    {
        RenderWindow App = new RenderWindow(new VideoMode(800, 600, 32), "Game");
        App.Closed += new EventHandler(OnClose);
        
        while(App.IsOpened())
        {
            App.DispatchEvents();
            App.Clear();
            objectManager.Draw(App);
            objectManager.Update()
            App.Display();
        }
    }    
    // Dann kommen die Events und die Main Funktion
}


Irgendwo hier sind einige Fehler, das ist klar! Einige habe ich kommentiert ;)
Könnt ihr mir vielleicht sagen, ob das zumindest halbwegs richtig ist??

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

22

31.12.2010, 15:20

GameObject enthält zum beispiel das sprite, eine richtung und geschwindigkeit. denn das haben alle objekte im spiel gemeinsam oder?
die updatefunktion oder eine methode die von der updatemethode aufgerufen wird muss virtual sein. d.h. du kannst mit einer referenz auf die basisklasse die methode der abgeleiteten klasse, falls sie(bei c# mit dem schlüsselwort override) überschrieben wurde, aufrufen. denn projektile verhalten sich anders als gegner oder raketen. für die drawmethode gilt das selbe.(kann ja sein dass ein spezielles objekt aus mehreren sprites besteht oder ähnliches)

kauf dir nen nachschlagewerk zu C# oder C++. dort steht das alles drin...(oder sollte zumindest drin stehen)
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »NachoMan« (31.12.2010, 15:26)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

23

31.12.2010, 16:11

Ja, ich erwarte, dass ein Programmierer eine simple physikalische Formel (Multiplikation) beherrscht, die schon Newton kannte und die aus nur 2 Variablen (Zeit und Geschwindigkeit) besteht. Ernsthaft!
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

24

31.12.2010, 16:16

Zu deinem Fehler im ObjectManager:
1. Ist das kein Compile-Fehler sondern ein Runtime-Fehler ;)
2. Du gehst von 0 bis Capacity. Count ist das was du suchst, denn eine Liste kann schon speicher für mehr elemente reserviert haben, als eigentlich drin ist (Capacity gibt dir an, für wieviele elemente speicher reserviert ist)
3. alternativ kannst du auch einfach foreach nehmen ;)

Die Updatefunktion könntest du auch in einen parallel query umbauen, aber ich glaub das ist ein wenig overkill ;)

BLU3 L30PARD

Treue Seele

  • »BLU3 L30PARD« ist der Autor dieses Themas

Beiträge: 336

Wohnort: Hoch oben im Norden Schleswig Holsteins

Beruf: Schüler

  • Private Nachricht senden

25

31.12.2010, 18:36

@BlueCobold: Das habe ich doch oben geschrieben ;) Ich habe es übersehen, bzw. seltsamerweise bei diesem Spiel vergessen.
normalerweise benutze ich diese Formel auch. Ich meine, das steht ja selbst im SFML Tutorial :D
Sorry nochmal, das war wirklich ein blödes versehen.

@Sylence:
1. Stimmt :D
2. Danke, ich habe in meinem C# buch und in dem Openbook(natürlich auch Google) nach einer
Alternative für std::vector<T>.count in C# gesucht, bin dabei aber nur Capacity gestoßen...
3. Ja könnte ich, ist ja aber eigentlich irrrelevant ;)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

26

31.12.2010, 20:37

List<?>.Count
Array[?].Length
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

idontknow

unregistriert

27

31.12.2010, 21:54

@Sylence:
1. Stimmt :D
2. Danke, ich habe in meinem C# buch und in dem Openbook(natürlich auch Google) nach einer
Alternative für std::vector<T>.count in C# gesucht, bin dabei aber nur Capacity gestoßen...
3. Ja könnte ich, ist ja aber eigentlich irrrelevant ;)


google mal nach nem Tutorial wie man google benutzt, wird dir dein Leben erleichtern!

BLU3 L30PARD

Treue Seele

  • »BLU3 L30PARD« ist der Autor dieses Themas

Beiträge: 336

Wohnort: Hoch oben im Norden Schleswig Holsteins

Beruf: Schüler

  • Private Nachricht senden

28

01.01.2011, 01:16

Also jetzt verarschst du mich! Ich weiß sehr wohl, wie man Google benutzt!
U.a. "intitle:, inurl:, filetype:" etc. ;) Ihr müsst mich hier wirklich nicht für dumm verkaufen,
nur weil ich hier (größtenteils) Verständnisfragen stelle ;)
Sorry, aber DAS muss wirklich nicht sein!

idontknow

unregistriert

29

01.01.2011, 04:25

Hey ich hab dich verarscht, jein.

Google einfach mal nach "C# List size" und dann lies dir nochmal deine Frage durch.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

30

01.01.2011, 09:39

Oder "std::list count in c#"
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige