war auf Sprites zu rendern. Das kam erst mit PB 3.70, Juni 2003.
Naja, das Beispiel für Dich hatte ich jetzt schon fertig. Vielleicht
Code: Alles auswählen
;
; by Danilo, 13.11.2004 - german forum
;
#SCREEN_W = 1024
#SCREEN_H = 768
#NAME_MOVIE = "data\back.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()
Height = MovieHeight()
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
MovieLength = 1000 + MovieLength()*1000/(MovieInfo(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(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(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
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.
ist schon da.