Sprite Screen frage ?

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
dater
Beiträge: 43
Registriert: 14.01.2006 15:22

Sprite Screen frage ?

Beitrag von dater »

Hallo,
ich will ein Multimendia Menu, wie im Mediacenter Programmieren, meine Frage ist,
wie kann ich ein Hintergrundbild anzeigen, wenn ich mit 'OpenScreen" ein Screen öffne und
Sprites als Menu-Punkte über den Bildschirm bewege ohne das das Hintergrundbild von den
Sprites zertört wird ?

Code: Alles auswählen

#SCREEN_W       = 1920  
#SCREEN_H       = 1080
#SCREEN_TITLE   = "HTCP-Menu" 

Procedure sp_Erstellen(nr,w,h,text$,farbe1,farbe2)
CreateSprite(nr, w,h, #PB_Sprite_Texture) 
StartDrawing(SpriteOutput(nr)) 
Ellipse(w/2, h/2,w/2+x,h/2+x,$ffffFF)
 Ellipse(w/2, h/2,w/2-4,h/2-4,farbe1)
  FrontColor(farbe2) 
  DrawingMode(1) 
  DrawingFont(FontID(1))
  Breite = TextWidth(text$)
  Hoehe = TextHeight(Text$) 
  DrawText((w/2)-(breite/2), (h/2)-(hoehe/2),text$) 
StopDrawing() 
EndProcedure
;***************************************************************************************************************
;***************************************************************************************************************
;***************************************************************************************************************
;***************************************************************************************************************

LoadFont(1, "Arial", 24) 


If InitSprite() = 0 Or InitKeyboard() = 0 
  MessageRequester("Error", "Can't open DirectX 7 or later", 0) 
  End 
EndIf 
  
intervall.f= 3.14/50 ;pi verteilt 
 
If OpenScreen(#SCREEN_W,#SCREEN_H, 32,#SCREEN_TITLE) 

sp_erstellen(0,200,50,"S T A R T",$13EEEC,$DB8224)

sp_erstellen(1,200,50,"E N D E",$13EEEC,$DB8224)
 

;  LoadSprite(0, "..\Gfx\PureBasic.bmp", 0) 
;  CopySprite(0,1,0) 
  
  
  x=#SCREEN_W/2
  y=#SCREEN_H/2
  
  
  Repeat 
    FlipBuffers() 
    ClearScreen(RGB(0,0,0))
   DisplaySprite(2, #SCREEN_W/2, #SCREEN_H/2) ; koordinatenursprung in Bildmitte    
    ExamineKeyboard()
    If KeyboardPushed(#PB_Key_Up) 
    	For i=1 To 20
    		y=(y-i)
    		FlipBuffers() 
    		ClearScreen(RGB(0,0,0))
    		DisplaySprite(0, x, y) ; koordinatenursprung in Bildmitte 
    		DisplaySprite(1, x, y+300) ; koordinatenursprung in Bildmitte   
    	Next i
    EndIf
    
    If KeyboardPushed(#PB_Key_Down) 
     	For i=1 To 20
    		y=(i+y)
    		FlipBuffers() 
    		ClearScreen(RGB(0,0,0))
    		DisplaySprite(0, x, y) ; koordinatenursprung in Bildmitte 
    		DisplaySprite(1, x, y+300) ; koordinatenursprung in Bildmitte   
    	Next i
    EndIf
    	        
    DisplaySprite(0, x, y) ; koordinatenursprung in Bildmitte 
    DisplaySprite(1, x, y+300) ; koordinatenursprung in Bildmitte 
           
    ExamineKeyboard() 
  Until KeyboardPushed(#PB_Key_Escape) 
  
Else 
  MessageRequester("Error", "Can't open a Screen", 0) 
EndIf 


Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Sprite Screen frage ?

Beitrag von Kaeru Gaman »

du hast doch in jedem Schleifendurchlauf ein ClearScreen drin.
direkt danach oder stattdessen kannst du ein Hintergrundbild setzen.

UND du solltest keinesfalls in sich geschlossene Schleifen innerhalb der Hauptschleife haben.
also, deine For-Next-Schleifen müssen dort raus, stattdessen kannst du mit einem Counter oder ähnlichem arbeiten.

btw: auch das Sprite Nr.2 solltest du erzeugen, wenn du den code postest.

[edit]
PS:
außerdem bei den sprites, die drüber liegen sollen, DisplayTransparentSprite verwenden.

habs dir mal grad zurechtgeschraubt, die mehrfachen calls von examine, flip und clear raus, den counter rein usw...

Code: Alles auswählen

#SCREEN_W       = 1920 
#SCREEN_H       = 1080
#SCREEN_TITLE   = "HTCP-Menu"

Procedure sp_Erstellen(nr,w,h,text$,farbe1,farbe2)
CreateSprite(nr, w,h, #PB_Sprite_Texture)
StartDrawing(SpriteOutput(nr))
Ellipse(w/2, h/2,w/2+x,h/2+x,$ffffFF)
Ellipse(w/2, h/2,w/2-4,h/2-4,farbe1)
  FrontColor(farbe2)
  DrawingMode(1)
  DrawingFont(FontID(1))
  Breite = TextWidth(text$)
  Hoehe = TextHeight(Text$)
  DrawText((w/2)-(breite/2), (h/2)-(hoehe/2),text$)
StopDrawing()
EndProcedure
;***************************************************************************************************************
;***************************************************************************************************************
;***************************************************************************************************************
;***************************************************************************************************************

LoadFont(1, "Arial", 24)


If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Can't open DirectX 7 or later", 0)
  End
EndIf
 
intervall.f= 3.14/50 ;pi verteilt

If OpenScreen(#SCREEN_W,#SCREEN_H, 32,#SCREEN_TITLE)

sp_erstellen(0,200,50,"S T A R T",$13EEEC,$DB8224)

sp_erstellen(1,200,50,"E N D E",$13EEEC,$DB8224)

CreateSprite(2, #SCREEN_W/4, #SCREEN_H/4)
  StartDrawing( SpriteOutput(2) )
    Box(0,0, #SCREEN_W/4, #SCREEN_H/4, $402010 )
    For n=0 To #SCREEN_W/4 + #SCREEN_H/4 Step 12
      Line( n,0, - #SCREEN_H/4, #SCREEN_H/4, $80C020 )
    Next
  StopDrawing()
;  LoadSprite(0, "..\Gfx\PureBasic.bmp", 0)
;  CopySprite(0,1,0)
 
 
  x=#SCREEN_W/2
  y=#SCREEN_H/2
 
 
  Repeat
    ExamineKeyboard()

    If KeyboardPushed(#PB_Key_Up)
      counter = 20
      stepper = -1
    EndIf
   
    If KeyboardPushed(#PB_Key_Down)
      counter = 20
      stepper =  1
    EndIf

    If stepper
      counter -1
      y - stepper
      If counter = 0
        stepper = 0
      EndIf
    EndIf

    ClearScreen(RGB(0,0,0))
    DisplaySprite(2, #SCREEN_W/2, #SCREEN_H/2) ; koordinatenursprung in Bildmitte   
    DisplayTransparentSprite(0, x, y) ; koordinatenursprung in Bildmitte
    DisplayTransparentSprite(1, x, y+300) ; koordinatenursprung in Bildmitte
           
    FlipBuffers()
  Until KeyboardPushed(#PB_Key_Escape)
 
Else
  MessageRequester("Error", "Can't open a Screen", 0)
EndIf
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
dater
Beiträge: 43
Registriert: 14.01.2006 15:22

Re: Sprite Screen frage ?

Beitrag von dater »

Super - Danke,
genau das habe ich gesucht.
Antworten