Animationen des Hintergrundes

Probleme beim Erstellen von 3D-Modellen und Texturen, keine Ahnung womit man Musik macht? Dies ist dein Forum.
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Animationen des Hintergrundes

Beitrag von Andreas21 »

Hi,

Ich benutze momentan ein Skin für mein Fenster und würde es gern mit Animationen versehn. Z.b.: ein gesicht das zwinkert.

Deswegen dacht ich mir ein bmp über den hintergrun des Fenster anzeigen zu lassen. Mit tranzparens: Nur der Code will nicht so recht. Und er leuft leider auch nicht mit SkinWin.

Ich will halt nur einen kleinen teil des Hintergrunds Animieren.

Versuchs Code:

Code: Alles auswählen

Global window.l

Procedure createimage_(image)
  hbimglist=CreateImage(image, 300, 200)
  StartDrawing(ImageOutput(image))
    DrawingMode(#PB_2DDrawing_Transparent)
    BackColor(RGB(0,155,155)) 
    FrontColor(RGB(255,0,0)) 
    DrawText(100,100+Random(50),"test")
  StopDrawing()
  ProcedureReturn hbimglist
EndProcedure

Procedure Animation()
  ptst.PAINTSTRUCT
  himglist=ImageList_Create_(300,200,#ILC_COLOR8|#ILC_MASK,1,0)
  ImageList_AddMasked_(himglist,createimage_(0),RGB(0,0,0))
  hdc=BeginPaint_(window,@ptst)
    ImageList_Draw_(himglist,0,hdc,100,100,#ILD_TRANSPARENT) 
  EndPaint_(window,@ptst)
  ImageList_Destroy_(himglist)
EndProcedure

window = OpenWindow(0, 0, 0, 640, 480, "",  #PB_Window_ScreenCentered )

Repeat 
  
  Delay(100)
  Animation()
  
Until Event = #PB_Event_CloseWindow
Er zeigt ja die test das word "test" an das ich zum test anzeige. Aber mehr passiert nicht. Normaler weise müsste er alle 100 ms das word "test" an einer anderen position anzeigen.

Ich weis nicht ob das nit SkinWin gut währ jedesmal den kompleten hinter grund neu zu laden. Zumal das auch mehhre hintergrund bilder pro fenster währen.
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Begin - / EndPaint() dürfen ausschließlich in Verbindung mit der #WM_PAINT Nachricht verwendet werden.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Beitrag von Andreas21 »

Giebts dann einen anderen weg sowas umzusetzen?
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

So vielleicht:

Code: Alles auswählen

CreateImage(0,100,50)

StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(0,0,"test",#Red)
StopDrawing()

himlDemo = ImageList_Create_(100,50,#ILC_COLOR8 | #ILC_MASK,1,0)
ImageList_AddMasked_(himlDemo,ImageID(0),0)

OpenWindow(0,0,0,640,480,"void",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)

Repeat
	EventID = WaitWindowEvent(20)
	
	If ElapsedMilliseconds() > (TimerInit + 500)
		TimerInit = ElapsedMilliseconds()
		hdc = StartDrawing(WindowOutput(0))
 		ImageList_Draw_(himlDemo,0,hdc,Random(630),Random(470),#ILD_TRANSPARENT)
		StopDrawing()
	EndIf
Until EventID = #PB_Event_CloseWindow

ImageList_Destroy_(himlDemo)
Windows 10 Pro, 64-Bit / Outtakes | Derek
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Beitrag von Andreas21 »

So hatte ich es gemeint:

Code: Alles auswählen

Procedure Animation(ani)
  CopyImage(1, 2)
  LoadImage(3,"image\"+Str(ani)+".bmp")
  himlDemo = ImageList_Create_(50, 50,#ILC_COLOR8 | #ILC_MASK,1,0) 
  ImageList_AddMasked_(himlDemo,ImageID(3),RGB(255,242,0))
  hdc = StartDrawing(ImageOutput(2)) 
    ImageList_Draw_(himlDemo,0,hdc,0,0,#ILD_TRANSPARENT) 
  StopDrawing() 
  ImageList_Destroy_(himlDemo)
  StartDrawing(WindowOutput(0)) 
    DrawImage(ImageID(2), 270,180)  
  StopDrawing() 
  FreeImage(2)
  FreeImage(3)
EndProcedure

Window = OpenWindow(0,0,0,320,240,"Animation", #PB_Window_BorderLess | #PB_Window_ScreenCentered | #PB_Window_Invisible) 
ButtonGadget(0, 10, 10, 60, 20, "Ende")

Image = LoadImage(0,"hintergrund.bmp")
SkinWin(Window,Image)
HideWindow(0, 0) 

GrabImage(0, 1, 270, 180, 50, 50)
ani = 1

Repeat 
   EventID = WaitWindowEvent(20) 
    
   If ElapsedMilliseconds() > (TimerInit + 200) 
     TimerInit = ElapsedMilliseconds() 
     If ani > 10 
       ani = 1
     EndIf
     Animation(ani)
     ani+ 1
   EndIf 
   If EventID = #WM_LBUTTONDOWN 
    SendMessage_(Window,#WM_NCLBUTTONDOWN, #HTCAPTION,0)
   EndIf
   If EventID = #PB_Event_Gadget
     If EventGadget() = 0
       CloseWindow(0)
       End
     EndIf
   EndIf  
Until EventID = #PB_Event_CloseWindow
Der Code mit Grafiken hier.

Edit:
So ist es besser

Code: Alles auswählen

Procedure Animation(window,himage,x,y,ani.s,Farbe)
  Image = LoadImage(#PB_Any ,ani)
  himlDemo = ImageList_Create_(ImageWidth(Image), ImageHeight(Image),#ILC_COLOR8 | #ILC_MASK,1,0) 
  ImageList_AddMasked_(himlDemo,ImageID(Image),Farbe)
  hdc = StartDrawing(WindowOutput(window)) 
    DrawImage(ImageID(himage), x,y) 
    ImageList_Draw_(himlDemo,0,hdc,x,y,#ILD_TRANSPARENT) 
  StopDrawing() 
  ImageList_Destroy_(himlDemo)
  FreeImage(Image)
EndProcedure

Window = OpenWindow(0,0,0,320,240,"Animation", #PB_Window_BorderLess | #PB_Window_ScreenCentered | #PB_Window_Invisible) 
ButtonGadget(0, 10, 10, 60, 20, "Ende")

Image = LoadImage(0,"hintergrund.bmp")
SkinWin(Window,Image)
HideWindow(0, 0) 

GrabImage(0, 1, 270, 180, 50, 50)
ani = 1

Repeat 
   EventID = WaitWindowEvent(20) 
    
   If ElapsedMilliseconds() > (TimerInit + 200) 
     TimerInit = ElapsedMilliseconds() 
     If ani > 10 
       ani = 1
     EndIf
     Animation(0,1,270,180,"image\"+Str(ani)+".bmp",RGB(255,242,0))
     ani+ 1
   EndIf 
   If EventID = #WM_LBUTTONDOWN 
    SendMessage_(Window,#WM_NCLBUTTONDOWN, #HTCAPTION,0)
   EndIf
   If EventID = #PB_Event_Gadget
     If EventGadget() = 0
       CloseWindow(0)
       End
     EndIf
   EndIf  
Until EventID = #PB_Event_CloseWindow 
Animation(Fenster ID, Image zum wieder herstellen des alten hintergrundes, x Pos, y Pos, BMP Grafik File, Tranzparente Farbe)
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Antworten