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

TigerClaw25

unregistriert

21

07.05.2013, 17:57

Eine Sache noch zur statischen Variablen. Hatte diese zuvor ueber den Konstruktor von Enemy initialisiert, aber sobald in mehrere Gegner erzeuge, wechselt es ununterbrochen zwischen den Zufallszahlen, statt wie bei einem Gegner nach 2 Sekunden.

Was mache ich falsch?

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

22

07.05.2013, 18:05

Was du falsch machst? Nun ja, u.a. benutzt du den Editbutton immer noch nicht...
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

TigerClaw25

unregistriert

23

07.05.2013, 18:09

Schreibe ueber Smartphone, daher benutze ich den editbutton nicht immer.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

24

07.05.2013, 18:40

Ich finde Smartphones sind keine Ausrede für "Ich benutze nicht den Editbutton", oder "Ich mache 1000 Tippfehler". Das schreiben zwar einige hier gern mal, aber richtig ist es nicht;) Wer Hilfe will gibt sich mühe oder die die helfen tun dies auch nicht. Das ist halt ganz einfach so und ich denke auch verständlich;) Versuch also bitte demnächst den Button den es ja extra für solche Sachen gibt zu benutzen.
Zu deinem Problem. Einiges beim Programmieren benötigt Erfahrung. Die kann man nicht erfragen sondern muss sie sich verdienen. Und zwar durch viel Arbeit. Wenn es einem dann wirklich Spaß macht tut die arbeit nicht mal weh sondern ist halt spaßig. Dass einige Dinge grad aufwendig sind ist also völlig normal, da einfach einiges an Erfahrung fehlt. Du kannst jetzt einfach weiter machen und versuchen das Problem irgendwie zu lösen. Das kann auch ruhig mal viel Code werden. Das ist ganz normal. Beim nächsten Projekt wird das dann vielleicht etwas besser und mit der Zeit bekommst du immer mehr, neue Ideen um deine Probleme zu lösen. Zusätzlich kannst du dich natürlich immer weiter bilden. Bücher sind ein Geschenk und helfen in vielen Dingen weiter. Du hast soweit ich das im Kopf habe das Buch von Heiko gelesen. Der nächste Schritt wäre ein vernünftiges Grundlagenbuch zu C++, was einerseits dein C++ Wissen festigen, andererseits aber auch stark ausbauen würde. Bücher wie "Effective C++" sind auch eine tolle Sache um dazu zu lernen. Dafür sollte man aber schon ein wenig mehr Erfahrung haben wie ich finde. Dann hilft natürlich einfach nur viel Entwickeln weiter. Machen, machen, machen. Wenn man die Sprache einigermaßen beherrscht finde ich, sind Tutorials im Internet auch nicht total daneben. Man sieht Lösungswege von anderen und kann sich manchmal ein paar Dinge abgucken. Natürlich kann da auch sehr viel Mist präsentiert werden, weshalb man das mit Vorsicht genießen sollte. Dabei sollte man auch vielleicht weniger nach grundlegenden Tutorials suchen. Vielleicht einfach mal gucken wie die anderen ein Pong entwickeln würden. Oder möglicherweise ein Tetris. Oder was auch immer es noch so alles gibt. Dabei siehst du viele neue Lösungswege und kannst diese mit aufnehmen. Aber noch mal, man sollte schon ein wenig von der Sprache verstehen um wenigstens bei richtig groben Fehler abschätzen zu können ob da nur Mist passiert oder das gezeigte sinnvoll ist. Und dann als letztes gibt es halt machen, machen, machen. Das kann man einfach nicht oft genug betonen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

TigerClaw25

unregistriert

25

07.05.2013, 19:58

Danke fuer deinen ausfuehrlichn Beitrag. Ich werde versuchen es umzusetzen und mir ein Grundlagenbuch zulegen, eventuell finde ich darin auch moegliche Ideen fuer Loesungswege.

EDIT: Habe jetzt übrigens auch die Bewegung so hinbekommen, wie ich es wollte. Ist sicherlich keine lesefreundliche Lösung, aber es funktioniert. Die if-Abfrage am Anfang prüft dabei, ob das Raumschiff eine gewisse Zeit im Spiel ist und lässt dieses dann aus dem Bildschirm rausfliegen und zerstören :)

C-/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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
// MovementCalculation
//
// Aufgabe: Richtung des Raumschiffes
//
void CEnemy::MovementCalculation ()
{
    m_fMoveTimer += g_pTimer->GetElapsed ();
    if (m_fMoveTimer >= 0.3)
    {
    direction = rand() % 4 + 1;
    m_fMoveTimer = 0.0f;
    i++;
    }
    // Prüft, ob Gegner lange genug geflogen ist und deaktiviert diesen dann ... 
    if (i >=60){
        m_right = false;
        m_left = false;
        m_up = false;
        m_down = true;
        if (m_fYPos > 600.0f)
        CEnemy::SetAlive(false);
    }

    // cout << direction << endl;

    else
    {
        switch (direction)
            {
            case 1: 
                {
                if (m_fYPos != 0.0f)
                m_up = true;
                } break;
            case 2: 
                {
                    if (m_fYPos != 500.0f)
                    m_down = true;

                } break;
            
            // nach rechts
            case 3: 
                {
                    if (m_fXPos != 736.0f)
                    m_right = true;
                } break;
            // nach links
            case 4: 
                {
                    if (m_fXPos != 64.0f)
                    m_left = true;
                } break;
            }
        
            // Bildschirmrand als Grenze
                    if (m_fXPos > 736.0f)
                        {
                            m_fXPos = 736.0f;
                            m_right = false;
                            m_left = false;
                            m_up = false;
                            m_down = false;
                        }

        
                    else if (m_fXPos < 64.0f)
                        {
                            m_fXPos = 64.0f;
                            m_left = false;
                            m_right = false;
                            m_up = false;
                            m_down = false;
                        }
            
                    else if (m_fYPos > 600.0f)
                            {
                                m_fYPos = 600.0f;
                                m_down = false;
                                m_right = false;
                                m_left = false;
                                m_up = false;

                            }
                    else if (m_fYPos < 0.0f)
                            {
                                m_fYPos = 0.0f;
                                m_up = false;
                                m_right = false;
                                m_left = false;
                                m_down = false;
                            }
                }
                /* 
                else if ((m_fXPos > 300.0f)&&(m_fXPos < 600.0f))
                        {
                            
                            m_up = false;
                            m_right = false;
                            m_left = false;
                            m_down = true;
                            if (m_fYPos >= 500.0f)
                                CEnemy::SetAlive (false);
                        }
                        */ 

    // Animationsphase prüfen
    if (m_fAnimPhase < 0.0f)
        m_fAnimPhase = 0.0f;
    else if (m_fAnimPhase > 10.0f)
        m_fAnimPhase = 10.0f;
    
} // MovementCalculation

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »TigerClaw25« (09.05.2013, 11:13)


Werbeanzeige