Seite 2 von 3

Verfasst: 03.01.2005 11:54
von Janiboy
Wo genau wir den dieses abc = 1 eingesetzt? ansonsten ist denk ich alles richtig

Verfasst: 03.01.2005 14:00
von PMV
Hm ... vonTurnundTaxis hat doch eigentlich genau geschrieben, wo was hin kommt ... Poste am besten noch mal deinen jetztigen Code mit abc = 1 ... und zur Hilfe ...
vor dem Code schreibst du [code] und hinter dem Code schreibst du [/code] in deinen Post rein ... danke :wink:

MFG PMV

Verfasst: 03.01.2005 14:36
von bluejoke
naja, jetzt sieht man nicht viel davon - wenn man Code-Tags in seinem Post darstellen will, sollte man "BBCode in diesem Beitrag deaktivieren" aktivieren.


Also vor den Code-Bereich [code]
und nach dem Code-Bereich [/code]

Verfasst: 03.01.2005 14:46
von PMV
:oops: :|

^^sorry lol ... irgend wie is mir garnicht mehr aufgefallen ... das die Codetags ja garnicht angezeigt wurden ...

ich glaub ich geh mal kurz zum Optiker /:-> :lol:

Hab meinen Beitrag oben auch noch schnell Editiert :D

MFG PMV

Verfasst: 03.01.2005 23:51
von Janiboy
Also momentaner Code lautet:

Code: Alles auswählen


If InitSprite()=0    
EndIf 
If InitKeyboard()=0
EndIf
If InitSprite3D()=0
EndIf 
If InitMouse()=0
EndIf  

If OpenScreen(640, 480, 16, "Mein Spiel")=0 
EndIf  

If LoadSprite(0, "Panzer1.bmp" ,0)=0
EndIf 

If LoadSprite(1, "Panzer2.bmp" ,0)=0
EndIf

If LoadSprite(2, "Panzer1.bmp" ,0)=0
EndIf 

If LoadSprite(3, "Panzer2.bmp" ,0)=0
EndIf

If LoadSprite(4, "Panzer3.bmp" ,0)=0
EndIf

If LoadSprite(4, "Explosion.bmp" ,0)=0
EndIf


TransparentSpriteColor(0, 255, 0, 128)
TransparentSpriteColor(1, 255, 0, 128)
TransparentSpriteColor(2, 255, 0, 128)
TransparentSpriteColor(3, 255, 0, 128)
TransparentSpriteColor(4, 255, 0, 128)
TransparentSpriteColor(5, 255, 0, 128)


Repeat 
  If abc = 1
   IsScreenActive() 
   ClearScreen(0,0,0)
   DisplayTransparentSprite(AniFrame, x, y)
   FlipBuffers()
   Delay(200)
   AniFrame + 1
   If AniFrame => 6 : AniFrame = 0 : EndIf

   ExamineKeyboard()  
  
   If KeyboardPushed(#PB_Key_Left)
     x-1
   EndIf 
   
   If KeyboardPushed(#PB_Key_Right)
     abc = 1
   EndIf 
    
   If Keyboardleased(#PB_Key_Right)
     abc = 0
   EndIf  
    
   If KeyboardPushed(#PB_Key_F5)
     x+13
   EndIf
 
   
   If KeyboardPushed(#PB_Key_F6)
     x-3
   EndIf 
 EndIf
Until KeyboardPushed(#PB_KEY_ESCAPE) 


Verfasst: 04.01.2005 19:33
von PMV
So, ich hab es jetzt ein mal vor gemacht und mit kommentiert ...

Code: Alles auswählen

;definieren der Spielkonstanten
#Title = "Mein Spiel" ;Name des Spiels

;Screengröße und Farbtiefe
#Width = 640 
#Height = 480 
#Depth = 16 

#TimeToNextFrame = 200 ;Zeit in ms bis zum nächsten Animationsframe

;initialisieren und öffnen des Screens
If InitSprite() = #False Or InitSprite3D() = #False 
  MessageRequester(#Title, "Could not initialize DirectX 7 or higher!", #MB_OK | #MB_ICONERROR) 
  End 
ElseIf InitSound() = #False 
  MessageRequester(#Title, "Could not initialize DirectX compatible Sound Card!", #MB_OK | #MB_ICONERROR) 
  End 
ElseIf InitKeyboard() = #False 
  MessageRequester(#Title, "Could not initialize Keyboard!", #MB_OK | #MB_ICONERROR) 
  End 
ElseIf InitMouse() = #False 
  MessageRequester(#Title, "Could not initialize Mouse!", #MB_OK | #MB_ICONERROR) 
  End 
ElseIf OpenScreen(#Width, #Height, #Depth, #Title) = #False 
  MessageRequester(#Title, "Could not open Screen at "+Str(#Width)+"x"+Str(#Height)+"x"+Str(#Depth)+"!", #MB_OK | #MB_ICONERROR) 
  End 
EndIf

;laden der Sprites
If LoadSprite(0, "Panzer1.bmp" ,0)=0 
  MessageRequester(#Title, "Could not load sprite 'Panzer1.bmp'!", #MB_OK | #MB_ICONERROR) 
  End
EndIf 
If LoadSprite(1, "Panzer2.bmp" ,0)=0 
  MessageRequester(#Title, "Could not load sprite 'Panzer2.bmp'!", #MB_OK | #MB_ICONERROR) 
  End
EndIf 
If LoadSprite(2, "Panzer1.bmp" ,0)=0 
  MessageRequester(#Title, "Could not load sprite 'Panzer1.bmp'!", #MB_OK | #MB_ICONERROR) 
  End
EndIf 
If LoadSprite(3, "Panzer2.bmp" ,0)=0 
  MessageRequester(#Title, "Could not load sprite 'Panzer2.bmp'!", #MB_OK | #MB_ICONERROR) 
  End
EndIf 
If LoadSprite(4, "Panzer3.bmp" ,0)=0 
  MessageRequester(#Title, "Could not load sprite 'Panzer3.bmp'!", #MB_OK | #MB_ICONERROR) 
  End
EndIf 
If LoadSprite(5, "Explosion.bmp" ,0)=0 
  MessageRequester(#Title, "Could not load sprite 'Explosion.bmp'!", #MB_OK | #MB_ICONERROR) 
  End
EndIf 

;setzten der transparenten Farbe
For Num = 0 To 5
  TransparentSpriteColor(Num, 255, 0, 128) 
Next  
;TransparentSpriteColor(0, 255, 0, 128) 
;TransparentSpriteColor(1, 255, 0, 128) 
;TransparentSpriteColor(2, 255, 0, 128) 
;TransparentSpriteColor(3, 255, 0, 128) 
;TransparentSpriteColor(4, 255, 0, 128) 
;TransparentSpriteColor(5, 255, 0, 128) 


;Hauptschleife
Repeat 
  ;Tastatur überprüfen
  ExamineKeyboard()  
  If KeyboardPushed(#PB_Key_Left) ;Pfeiltaste links, Panzer langsam nach links bewegen
    X-1 
  EndIf 
  If KeyboardPushed(#PB_Key_Right) ;Peiltaste rechts, Panzer animieren
    MakeAni = #True
  Else ;Pfeiltaste nicht gedrückt, Panzer nicht animieren
    MakeAni = #False
  EndIf
  If KeyboardPushed(#PB_Key_F5) ;Taste F5, Panzer ganz schnell nach rechts bewegen
    X+13 
  EndIf 
  If KeyboardPushed(#PB_Key_F6) ;Taste F6, Panzer schnell nach links bewegen
    X-3 
  EndIf 
  
  If IsScreenActive() ;wenn der Screen aktive ist
    ClearScreen(0, 0, 0) 
    If MakeAni = #True ;wenn die Animation getätigt werden soll
      ;ist die Startzeit + die Animationszeit kleiner, als die aktuelle Zeit
      If Timer + #TimeToNextFrame <= ElapsedMilliseconds() 
        AniFrame + 1 ;setzte Animationsframe auf die nächste Animationsstufe
        Timer = ElapsedMilliseconds() ;setzte Startzeit auf die aktuelle Zeit
      EndIf
      ;wenn Animationsframe höher ist, als die existierenden Animationsframes,
      ;setzte den aktuellen Animationsframe auf das 1 Frame der Animation
      If AniFrame => 6 : AniFrame = 0 : EndIf 
    Else
      ;wenn es keine Animation zur Zeit gibt, dann halte die Startzeit = der aktuellen Zeit
      Timer = ElapsedMilliseconds()
    EndIf
    DisplayTransparentSprite(AniFrame, X, Y)
    FlipBuffers()  
  EndIf
  
Until KeyboardPushed(#PB_Key_Escape) 
Ich hoffe, daraus kannst du nen bischen selber lernen :D
Ich hab auch die Fehlerüberprüfung rein gemacht, gegen die du dich anscheinend so verbissen wehrst *gg*, aber mit ist einfach besser :wink:

Ach ja ... ich hab wegen faulheit einfach mal nco2ks Fehlerroution kopiert, die er im anderen Thread gepostet hatte, das dies so wie so die normale methode ist ... bevor sich wer beschwert <)

Ach ja ... nu zu deinen Fehlern:

Code: Alles auswählen

If LoadSprite(3, "Panzer2.bmp" ,0)=0 
EndIf 

If LoadSprite(4, "Panzer3.bmp" ,0)=0 
EndIf 

If LoadSprite(4, "Explosion.bmp" ,0)=0 
EndIf 
hier überlädst du ja das vorheriege Animationssprite, ich glaub nicht, das das so gewollt ist

Code: Alles auswählen

TransparentSpriteColor(0, 255, 0, 128) 
TransparentSpriteColor(1, 255, 0, 128) 
TransparentSpriteColor(2, 255, 0, 128) 
TransparentSpriteColor(3, 255, 0, 128) 
TransparentSpriteColor(4, 255, 0, 128) 
TransparentSpriteColor(5, 255, 0, 128)
Zwar kein Fehler, aber es ist vorteilhafter, das in einer schleife zu machen, spart unteranderem Zeit, da nicht so viel zu tippen ist.

Da hier was mehr auf einmal ist, mach ich kommentare rein, welche dann unten erläutert werden.

Code: Alles auswählen

Repeat 
  If abc = 1   ;Punkt 1.
   IsScreenActive() ;Punkt 2.
   ClearScreen(0,0,0) 
   DisplayTransparentSprite(AniFrame, x, y) 
   FlipBuffers() 
   Delay(200) ;Punkt 3.
   AniFrame + 1 
   If AniFrame => 6 : AniFrame = 0 : EndIf 

   ExamineKeyboard()  
  
   If KeyboardPushed(#PB_Key_Left) 
     x-1 
   EndIf 
    
   If KeyboardPushed(#PB_Key_Right) 
     abc = 1 
   EndIf 
    
   If Keyboardleased(#PB_Key_Right)  ;Punkt 4.
     abc = 0 
   EndIf  
    
   If KeyboardPushed(#PB_Key_F5) 
     x+13 
   EndIf 
  
    
   If KeyboardPushed(#PB_Key_F6) 
     x-3 
   EndIf 
 EndIf 
Until KeyboardPushed(#PB_KEY_ESCAPE) 
1. Alles steht in einer IF-Abfrage, und da abc = 0 ist, kann so niemals die Zeile

Code: Alles auswählen

If KeyboardPushed(#PB_Key_Right) 
     abc = 1 
   EndIf
erreicht werden, um abc auf 1 zu setzten. Zudem ist ExamineKeyboard() auch in dieser If-Abfrage, da dies nicht erreicht wird, kann die Tastatur nicht abgefragt werden und somit ist das ganze eine Unendlichschleife.

2. IsScreenActive() wird garnicht überprüft, da dieser befehl aber nur zur überprüfung da ist, ist er so überflüssig

3. Das Delay(200) hat ich dir ja so angeboten, für dich als Anfänger vermutlich das einfachste, aber Delay() ist selber nur zur Programmpause da, schau dir mal genauer an, wie ich das dir jetzt vorgemacht hab, so sollteste das immer machen. Delay(1) wird normal dann verwendet, um z.B. bei Anwendungen nicht die volle CPU Auslastung zu verschwenden.

4. Keyboardleased(#PB_Key_Right) existiert so nicht. Proceduren, die keiner haben kann, müssen immer mit gepostet werden, damit der Code lauffähig ist. Da ich jetzt aber mal vermute, das du von uns diese Befehl haben wolltest, seh ich mal drüber hinweg :wink: . Oder meinst du vielleicht den PB-Befehl KeyboardReleased(#PB_Key_Right)? O_o

MFG PMV

Verfasst: 04.01.2005 20:00
von Janiboy
WOW, DANKE!!! Dafür, dass du ein Verfechter der Find-alles-selber-raus-und-nerv-mich-nicht-mit-ständigen-Fragen-Methode bist hast du dir ganz schön arbeit gemacht ;). Danke!

Verfasst: 06.01.2005 19:14
von Janiboy
Also...danke für deine Mühe, aber irgendwie hab ich da Probleme mit. Ich musste einiges ändern, aber es kommen immernoch Fehler.
Code lautet:

Code: Alles auswählen



If OpenScreen(640, 480, 16, "Mein Spiel")=0 
EndIf 

#TimeToNextFrame = 200 

If InitSprite() = #False Or InitSprite3D() = #False
 MessageRequester("Fehler", "Could Not initialize DirectX 7 Or higher!", #MB_OK |#MB_ICONERROR)   
End 
ElseIf InitSound() = #False
 MessageRequester("Fehler", "Could Not initialize DirectX compatible Sound Card!", #MB_OK | #MB_ICONERROR) 
End
ElseIf InitKeyboard() = #False
 MessageRequester("Fehler", "Could Not initialize Keyboard!", #MB_OK | #MB_ICONERROR)
End 
ElseIf InitMouse() = #False
MessageRequester("Fehler", "Could Not initialize Mouse!", #MB_OK | #MB_ICONERROR) 
  End 
EndIf  
If OpenScreen(640, 480, 16, "Mein Spiel") = #False 
  MessageRequester("Fehler", "Could Not open Screen at "+Str(640)+"x"+Str(480)+"x"+Str(16)+"!", #MB_OK | #MB_ICONERROR) 
  End 
EndIf 


If LoadSprite(0, "Panzer1.bmp" ,0)=0
MessageRequester("Fehler", "Could Not load sprite 'Panzer1.bmp'!", #MB_OK | #MB_ICONERROR)  
  End
EndIf 
If LoadSprite(1, "Panzer2.bmp" ,0)=0
MessageRequester("Fehler", "Could not load sprite 'Panzer2.bmp'!", #MB_OK | #MB_ICONERROR) 
  End
EndIf
If LoadSprite(2, "Panzer1.bmp" ,0)=0
MessageRequester("Fehler", "Could not load sprite 'Panzer1.bmp'!", #MB_OK | #MB_ICONERROR) 
  End
EndIf 
If LoadSprite(3, "Panzer2.bmp" ,0)=0
MessageRequester("Fehler", "Could not load sprite 'Panzer1.bmp'!", #MB_OK | #MB_ICONERROR) 
  End 
EndIf
If LoadSprite(4, "Panzer3.bmp" ,0)=0
MessageRequester("Fehler", "Could not load sprite 'Panzer3.bmp'!", #MB_OK | #MB_ICONERROR) 
  End
EndIf

If LoadSprite(4, "Explosion.bmp" ,0)=0
MessageRequester("Fehler", "Could not load sprite 'Explosion.bmp'!", #MB_OK | #MB_ICONERROR) 
  End 
EndIf

For Num = 0 To 5
  TransparentSpriteColor(Num, 255, 0, 128)
Next
TransparentSpriteColor(0, 255, 0, 128)
TransparentSpriteColor(1, 255, 0, 128)
TransparentSpriteColor(2, 255, 0, 128)
TransparentSpriteColor(3, 255, 0, 128)
TransparentSpriteColor(4, 255, 0, 128)
TransparentSpriteColor(5, 255, 0, 128)


Repeat
   ExamineKeyboard()  
   If KeyboardPushed(#PB_Key_Left)
     x-1
   EndIf 
   
   If KeyboardPushed(#PB_Key_Right)
     MakeAni = #True
   EndIf 
   End 
     MakeAni = #False 
   End
   If KeyboardPushed(#PB_Key_F5)
     x+13
   End
   If KeyboardPushed(#PB_Key_F6)
     x-3
   End 
 
   If IsScreenActive() 
   ClearScreen(0,0,0)
   If MakeAni = #True
      If Timer + #TimeToNextFrame 
        AniFrame + 1
       
      EndIf 
      If AniFrame => 6 : AniFrame = 0 : EndIf
   Else
    EndIf
   DisplayTransparentSprite(AniFrame, x, y)
   FlipBuffers()
 EndIf
 
Until KeyboardPushed(#PB_KEY_ESCAPE)

Verfasst: 06.01.2005 20:47
von PMV
Also öhm ... :? ich kann da nur staunen :o sorry

Code: Alles auswählen

If OpenScreen(640, 480, 16, "Mein Spiel")=0 
EndIf 
wieder keine Fehlerabfrage :wink: , aber is eh egal ... lol
... zudem ist ja hier noch nicht InitSprite() aufgerufen worden, wie soll dann bitte das funktionieren? O_o

^^mir fällt so grad auf das du den Screen zwei mal öffnest -_-
denn nach den initialisierungen kommt das:

Code: Alles auswählen

If OpenScreen(640, 480, 16, "Mein Spiel") = #False 
  MessageRequester("Fehler", "Could Not open Screen at "+Str(640)+"x"+Str(480)+"x"+Str(16)+"!", #MB_OK | #MB_ICONERROR) 
  End 
EndIf 
^^also kannst eins von beiden (vorzugsweise das erste) löschen.

Code: Alles auswählen

If LoadSprite(4, "Panzer3.bmp" ,0)=0
MessageRequester("Fehler", "Could not load sprite 'Panzer3.bmp'!", #MB_OK | #MB_ICONERROR) 
  End
EndIf

If LoadSprite(4, "Explosion.bmp" ,0)=0
MessageRequester("Fehler", "Could not load sprite 'Explosion.bmp'!", #MB_OK | #MB_ICONERROR) 
  End 
EndIf
Das würd ich allerdings mal gern erklärt haben ... das hab ich doch extra geändert ... wofür lädst du "Panzer3.bmp" wenn du dafür dannach eh "Explosion.bmp" lädst?
Durch das zweite LoadSprite(4, [...]) wird das davor geladene 4 Sprite überladen und ist somit wieder weg.

Code: Alles auswählen

For Num = 0 To 5
  TransparentSpriteColor(Num, 255, 0, 128)
Next
TransparentSpriteColor(0, 255, 0, 128)
TransparentSpriteColor(1, 255, 0, 128)
TransparentSpriteColor(2, 255, 0, 128)
TransparentSpriteColor(3, 255, 0, 128)
TransparentSpriteColor(4, 255, 0, 128)
TransparentSpriteColor(5, 255, 0, 128)
lol -_-
^^das Zeichen ";" (also das Simikolon) ist dazu da, im Code Kommentare schreiben zu können, alternative wird es dazu benutzt, um zur Zeit nicht benötigten Code aus zu Kommentieren, damit dieser nicht ausgeführt (compiliert) wird. Ich hab das extra nur auskommentiert, weil ich ja nicht weis, was du möchtest ... so wollt ich dir lediglich zeigen, das eine Schleife wesentlich einfacher ist.

wird ein Simikolon vom Compiler gelesen, so wird der Text, welcher sich dahinter befindet ignoriert, das heißt befindet sich ein Simikolon direkt am Anfang einer Zeile wird die ganze Zeile ignoriert.

Wie lang hat es eigentlich gedauert, bis du sämtliche Kommentare wieder müselig gelöscht hattest? /:->

Und zum eigentlichen, also dadurch, das du die Simikolons raus genommen hast, definierst du nun die transparente Farbe doppelt, entweder nimm die Schleife raus, oder die 5 TransparentSpriteColor() unter der Schleife.
Außerdem lädst du oben ja nur die Sprites 0 - 4, das heißt TransparentSpriteColor(5, 255, 0, 128) ist überflüssig.
Bzw die Schleife darüber müsste lauten:

Code: Alles auswählen

For Num = 0 To 5
  TransparentSpriteColor(Num, 255, 0, 128)
Next
so, und weiter ... das abenteuerlichste -_-

Code: Alles auswählen

Repeat
   ExamineKeyboard()  
   If KeyboardPushed(#PB_Key_Left)
     x-1
   EndIf 
   
   If KeyboardPushed(#PB_Key_Right)
     MakeAni = #True
   EndIf 
   End 
     MakeAni = #False 
   End
   If KeyboardPushed(#PB_Key_F5)
     x+13
   End
   If KeyboardPushed(#PB_Key_F6)
     x-3
   End 
 
   If IsScreenActive() 
   ClearScreen(0,0,0)
   If MakeAni = #True
      If Timer + #TimeToNextFrame 
        AniFrame + 1
       
      EndIf 
      If AniFrame => 6 : AniFrame = 0 : EndIf
   Else
    EndIf
   DisplayTransparentSprite(AniFrame, x, y)
   FlipBuffers()
 EndIf
 
Until KeyboardPushed(#PB_KEY_ESCAPE)
Nachdem ich den in jaPBe (alternativer Editor zu dem Standarteditor, den du anscheinent benutzt) eingefügt hatte, war sofortklar, was da falsch ist.
Da fehlen einige "EndIf". So kann das nicht klappen -_-
Ich hab erlich gesagt auch keine ahnung, warum du die "EndIf"s raus genommen hast -_-

Nun ja ... vielleicht erklärst mal was du vor hattest :?
Und such mal im Forum nach jaPBe :wink: ... die neuste Version sollst dir runterladen und installieren ... das ist viel besser als der standart Editor den du benutzt.

So ... /:->

MFG PMV

Verfasst: 06.01.2005 21:00
von Janiboy
Aaaaalso: Das OpenScreen hab ich eingesetzt, weil das mit dem #Screen oder wie auch immer nicht geklappt hat. Unten die EndIf hab ich gelöscht, weil der Debugger "Another End Condition operand is expected here" angezeigt hab. Sowieso lag jede Veränderung am Debugger.

Und noch was: Die Frage, wie lange ich gebraucht habe um die Komentare zu löschen ist überflüssig, denn ich habe den Code nicht faul kopiert sondern mir die Mühe gemacht alles abzuschreiben, damit ich mit das beim Schreiben schon mal etwas anschauen kann.

Oh Mann, das ist echt schwer (Obwohl das von vorne herein klar war ;)), ich glaube, ich bleibe bei meinen Videos :D.