; German forum: ; Author: Danilo (updated for PB 4.00 by Andre) ; Date: 13. November 2004 ; OS: Windows ; Demo: Yes ; Animated game screen (with avi movie in background), alternate solution with background image ; Animierter Game-Screen (mit Avi-Video im Hintergrund), alternativ mit Hintergrundbild ; Wenn Video geladen werden kann, wird das Video im Hintergrund auf ; einem Sprite abgespielt. Wenn Video nicht geladen werden kann, dann ; wird versucht ein Hintergrundbild zu laden. Schlägt das auch fehl, wird ; kein Hintergrund angezeigt. ; ; Mußt dann nur noch Deinen GameScreen dazumachen - MausZeiger ; ist schon da. ; ; by Danilo, 13.11.2004 - german forum ; #SCREEN_W = 1024 #SCREEN_H = 768 #NAME_MOVIE = "..\..\Music+Movie\AVI\test.avi" #NAME_STATIC = "data\back.bmp" #TYPE_MOVIE = 1 #TYPE_STATIC = 2 #SPR_BCKGRND = 1 #SPR_CURSOR = 2 Structure MouseCursor sprite.l width.l height.l offX.l offY.l EndStructure Procedure CatchMouseCursor(sprite,*mem.LONG) ; ; create new mouse cursor ; If *mem width = *mem\l : *mem+SizeOf(LONG) height = *mem\l : *mem+SizeOf(LONG) offX = *mem\l : *mem+SizeOf(LONG) offY = *mem\l : *mem+SizeOf(LONG) If width And height ; check > 0 *new_cursor.MouseCursor = AllocateMemory( SizeOf(MouseCursor) ) If *new_Cursor *new_Cursor\sprite = sprite *new_Cursor\width = width *new_Cursor\height = height *new_Cursor\offX = offX *new_Cursor\offY = offY If CreateSprite(sprite,width,height) If StartDrawing(SpriteOutput(sprite)) For y = 1 To height For x = 1 To width Plot(x,y,*mem\l) : *mem+SizeOf(LONG) Next x Next y StopDrawing() ProcedureReturn *new_Cursor EndIf EndIf FreeMemory(*new_Cursor) EndIf EndIf EndIf EndProcedure Procedure DisplayCursor(*Cursor.MouseCursor,x,y) If *Cursor DisplayTransparentSprite(*Cursor\sprite,x - *Cursor\offX,y - *Cursor\offY) EndIf EndProcedure If InitSprite() And InitMovie() And InitKeyboard() And InitMouse() If OpenScreen(#SCREEN_W,#SCREEN_H,32,"playmovie")=0 If OpenScreen(#SCREEN_W,#SCREEN_H,24,"playmovie")=0 If OpenScreen(#SCREEN_W,#SCREEN_H,16,"playmovie")=0 MessageRequester("ERROR","Cant open screen !",#MB_ICONERROR):End EndIf:EndIf:EndIf If LoadMovie(#SPR_BCKGRND,#NAME_MOVIE) back_type = #TYPE_MOVIE Width = MovieWidth(#SPR_BCKGRND) Height = MovieHeight(#SPR_BCKGRND) back_sprite = CreateSprite(1,Width,Height) ; #SCREEN_W,#SCREEN_H fr fullscreen If back_sprite = 0 ; Fehler, nicht mal Sprite kann erstellt werden CloseScreen() MessageRequester("ERROR","Cant create sprite !",#MB_ICONERROR):End EndIf Debug MovieInfo(#SPR_BCKGRND, 0) CallDebugger MovieLength = 1000 + MovieLength(#SPR_BCKGRND)*1000/(MovieInfo(#SPR_BCKGRND, 0)/1000) ; milliseconds Else ; movie konnte nicht geladen werden: ; kein grund das spiel abzubrechen, also ; alternativ ein hintergrundbild laden. ; Ist zwar dann nicht animiert, aber man ; kann das spiel trotzdem nutzen. DisableDebugger If LoadSprite(#SPR_BCKGRND,#NAME_STATIC) back_type = #TYPE_STATIC Width = SpriteWidth (#SPR_BCKGRND) Height = SpriteHeight(#SPR_BCKGRND) EndIf EnableDebugger EndIf ; init mouse cursor mouse = CatchMouseCursor(#SPR_CURSOR,?cursor_arrow) ; start movie If back_type = #TYPE_MOVIE PlayMovie(#SPR_BCKGRND,#PB_Movie_Rendered) StartTime = timeGetTime_() EndIf Repeat ExamineKeyboard() ExamineMouse() If IsScreenActive() ClearScreen(RGB(0,0,0)) If back_type = #TYPE_MOVIE If (timeGetTime_()-StartTime) >= MovieLength ; wenn movie fertig, restarten ;MovieSeek(1) PlayMovie(#SPR_BCKGRND,#PB_Movie_Rendered) StartTime = timeGetTime_() EndIf ; wenn movie, dann frame auf sprite rendern RenderMovieFrame(#SPR_BCKGRND, back_sprite) EndIf If back_type ; wenn movie oder static sprite fr ; hintergrund, dann anzeigen, sonst ; einfach ohne hintergrund DisplaySprite(#SPR_BCKGRND,#SCREEN_W/2-Width/2,#SCREEN_H/2-Height/2) EndIf EndIf ; show mouse cursor If mouse DisplayCursor(mouse,MouseX(),MouseY()) EndIf FlipBuffers() ;Delay(10) Until KeyboardPushed(#PB_Key_Escape) EndIf #blk = $080808 #wht = $FFFFFF DataSection cursor_arrow: Data.l 12, 21 ; width & height Data.l 0, 0 ; offX & offY (Cursor "HotSpot") Data.l #blk, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 Data.l #blk,#blk, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 Data.l #blk,#wht,#blk, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 Data.l #blk,#wht,#wht,#blk, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 Data.l #blk,#wht,#wht,#wht,#blk, 0 , 0 , 0 , 0 , 0 , 0 , 0 Data.l #blk,#wht,#wht,#wht,#wht,#blk, 0 , 0 , 0 , 0 , 0 , 0 Data.l #blk,#wht,#wht,#wht,#wht,#wht,#blk, 0 , 0 , 0 , 0 , 0 Data.l #blk,#wht,#wht,#wht,#wht,#wht,#wht,#blk, 0 , 0 , 0 , 0 Data.l #blk,#wht,#wht,#wht,#wht,#wht,#wht,#wht,#blk, 0 , 0 , 0 Data.l #blk,#wht,#wht,#wht,#wht,#wht,#wht,#wht,#wht,#blk, 0 , 0 Data.l #blk,#wht,#wht,#wht,#wht,#wht,#wht,#wht,#wht,#wht,#blk, 0 Data.l #blk,#wht,#wht,#wht,#wht,#wht,#wht,#blk,#blk,#blk,#blk,#blk Data.l #blk,#wht,#wht,#wht,#blk,#wht,#wht,#blk, 0 , 0 , 0 , 0 Data.l #blk,#wht,#wht,#blk,#blk,#wht,#wht,#blk, 0 , 0 , 0 , 0 Data.l #blk,#wht,#blk, 0 , 0 ,#blk,#wht,#wht,#blk, 0 , 0 , 0 Data.l #blk,#blk, 0 , 0 , 0 ,#blk,#wht,#wht,#blk, 0 , 0 , 0 Data.l #blk, 0 , 0 , 0 , 0 , 0 ,#blk,#wht,#wht,#blk, 0 , 0 Data.l 0 , 0 , 0 , 0 , 0 , 0 ,#blk,#wht,#wht,#blk, 0 , 0 Data.l 0 , 0 , 0 , 0 , 0 , 0 , 0 ,#blk,#wht,#wht,#blk, 0 Data.l 0 , 0 , 0 , 0 , 0 , 0 , 0 ,#blk,#wht,#wht,#blk, 0 Data.l 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,#blk,#blk, 0 , 0 EndDataSection ; IDE Options = PureBasic v4.02 (Windows - x86) ; Folding = -