Anzeige des Sprites funktioniert nicht!

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Janiboy
Beiträge: 71
Registriert: 02.01.2005 15:22

Beitrag von Janiboy »

Ok, er sieht jetzt folgendermaßen aus:

Code: Alles auswählen

If InitSprite() = 0                                                
  MessageRequester("Fehler","Konnte dx nicht finden",0)          
EndIf                                                        


If InitKeyboard()=0                                                
  MessageRequester("Fehler","Konnte dx nicht finden",0)            
EndIf                                                              

If OpenScreen(800,600,32,"Vollbild") = 0                          
  MessageRequester("Fehler","Konnte kein Vollbild erstellen ",0) 
EndIf                                                              

If LoadSprite(0,"Fighter.bmp",0)=0                                
EndIf 
If LoadSprite(1,"Fighter1.bmp",0)=0 
EndIf 
If LoadSprite(2,"Fighter2.bmp",0)=0                                
EndIf 
If LoadSprite(3,"Fighter3.bmp",0)=0 
EndIf 
If LoadSprite(4,"Fighter4.bmp",0)=0                                
EndIf 
If LoadSprite(5,"Boden.bmp",0)=0
EndIf 
If LoadSprite(6,"Himmel.bmp",0)=0
EndIf
If LoadSprite(7,"Schwertstein.bmp",0)=0
EndIf
If LoadSprite(8,"Flagge.bmp",0)=0
EndIf 
If LoadSprite(9,"Flagge1.bmp",0)=0
EndIf
If LoadSprite(10,"Flagge2.bmp",0)=0
EndIf
If LoadSprite(11,"Fighter-Punch.bmp",0)=0
EndIf
If LoadSprite(12,"Fighter-Punch1.bmp",0)=0
EndIf
If LoadSprite(13,"Fighter-Punch2.bmp",0)=0
EndIf 
If LoadSprite(14,"Fighter-Punch3.bmp",0)=0
EndIf
If LoadSprite(15,"Fighter-Punch4.bmp",0)=0
EndIf







TransparentSpriteColor(0, 255, 255, 0)
TransparentSpriteColor(1, 255, 255, 0)
TransparentSpriteColor(2, 255, 255, 0)
TransparentSpriteColor(3, 255, 255, 0)
TransparentSpriteColor(4, 255, 255, 0)
TransparentSpriteColor(5, 255, 255, 0)
TransparentSpriteColor(6, 255, 255, 0)
TransparentSpriteColor(7, 255, 255, 0)
TransparentSpriteColor(8, 255, 255, 0)
TransparentSpriteColor(9, 255, 255, 0)
TransparentSpriteColor(10, 255, 255, 0)
TransparentSpriteColor(11, 255, 255, 0)
TransparentSpriteColor(12, 255, 255, 0)
TransparentSpriteColor(13, 255, 255, 0)
TransparentSpriteColor(14, 255, 255, 0)
TransparentSpriteColor(15, 255, 255, 0)


position_x = 0 
position_y = 0 

Repeat                                                
  If IsScreenActive()                                    
    ClearScreen(0,0,0)                                
    
    DisplayTransparentSprite(6, 0, 5)
    
    DisplayTransparentSprite(7, 0, 5)
   
    DisplayTransparentSprite(Aniframe2, position_x, position_y)
   
    DisplayTransparentSprite(Aniframe3, position_x, position_y)
   
    DisplayTransparentSprite(AniFrame, position_x, position_y) 
    
    DisplayTransparentSprite(5, 0, 5)
    
    
    FlipBuffers() 
    
    ExamineKeyboard()                                  
 
  If delay3<10 
   If KeyboardPushed(#PB_Key_Down)  
    AniFrame2+1 
    If AniFrame2 >15 
      AniFrame2=11 
    EndIf 
    delay2=60 
   EndIf 
Else 
  delay2-1 
EndIf 
  
  If delay2<50 
    AniFrame2+1 
    If AniFrame2 >10 
      AniFrame2=8 
    EndIf 
    delay2=60 

Else 
  delay2-1 
EndIf 

 
 
 If delay<50
  If KeyboardPushed(#PB_Key_Right) 
    AniFrame+1 
    If AniFrame >4 
      AniFrame=0 
    EndIf 
    delay=60 
  EndIf 
Else 
  delay-1 
EndIf
    
    If KeyboardPushed(#PB_Key_Right)                    
      position_x + 3                                      
      If position_x > 700                              
        position_x = 700                                
      EndIf                                            
    EndIf                                              
    
    If KeyboardPushed(#PB_Key_Left)                    
      position_x  - 3                                  
      If position_x < 0                              
        position_x = 0                            
      EndIf                                            
    EndIf                                              
        
    
    If KeyboardPushed(#PB_Key_Escape)                
      End                                              
    EndIf 
    
  Else 
    Delay(20)    
  EndIf                                      
ForEver    
So, ich hoffe, deine kenntnisse können mir weiter helfen.

Danke,
Janiboy
Benutzeravatar
Macros
Beiträge: 1365
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Du hast drei Sprites drinnen, deren Position sich nicht ändert:

Code: Alles auswählen

DisplayTransparentSprite(6, 0, 5) ;<-------------
   
    DisplayTransparentSprite(7, 0, 5) ;<-------------
   
    DisplayTransparentSprite(Aniframe2, position_x, position_y)
   
    DisplayTransparentSprite(Aniframe3, position_x, position_y)
   
    DisplayTransparentSprite(AniFrame, position_x, position_y)
   
    DisplayTransparentSprite(5, 0, 5) ;<-------------
Einer von ihnen wird der stehende sein.
Außerdem zeichnest du gerade 3 Sprites an die Playerposition,
Das wird nichts, du musst die AniFramerange in zwei Variablen Speichern
und diese verwenden um zu animieren. Ich mach kurz was in die Richtung.
Benutzeravatar
Macros
Beiträge: 1365
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Dies Animiert Spielerbewegung und Schlag,
setze zum Testen am besten vor die anderen beiden Displaybefehle ein ;
(die mit Aniframe2 und Aniframe3)
alle anderen Tastaturabfragen und Animationen erst mal löschen
(außer vielleicht die Flagge)

Code: Alles auswählen

If delay<50
If move=1
  AniFrame+1
  If AniFrame >maxrange
    AniFrame=minrange
  EndIf
  delay=60
  EndIf
Else
  delay-1
EndIf

  
   
    If KeyboardPushed(#PB_Key_Right)  
    Move=1
    maxrange=4
    minrange=0
      position_x + 3                                     
      If position_x > 700                             
        position_x = 700                               
      EndIf  
      Else
      move=0                                         
    EndIf                                             
   
    If KeyboardPushed(#PB_Key_Left)                   
      position_x  - 3                                 
      If position_x < 0                             
        position_x = 0                           
      EndIf                                           
    EndIf                                             
       
   If KeyboardPushed(#PB_Key_Return)  
    Move=1
    maxrange=15
    minrange=11
      ;Beim Schlag mach dies was hier steht
                                            
    EndIf    
    
    If KeyboardPushed(#PB_Key_Escape)               
      End                                             
    EndIf
Janiboy
Beiträge: 71
Registriert: 02.01.2005 15:22

Beitrag von Janiboy »

Ok, jetzt gibts ein kleines problem, vielleicht hab ich auch einen fehler im übertragen gemacht, aber ich hab nachgesehen und nichts gefunden. Also: Der schlag klappt zwar, aber die geh-animation versagt. Sie wird abgespielt, wenn man beim ersten mal die schlag-taste drückt und dann nicht mehr.
außerdem sind immer zwei sprites übereinander, wie ist das zu lösen? mit einem löschen-befehl?

code:

Code: Alles auswählen

If InitSprite() = 0                                                
  MessageRequester("Fehler","Konnte dx nicht finden",0)          
EndIf                                                        


If InitKeyboard()=0                                                
  MessageRequester("Fehler","Konnte dx nicht finden",0)            
EndIf                                                              

If OpenScreen(800,600,32,"Vollbild") = 0                          
  MessageRequester("Fehler","Konnte kein Vollbild erstellen ",0) 
EndIf                                                              

If LoadSprite(0,"Fighter.bmp",0)=0                                
EndIf 
If LoadSprite(1,"Fighter1.bmp",0)=0 
EndIf 
If LoadSprite(2,"Fighter2.bmp",0)=0                                
EndIf 
If LoadSprite(3,"Fighter3.bmp",0)=0 
EndIf 
If LoadSprite(4,"Fighter4.bmp",0)=0                                
EndIf 
If LoadSprite(5,"Boden.bmp",0)=0
EndIf 
If LoadSprite(6,"Himmel.bmp",0)=0
EndIf
If LoadSprite(7,"Schwertstein.bmp",0)=0
EndIf
If LoadSprite(8,"Fighter-Punch.bmp",0)=0
EndIf
If LoadSprite(9,"Fighter-Punch1.bmp",0)=0
EndIf
If LoadSprite(10,"Fighter-Punch2.bmp",0)=0
EndIf 
If LoadSprite(11,"Fighter-Punch3.bmp",0)=0
EndIf
If LoadSprite(12,"Fighter-Punch4.bmp",0)=0
EndIf







TransparentSpriteColor(0, 255, 255, 0)
TransparentSpriteColor(1, 255, 255, 0)
TransparentSpriteColor(2, 255, 255, 0)
TransparentSpriteColor(3, 255, 255, 0)
TransparentSpriteColor(4, 255, 255, 0)
TransparentSpriteColor(5, 255, 255, 0)
TransparentSpriteColor(6, 255, 255, 0)
TransparentSpriteColor(7, 255, 255, 0)
TransparentSpriteColor(8, 255, 255, 0)
TransparentSpriteColor(9, 255, 255, 0)
TransparentSpriteColor(10, 255, 255, 0)
TransparentSpriteColor(11, 255, 255, 0)
TransparentSpriteColor(12, 255, 255, 0)


position_x = 0 
position_y = 0 

Repeat                                                
  If IsScreenActive()                                    
    ClearScreen(0,0,0)                                
    
    DisplayTransparentSprite(6, 0, 5)
        
    
    DisplayTransparentSprite(Aniframe2, position_x, position_y)
   
    DisplayTransparentSprite(AniFrame, position_x, position_y) 
    
    DisplayTransparentSprite(7, 0, 5)
   
    DisplayTransparentSprite(5, 0, 5)
    
    
    FlipBuffers() 
    
    ExamineKeyboard()                                  

 
 
 If delay<50
  If move=1
    AniFrame+1 
    If AniFrame >maxrange
      AniFrame=minrange 
    EndIf 
    delay=60 
  EndIf 
Else 
  delay-1 
EndIf
    
    If KeyboardPushed(#PB_Key_Right)                    
    Move=1
    maxrange=4
    maxrange=0
      position_x + 3                                      
      If position_x > 700                              
        position_x = 700                                
      EndIf
      Else
      m0ve=0                                            
    EndIf                                              
    
    If KeyboardPushed(#PB_Key_Left)                    
      position_x  - 3                                  
      If position_x < 0                              
        position_x = 0                            
      EndIf                                            
    EndIf    
    
    If KeyboardPushed(#PB_Key_Return)
    Move=1
    maxrange=12
    minrange=8
    EndIf                                          
        
    
    If KeyboardPushed(#PB_Key_Escape)                
      End                                              
    EndIf 
    
  Else 
    Delay(20)    
  EndIf                                      
ForEver   
Danke,
Janiboy
Benutzeravatar
Macros
Beiträge: 1365
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Code: Alles auswählen

Repeat                                               
  If IsScreenActive()                                   
    ClearScreen(0,0,0)                               
   
    DisplayTransparentSprite(6, 0, 5)
       
   DisplayTransparentSprite(7, 0, 5)
   
    DisplayTransparentSprite(5, 0, 5)
   
    
   
    DisplayTransparentSprite(AniFrame, position_x, position_y)
   
    
   
   
    FlipBuffers()
   
    ExamineKeyboard()                                 

 
 
 If delay<50
  If move=1
    AniFrame+1
    If AniFrame <minrange
    AniFrame=minrange
    EndIf
    If AniFrame >maxrange
      AniFrame=minrange
    EndIf
    delay=60
  EndIf
Else
  delay-1
EndIf
   
    If KeyboardPushed(#PB_Key_Right)                   
    Move=1
    maxrange=4
    minrange=0
      position_x + 3                                     
      If position_x > 700                             
        position_x = 700                               
      EndIf
    Else
      move=0                                           
    EndIf                                             
   
    If KeyboardPushed(#PB_Key_Left)                   
      position_x  - 3                                 
      If position_x < 0                             
        position_x = 0                           
      EndIf                                           
    EndIf   
   
    If KeyboardPushed(#PB_Key_Return)
    Move=1
    maxrange=12
    minrange=8
    EndIf                                         
   
   
   
    If KeyboardPushed(#PB_Key_Escape)               
      End                                             
    EndIf
   
  Else
    Delay(20)   
  EndIf                                     
ForEver    
Wenn Sprites überlappen, musst du nur nachprüfen,
welche Sprites welche Position haben, dann findest du die Falschen.
Janiboy
Beiträge: 71
Registriert: 02.01.2005 15:22

Beitrag von Janiboy »

Vielleicht hast du gehofft, ich würd jetzt mit der fragerei aufhören, aber ich hab nur eine kurze pause eingelegt :wink: , tut mir echt sorry.

Naja, auf jedenfall besteht das problem immernoch. Wo (und wie) muss man denn die kollisionsabfrage, die du erwähnt hast, einsetzen?

Danke,
Janiboy
Benutzeravatar
Macros
Beiträge: 1365
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Diese Drei Sprites habe die selbe Position,

DisplayTransparentSprite(6, 0, 5)

DisplayTransparentSprite(7, 0, 5)

DisplayTransparentSprite(5, 0, 5)

alle x=0;y=5

die müssen sich doch überlappen!

edit: hab dich schon vermisst <)

edit2: ich gehe jetzt schlafen, bis morgen.
Janiboy
Beiträge: 71
Registriert: 02.01.2005 15:22

Beitrag von Janiboy »

Gut, gut, gut, nun kann ich ich gehen und schlag schon getrennt animieren und beide klappen, allerdings gibts noch ein kleines problem beim schlag: erst wird nochmal der komplette hintergrund geladen, überdeckt die figur und dann wird erst die animation abgespielt.
Code wie folgt:

Code: Alles auswählen

If InitSprite() = 0                                                
  MessageRequester("Fehler","Konnte dx nicht finden",0)          
EndIf                                                        


If InitKeyboard()=0                                                
  MessageRequester("Fehler","Konnte dx nicht finden",0)            
EndIf                                                              

If OpenScreen(800,600,32,"Vollbild") = 0                          
  MessageRequester("Fehler","Konnte kein Vollbild erstellen ",0) 
EndIf                                                              

If LoadSprite(0,"Fighter.bmp",0)=0                                
EndIf 
If LoadSprite(1,"Fighter1.bmp",0)=0 
EndIf 
If LoadSprite(2,"Fighter2.bmp",0)=0                                
EndIf 
If LoadSprite(3,"Fighter3.bmp",0)=0 
EndIf 
If LoadSprite(4,"Fighter4.bmp",0)=0                                
EndIf 
If LoadSprite(5,"Boden.bmp",0)=0
EndIf 
If LoadSprite(6,"Himmel.bmp",0)=0
EndIf
If LoadSprite(7,"Schwertstein.bmp",0)=0
EndIf
If LoadSprite(8,"Fighter-Punch.bmp",0)=0
EndIf
If LoadSprite(9,"Fighter-Punch1.bmp",0)=0
EndIf
If LoadSprite(10,"Fighter-Punch2.bmp",0)=0
EndIf 
If LoadSprite(11,"Fighter-Punch3.bmp",0)=0
EndIf
If LoadSprite(12,"Fighter-Punch4.bmp",0)=0
EndIf




TransparentSpriteColor(0, 255, 255, 0)
TransparentSpriteColor(1, 255, 255, 0)
TransparentSpriteColor(2, 255, 255, 0)
TransparentSpriteColor(3, 255, 255, 0)
TransparentSpriteColor(4, 255, 255, 0)
TransparentSpriteColor(5, 255, 255, 0)
TransparentSpriteColor(6, 255, 255, 0)
TransparentSpriteColor(7, 255, 255, 0)
TransparentSpriteColor(8, 255, 255, 0)
TransparentSpriteColor(9, 255, 255, 0)
TransparentSpriteColor(10, 255, 255, 0)
TransparentSpriteColor(11, 255, 255, 0)
TransparentSpriteColor(12, 255, 255, 0)


position_x = 0 
position_y = 0 

Repeat                                                
  If IsScreenActive()                                    
    ClearScreen(0,0,0)                                
    
    DisplayTransparentSprite(6, 0, 5)
    
    DisplayTransparentSprite(7, 0, 5)
   
    DisplayTransparentSprite(5, 0, 5)
    
    DisplayTransparentSprite(AniFrame, position_x, position_y)
    
    
    FlipBuffers() 
    
    ExamineKeyboard()                                  

 
 
 If delay<50
  If move=1
    AniFrame+1 
    If AniFrame >maxrange
      AniFrame=minrange 
    EndIf 
    delay=60 
  EndIf 
Else 
  delay-1 
EndIf
    
    If KeyboardPushed(#PB_Key_Right)                    
    Move=1
    maxrange=4
    minrange=0
      position_x + 3                                      
      If position_x > 700                              
        position_x = 700                                
      EndIf
      Else
      m0ve=0                                            
    EndIf                                              
    
    If KeyboardPushed(#PB_Key_Left)                    
      position_x  - 3                                  
      If position_x < 0                              
        position_x = 0                            
      EndIf                                            
    EndIf    
    
    If KeyboardPushed(#PB_Key_Return)
   Move=1
    maxrange=12
    minrange=8                                                                                  
    EndIf  
    
    If KeyboardPushed(#PB_Key_Escape)                
      End                                              
    EndIf 
    
  Else 
    Delay(20)    
  EndIf                                      
ForEver   
Danke im Vorraus,
Janiboy

P.S.: Die drei Sprites, die du genannt hast, gehören zum Hintergrund, dürfen sich also nicht bewegen :) .
Benutzeravatar
Macros
Beiträge: 1365
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Kannst du mir vieleicht mal die Bilder mailen,
dann kann ih dir besser helfen, denn im Moment
flackern nur verschiedenfarbige Kästchen über meinen Bildschirm. :(
Janiboy
Beiträge: 71
Registriert: 02.01.2005 15:22

Beitrag von Janiboy »

Ich schicke sie dir mal die bilder innerhalb der nächsten tage zu, aber das dauert echt lange, kann man das problem nicht bereits am code erkennen?

Danke im Vorraus,
Janiboy
Antworten