Re: Bild auf Benutzeroberfläche bewegen?
Verfasst: 20.06.2013 14:53
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
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