Code: Alles auswählen
Declare myTexturTextImage(pbnr,br,hh,txt$,font)
#window_height = 600
#window_width = 900
#screen_height = 570
#screen_width = 870
Enumeration
#win_nr
#textur1
#textur2
#hgimage1
#hgimage2
#screenhg
#textur_img
#masken_img
#imagenr1
#sprite1
#dummy1
#dummy2
#dummy3
EndEnumeration
InitSprite()
fontsize = 35
fontidnr = FontID(LoadFont(#PB_Any,"Verdana",fontsize,#PB_Font_Bold))
UseJPEGImageDecoder()
;Texturen zum füllen
LoadImage(#textur1, #PB_Compiler_Home+"examples\sources\Data\clouds.jpg")
LoadImage(#textur2, "C:\WINDOWS\Web\Wallpaper\windkanal.jpg")
;Hintergrundbild
LoadImage(#hgimage1, "C:\WINDOWS\Web\Wallpaper\mondkrater.jpg")
LoadImage(#hgimage2, "C:\WINDOWS\Web\Wallpaper\mondaufgang.jpg")
hwnd = OpenWindow(#win_nr, #PB_Ignore, #PB_Ignore, #window_width, #window_height, "DisplaySprite3D", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CreateGadgetList(hwnd)
OpenWindowedScreen(hwnd,15,15,#screen_width,#screen_height,0,15,15)
Restore datatext1
Read lines: For j=1 To lines: Read a$: txt$+a$:Next: txt$+#CRLF$ ;#CRLF$=Leerzeile am Ende
myimageID = myTexturTextImage(#imagenr1,800,1000,txt$,fontidnr)
;=====================================================
CreateSprite(#screenhg, #screen_width, #screen_height)
StartDrawing(SpriteOutput(#screenhg))
DrawImage(ImageID(#hgimage1),0,0,#screen_width,#screen_height)
;DrawImage(ImageID(#hgimage2),0,0,#screen_width,#screen_height)
StopDrawing()
;=====================================================
sprite_width = ImageWidth(#Imagenr1): ;Debug sprite_width
sprite_height = ImageHeight(#Imagenr1): ;Debug sprite_height
flag=#PB_Sprite_Texture
CreateSprite(#sprite1, sprite_width, sprite_height, flag)
StartDrawing(SpriteOutput(#sprite1))
DrawImage(myimageID,0,0)
StopDrawing()
;=======================================
y = sprite_height
Repeat
EventID = WindowEvent()
ClearScreen(RGB(0, 0, 0))
DisplaySprite(#screenhg,0,0)
For spritecounter = 1 To (Round(#screen_height/sprite_height,1) + 1)
DisplayTransparentSprite(#sprite1,(#screen_width - sprite_width)/2, (spritecounter -2) * sprite_height + y)
Next spritecounter
y - 1
If y < 0
y = sprite_height
EndIf
FlipBuffers()
Until EventID = #PB_Event_CloseWindow
End
Procedure myTexturTextImage(pbnr,br,hh,txt$,fontidnr)
;die br+hh gilt hier nur für die Maske, damit Text komplett hineinpaßt
maskenID = CreateImage(#masken_img, br, hh,1)
dc = StartDrawing(ImageOutput(#masken_img))
;Textfont
SelectObject_(dc,FontIDnr) ;oder DrawingFont(FontIDnr)
;Text
SetBkMode_(dc,#TRANSPARENT) ;oder DrawingMode()
SetTextColor_(dc,#White) ;#white = ganz wichtig
SetTextAlign_(dc,#TA_TOP) ;ohne geht es nicht
SetRect_(r.RECT,0,0,br,hh) ;Basiswerte für rect; left,top,right,bottom
;berechne via Api die Größe von r.rect für den Text !!!
DrawText_(dc,txt$,-1,r,#DT_CALCRECT|#DT_WORDBREAK)
;zeichne Text
DrawText_(dc,txt$,-1,r,#DT_CENTER|#DT_WORDBREAK)
StopDrawing()
;nur zur Demo wie Maske aussieht
;ImageGadget(#dummy1, 400, 10, 0, 0, maskenID)
;=======================================
;Source(Quelle)=Textur braucht nur so groß sein wie der Text
sourcebr = r\right ;r wird bei Maske berechnet
sourcehh = r\bottom
sourceID = CreateImage(#textur_img, sourcebr, sourcehh)
dc = StartDrawing(ImageOutput(#textur_img))
;Textur malen
DrawImage(ImageID(#textur1),0,0,sourcebr,sourcehh)
;DrawImage(ImageID(#textur2),0,0,sourcebr,sourcehh)
StopDrawing()
;nur zur Demo wie Source aussieht
;ImageGadget(#dummy2, 400, 310, 0, 0, sourceID)
;=======================================
;Target(Ziel)
maskbltflag=$AACC0020 ;Billys Geheimnis, http://support.microsoft.com/kb/89375/de
targetbr = r\right
targethh = r\bottom
target_img=pbnr ;pbnr ist die Nummer des erstellten Images, zum weiterarbeiten damit
targetID = CreateImage(target_img, targetbr, targethh)
targetDC = StartDrawing(ImageOutput(target_img))
;wir müssen eine Kopie anlegen, dieses dc dient als Source für MaskBlt
dc = CreateCompatibleDC_(targetDC)
;füllen Kopie mit Bild von source, also dem Farbverlauf oder was auch immer
SelectObject_(dc, sourceID)
MaskBlt_(targetDC, 0, 0, br, hh, dc, 0, 0, maskenID, 0, 0, maskbltflag)
;Kopie löschen
DeleteDC_(dc)
StopDrawing()
;nur zur Demo wie Source aussieht
;ImageGadget(#dummy3, 400, 610, 0, 0, targetID)
ProcedureReturn targetID
EndProcedure
DataSection
datatext1:
Data.l 4
Data.s "Ich will ja nur mal testen ob ich das hinbekomme und für Geschwindigkeit muß am "
Data.s "'Y-Wert' gedreht werden und als nächstes probier ich dann endlosscrollen und dann "
Data.s "zu zentrieren und danach eine Textur statt Textfarbe und dann versuch ich, daß es oben "
Data.s "schmaler wird (STAR WARS) und dann.............."