Bild auf Benutzeroberfläche bewegen?

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Bild auf Benutzeroberfläche bewegen?

Beitrag von bobobo »

ein image ohne gadget wäre dann wohl ein auf das Fenster gemaltes Bild.
Das ist immer schlecht für ein wirklich brauchbares Projekt.
Das endet dann irgendwann in wilder Flackerei wenn es dann sehr dynamisch wird

Entweder benutzt Du auch für die Blase ein Gadget oder du schwenkst um auf das Canvasgadget

hiermal etwas Spielereien damit
bentuzte bilder sind hier
pixelmann
landschaft
sprechblase
knopf
gedrückter Knopf


Code: Alles auswählen

UsePNGImageDecoder()

Enumeration ;window gadgets und images, shortcuts
  #win
  #pixelmann  
  #BILD_spielmap_DATEI
  #canvas
  #fakeKnopf
  #fakeKnopf_
  #blase
  #sk_left
  #sk_right
EndEnumeration

Global fkx=200 ;fakeknopf X-Position
Global fky=120 ;fakeknopf X-Position
Global pmw     ;pixelmannbreite
Global pmh=100

Procedure drawcanvas(x,m=0,b=0,i=0)
  StartDrawing(CanvasOutput(#canvas))
    DrawImage(ImageID(#BILD_spielmap_DATEI),0,0)
    DrawAlphaImage(ImageID(#pixelmann),x,Sin(x/10)*10+pmh) ; die Breite des Pixelmanns ist
    If m
      DrawAlphaImage(ImageID(#fakeKnopf_),fkx,fky) 
    Else
      DrawAlphaImage(ImageID(#fakeKnopf),fkx,fky) 
    EndIf
    If b
      DrawAlphaImage(ImageID(#blase),x+pmw,Sin(x/10)*10+pmh*0.7,b) 
    EndIf
    If i
      DrawingMode(#PB_2DDrawing_Transparent)
      RoundBox(0,0,WindowWidth(#win)-18,TextHeight("1")*3+2,5,5,RGB(121, 133, 108))
      RoundBox(0,0,WindowWidth(#win)-20,TextHeight("1")*3,5,5,RGB(113,167,82))
      
      DrawText(10,0,"Pfeil nach links rutscht den Knopf nach links",#White)
      DrawText(10,TextHeight("1"),"Pfeil nach rechts rutscht den Knopf nach rechts",#White)
      DrawText(10,TextHeight("1")*2,"Anklicken (korrekt linke maustaste gedrückt im Knopf setzt die Richtung nach links (falls Richtung nach rechts)",#White)
    EndIf
    
  StopDrawing()
EndProcedure
i=500
If OpenWindow(#win, 0, 0, 800, 600, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  LoadImage(#pixelmann, "d:\pixelm.png")
  pmw=ImageWidth(#pixelmann) ;die Breite brauch ich unten für die Kollisionsabfrage
  LoadImage(#BILD_spielmap_DATEI, "d:\landschaft.png")
  LoadImage(#fakeknopf,"D:\fakeknopf.png")
  LoadImage(#fakeknopf_,"D:\fakeknopf_.png")
  LoadImage(#blase,"D:\blase.png")
  
  fkw=ImageWidth(#fakeknopf)   ;Breite des Fakeknopfs
  fkh=ImageHeight(#fakeknopf)  ; Höhe des Fakeknopfs
  
  CanvasGadget(#canvas,0,0,800,600)
  AddWindowTimer(#win,1,1)
  AddKeyboardShortcut(#win,#PB_Shortcut_Left,#sk_left)
  AddKeyboardShortcut(#win,#PB_Shortcut_Right,#sk_right)
  
  Repeat
    ereignis=WaitWindowEvent()
    etimer=EventTimer()
    emenu = EventMenu() ;Keyboardshortcuts
    etype = EventType()
    egadget=EventGadget()
    gmx=GetGadgetAttribute(#canvas,#PB_Canvas_MouseX)
    gmy=GetGadgetAttribute(#canvas,#PB_Canvas_MouseY)
    
    Select ereignis
      Case #PB_Event_Gadget
        Select egadget
          Case #canvas
            Select etype
              Case #PB_EventType_LeftButtonDown
                If gmx>=fkx And gmx<=fkx+fkw And gmy>=fky And gmy<=fky+fkh ; ein Klick in den Fakeknopf setzt die Richtung nach links
                  m=8  ; knopfrevert  wirkt wie eine Art countdown
                  If ad=1
                    ad=-1
                    b=255 ; blase wirkt wie eine Art countdown, gleichzeitig Alphawert (darf nie mehr als 255 oder weniger als 0 werden)
                  EndIf
                EndIf
            EndSelect
        EndSelect
            
      Case #PB_Event_Menu
        Select emenu
          Case #sk_left
            fkx-3 ; x-Position für den Knopf drei pixel nach links
          Case #sk_right
            fkx+3; x-Position für den Knopf drei pixel nach rechts
        EndSelect
        
      Case #PB_Event_Timer
        If Etimer = 1
          If x+pmw>=fkx :ad=-1  :b=255:EndIf ;falls der mann an den knopf stösst, zurück , 
          If x=200  :  ad=-1  :  EndIf
          If x=0    :  ad=1   :  EndIf
          x+ad
          drawcanvas(x,m,b,i)
          If m>0
            m-1
          EndIf
          If b>0
            b -15
          EndIf
          If i>0
            i-1
          EndIf
          
        EndIf
    EndSelect
    
  Until Ereignis = #PB_Event_CloseWindow Or Ende = #True
EndIf
End
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
NeoRon
Beiträge: 67
Registriert: 22.03.2013 18:56

Re: Bild auf Benutzeroberfläche bewegen?

Beitrag von NeoRon »

Ah, echt nette sache. Interessant.

Werde da rumprobieren.
Danke !

Grüße
Ron
The World is Cyber
Antworten