Seite 1 von 1

Video anzeigen mit Hindernissen // gelöst

Verfasst: 09.08.2006 17:43
von Xenos
Hallo Leute!
Bei dem Versuch ein Video anzuzeigen und gleichzeitig den nicht vom Video eingenommenen Bildschirmplatz mit Farbe zu füllen bin ich auf das Problem gestoßen, dass sich der Befehl PlayMovie() irgendwie nicht mit den anderen Spritebefehlen zu vertragen scheint.
Hier mein Code:

Code: Alles auswählen

;{ Initialisierungen }
;-Initialisierungen


;Alles Initialisiert, was notwendig

;}


; Noch ein bisschen Quelltext


;{ Prozedurdeklarationen }
;-Prozedurdeklarationen

Declare.l ShowPreview()
;} 

OpenWindow(0,0,0,1024,768,"Testfenster",#PB_Window_BorderLess|#PB_Window_ScreenCentered| #PB_Window_Maximize)
OpenWindowedScreen(WindowID(0),0,0,1024,768,0,0,0)

;Noch etwas diverser Quelltext

;{ Hauptschleife }
 Repeat

;Quelltext bla blub trallala - unter anderem ein paar lustige
; Sprites malen und mit der Maus spielen

ShowPreview()  
   
 Until end_prog =1 ; end_prog ist ne Variable, aus dem Quelltext oben
;}

;-Ende
End




Procedure ShowPreview()
;-Prozedur ShowPreviev()


          ;{ Video laden }
              If LoadMovie(0,"Preview.avi")
              ResizeMovie(0,112,84,800,600) ;sollte auf jeden Fall ausgeführt werden!
            ;}
          ;{ Video zeigen } 
           ; Hier habe ich es mit ClearScreen(0) versucht
           PlayMovie(0,ScreenID())
          ;Hier auch
           StartDrawing(WindowOutput(0))
           DrawText(112, 700,"Ende mit beliebiger Taste",$FFFFFF,0)
           StopDrawing()
             ;Jetzt sollte das Video laufen...    Und der Text zu sehen sein
             ;funktioniert auch - nur dass man halt den Rest in schönem  
             ;Windows- Grau sieht (je nach Einstellung)  
            
            Repeat
                   ExamineKeyboard()
            Until    KeyboardReleased(#PB_Key_All)
            StopMovie(0)
            FreeMovie(0)
            EndIf
            ;}

ProcedureReturn 
EndProcedure
Ich habe keine Ahnung, was ich falsch mache. Ich habe es alternativ mit dem Box(...)-Befehl versucht, aber dann ist das Video nicht zu sehen, auch wenn ich zuerst den Kasten male und dann das Video starte.

Hat jemand ne Idee?

Verfasst: 09.08.2006 17:46
von bobobo
hmm .. movies kannst Du u.U. auch auf ein Sprite rendern.
Guck mal in der Hilfe nach RenderMovieFrame()

Damit sollten eigentlich keine Probleme auftauchen

all4PB4

Verfasst: 09.08.2006 17:48
von Xenos
Müsste ich mal probieren...
Allerdings: Frisst das nicht enorme Leistungsreserven?

Immerhin ist das Ding 800x600 Pixel groß.

Verfasst: 09.08.2006 17:49
von #NULL
bin mir nicht sicher aber zeichne den text mal auf ScreenOutput() statt auf WindowOutput(). vielleicht brauchst du dafür auch noch eine schleife, die den text immer wieder neu zeichnet.

Verfasst: 09.08.2006 17:53
von Xenos
Habe ich schon in diversen Varianten probier, mit und ohne FlipBuffer() hat leider den Effekt, dass das Video immer verschwindet (ich vermute mal im Backbuffer) weiß jemand, wie diese Video-Routine arbeitet?

Verfasst: 09.08.2006 18:12
von #NULL
so geht's

Code: Alles auswählen

Enumeration
  #Win
  #Vid
  #SprtVid
  #SprtTxt
EndEnumeration

InitSprite()
InitMovie()
LoadMovie(#Vid, "E:\mugge\Devin Townsend\Terria\Disk 2\DEVON (E)\MPEG\001SeventhWave.mpg")
hWin=OpenWindow(#Win, 50,50,400,400, "")
OpenWindowedScreen( hWin, 0,0,400,400, 0,0,0)

CreateSprite(#SprtVid, MovieWidth(#Vid),MovieHeight(#Vid) )
CreateSprite(#SprtTxt, 100,20 )
  StartDrawing( SpriteOutput(#SprtTxt) )
    DrawingMode(#PB_2DDrawing_Transparent)
    DrawText(0,0, "ohh yeeaahhh!!!", $ffffff)
  StopDrawing()

PlayMovie(#Vid, #PB_Movie_Rendered )
Repeat
  RenderMovieFrame(#Vid,SpriteID(#SprtVid) )
  DisplaySprite(#SprtVid,0,0)
  DisplaySprite(#SprtTxt,150,20)
  event=WindowEvent()
  Select event
    Case #PB_Event_CloseWindow
      quit=1
  EndSelect
  FlipBuffers()
Until quit

Verfasst: 10.08.2006 11:16
von bobobo
so richtig transparent wird's aber erst mit

Code: Alles auswählen

DisplayTransparentSprite(#SprtTxt,150,20) 
:allright:

Verfasst: 10.08.2006 11:43
von #NULL
ja, stimmt. hab ich gar nich beachtet, weil mein video da dunkel war... :allright:

Verfasst: 10.08.2006 12:09
von Xenos
Danke Leute, probier ich gleich mal aus! :D

[edit]
funktioniert ganz wundervoll, selbst bei 800x600 als Videoausmaß.:allright:
vielen herzlichen Dank! <)