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

21

07.06.2004, 17:26

ne ich schlag dich net tot wer soll mir dann noch helfen :-O

1) die m_pBall hab ich selbst in der Game.h deklariert denn das auto-ball-extra brauch ja zugriff auf die ball position

2) die release-funktion bekommt die extranummer des aktiven extras und dann werden alle gelöscht die NICHT diese nummer haben...geht natürlich auch mit if aber while is hier doch besser oder nit O_o

3) die Extras funzen so:

wenn extra[x] aktiv ist UND die vergangene zeit positiv ist dann
{
dann führt er das hier aus und verringert die zeit
}
else
{
hier wird der normale block ausgeführt was heißt dass die 10 sec
abgelaufen sind
}

ich glaube der fehler liegt darin dass fTime nicht die vergangene zeit pro frame ist sondern die seit programmstart denn keins meiner extras funzt wenn ich das so mache wie oben denn die zahl wird SOFORT negativ was heißt dass er aus der schleife rausspringt

4) codeabschnitt 3 steht genau da wo die PaddlePos ausgerechnet wird. dann testet er ob das extra aktiv ist und berechnet sie in dem fall anders(auto-ball) ansonsten normal

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

22

07.06.2004, 17:40

als doch m_pball raus und nimm m_aBall[0].
Die version mit der while wäre in dem Falle iExtra != iExtraNum eine Endlosschleife.....

zu 3) else wird auch ausgeführt, wenn die extra[x] false ist....

und ist die fTime vielleicht in millisek?

Von welcher schleife redest du?

PS: hast du nen webspace, dann könnte ich deinen kompletten quelltext in einem stück sehen=> sehr hilfreich.

23

10.06.2004, 16:39

1) irgendwo im proggi is ne schleife die alle bälle durchgeht und guckt ob noch einer zur erstellung frei is(max. 16) zu denen gehört auch m_aBall[0]...das is aber nur eine von 16 also würde die schleife auch nur dann gelten wenn dieser eine ball das extra auslöst

2) "Die version mit der while wäre in dem Falle iExtra != iExtraNum eine Endlosschleife..... "

warum? die funktion bekommt die nummer des neu eingesammelten extras (Bsp:2) und solange(while) iExtra das mit einer for-schleife bis 15 gezählt wird undgleich 2 ist deaktiviert er die extras

3) "else wird auch ausgeführt, wenn die extra[x] false ist.... "
seh ich auch net so aber ich arbeite eh an nem neuen system :)

4) könnte sein aber in meinem fall muss die fTime eher zu groß sein da die differnez von 10.0f - ftime schon im ersten frame kleiner als 0 is O_o

5) webspace hab ich auch net aber kann ich dir mal schicken

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

24

10.06.2004, 17:34

Ich glaube du solltest nochmal ein paar bücher zur Hand nehmen....
m_aExtra[0].m_bActive == TRUE && m_fExtraTime >= 0
Wenn eins von beiden falsch ist wird else ausgeführt.....

Quellcode

1
2
3
4
5
6
7
 for(iExtra = 0; iExtra < 15; iExtra++) 
   { 
      while(iExtra != iExtraNum) 
      { 
         //m_pGame->m_aExtra[iExtra].m_bActive = FALSE; 
      } 
   }

angenommen iExtraNum ist 4. Beim ersten durchgang ist iExtra =0. Dann würde er in der while-scheife verharren, denn die bedinig bleibt immer gleich und zwar richtig!
Und angenohmen wir rechnen in sek.. und gehen von 10fps aus, dann wäre fTime=0,1, wenn man das aber in millisek ausdrück sind das 100. Wenn man nun das von 10 abzieht welche ist zuerst bei null?

Kann es sein das du nicht ganz bei der sache bist?

25

10.06.2004, 20:44

Zitat

m_aExtra[0].m_bActive == TRUE && m_fExtraTime >= 0
Wenn eins von beiden falsch ist wird else ausgeführt.....


sollte ja auch so sein denn wenn das extra false ist oder die extrazeit abgelaufen ist soll der "normale" zweig abgelaufen werden

das mit der while schleife hab ich jetz kapiert :D

und mit den millisekunden is auch ne gute idee und ich glaube auch irgendwo in davids buch mal gelsesn zu haben dass sie in millisec is...werd ich auch gleich ausprobieren

Zitat

Kann es sein das du nicht ganz bei der sache bist?[


das is eigentlich der einzige punkt bei dem du völlig falsch liegst :D

26

16.06.2004, 17:15

kk ich hab das jetzt alles geändert allerdgins funktioniert die ersetzte while schleife als if auch net.

auch beim debuggen liegt der fehler in der zeile. kann es irgendwas damit zu tun haben dass ich den in der klasse falsch deklariert hab und von "außen" net drauf zugreifen kann???

Klaus

Treue Seele

Beiträge: 245

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

27

16.06.2004, 18:58

Zitat von »"Sk!p"«

kann es irgendwas damit zu tun haben dass ich den in der klasse falsch deklariert hab und von "außen" net drauf zugreifen kann???


Dann gäbe es einen Compilerfehler und keinen Laufzeitfehler, oder?
Wahrscheinlich ist dein Array null, oder so etwas...
Schau dir doch mal den Inhalt der Variablen zum Fehlerzeitpunkt im Debugger an!
Mozilla Firefox
The Browser - reloaded

28

17.06.2004, 08:23

Quellcode

1
2
3
4
5
6
7
for(iExtra = 0; iExtra < 15; iExtra++) 
   { 
      if(iExtra (=0) != iExtraNum (zb. = 6)) 
      { 
         m_pGame->m_aExtra[iExtra( = 0)].m_bActive = FALSE; 
      } 
   }


so sieht es beim abbruch aus...also schon beim ersten zugriff auf iExtra[0]...wenn ich die zeile weglasse geht das aber um ehrlich zu sein hab ich keine ahnung was daran falsch sein soll O_o

29

18.06.2004, 17:00

so ich hab jetzt mal was ausprobiert und festgestellt dass das prob irgendwie an der funktion liegt...ich kann von der ExtraRelease das element m_bActive nicht verändert sonst kackt das game ab...als test hab ichs von der move funktion getestet und da hats gefunzt...also hier der code von Extra.h:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// __________________________________________________________________
// Verwendete Symbole vordeklarieren
class CGame;

// __________________________________________________________________
// Klasse für ein Extra
class CExtra
{
public:
    BOOL         m_bExists;
    BOOL         m_bActive;
    CGame*       m_pGame;
    tbVector3    m_vPosition;
    tbVector3    m_vVelocity;

    inline CExtra()             {ZeroMemory(this, sizeof(CExtra));}
    
    tbResult    Move(float fTime);
    tbResult    Render(float fTime, DWORD dwExtraModel);
    tbResult    ExtraRelease(int iExtraNum);
    tbVector3   GetPos()   {return m_vPosition;}
};

// _________________________________________________________________


dementsprechend game.h:

Quellcode

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
// __________________________________________________________________
// Klasse für das Spiel
class CGame
{
public:
    tbModel*    m_pLevelModel;      
    tbModel*    m_pPaddleModel;     
    tbModel*    m_pBallModel;       
    tbModel*    m_apBlockModel[4];
    tbModel*    m_apExtraModel[15];
    
    CBall*      m_pBall;
    CExtra*     m_pExtra;
    BOOL        m_bPaused;          
    BOOL        m_bGameOver;
    int         m_iLevel;               
    int         m_iTriesLeft;       
    int         m_iScore;
    char        m_cExtraText[20];
    tbVector3   m_vPaddlePos;       
    tbVector3   m_vPaddleVel;       
    float       m_fLevelTime;
    float       m_fExtraTime;

    CBall       m_aBall[16];        
    CBlock      m_aBlock[64];
    CExtra      m_aExtra[15];
        
    inline CGame() {ZeroMemory(this, sizeof(CGame));}

    tbResult    Init();                                                             
    tbResult    Exit();                                                             
    tbResult    Load();                                                             
    tbResult    Unload();                                                           
    tbResult    Move(float fTime);                                                      
    tbResult    Render(float fTime);                                                
    tbResult    InitLevel(int iLevel);                                              
    int         CreateBall(tbVector3 vPosition, tbVector3 vVelocity, BOOL bGrabbed);    
    tbResult    CreateBlockRow(char* pcBlocks, tbVector3 vStartPos);
    int         CreateExtra(tbVector3 vPosition, tbVector3 vVelocity);
};

// __________________________________________________________________

30

25.06.2004, 15:43

oder verratet mir mal wie ihr das prob gelöst habt...ich bin ja nicht der einzige der die breakanoid-erweiterung probiert hat

Werbeanzeige