Seite 1 von 3

Bild auf Benutzeroberfläche bewegen?

Verfasst: 10.06.2013 02:54
von NeoRon
Kann man ein Bild auf der Benutzeroberfläche automatisch bewegen oder auch per Tastatur-und Mauseingabe bewegen lassen, ähnlich wie ein Sprite im Screen?

Grüße

Re: Bild auf Benutzeroberfläche bewegen?

Verfasst: 10.06.2013 08:45
von Kiffi
Ja, kann man.

Grüße ... Kiffi

Re: Bild auf Benutzeroberfläche bewegen?

Verfasst: 10.06.2013 14:00
von bobobo
Herrje ..

Das Bild wird entweder als Imagegadget(..) auf das Fenstergelegt oder draufgemalt.
Wenn es draufgemalt wird (immer unpraktisch) dann malt man es eben einfach woanders hin
(Reste von vorhergemalten Bild dürften stehen bleiben und müssen irgendwie anders entfernt werden.

Das Imagegadget wird per ResizeGadget(..) verschoben
Genaueres weiß die PB-Hilfe
hier mal ein Demo mit Resizegadget(..)

Code: Alles auswählen

img=CreateImage(#PB_Any,50,50)
StartDrawing(ImageOutput(img))
  Box(0,0,50,50,#Red)
  Circle(25,25,24,#Yellow)
  
  Ellipse(25,28,12,5,#Black)
  Ellipse(25,26,14,5,#Yellow)
  
  Ellipse(15,15,3,5,#Black)
  Ellipse(35,15,3,5,#Black)
  
StopDrawing()

win=OpenWindow(#PB_Any,0,0,400,400,"test",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
ig=ImageGadget(#PB_Any,0,0,50,50,ImageID(img))

tim=1

AddWindowTimer(win,tim,333)
Repeat
  event=WaitWindowEvent()
  etimer=EventTimer()
  Select event
    Case #PB_Event_CloseWindow
      quit+1
    Case #PB_Event_Timer
      Select etimer
        Case tim
          ResizeGadget(ig,Random(350),Random(350),#PB_Ignore,#PB_Ignore)
      EndSelect
  EndSelect
Until quit
End

Re: Bild auf Benutzeroberfläche bewegen?

Verfasst: 10.06.2013 22:55
von NeoRon
Wie kann ich nun in diesem Beispiel Programm das Image Gadget mit der Tastatur bewegen?

Code: Alles auswählen

Enumeration
#FENSTER_HAUPT
#BILD_spielmap_DATEI
#BILD_spielmap_ANZEIGE
#BILD_mario_ANZEIGE
#mario
EndEnumeration

    
  Repeat

   #FLAGS = #PB_Window_SystemMenu | #PB_Window_ScreenCentered 

   If OpenWindow(#FENSTER_HAUPT, 0, 0, 800, 600, "Test", #FLAGS)
     
  LoadImage(#BILD_spielmap_DATEI, "landschaft.bmp")
   ImageGadget(#BILD_spielmap_ANZEIGE, 0, 0, 800, 600, ImageID(#BILD_spielmap_DATEI), #PB_Image_Border) 

 LoadImage(#mario, "mario.bmp")
   ImageGadget(#BILD_mario_ANZEIGE, 50, 300, 50, 50, ImageID(#mario), #PB_Image_Border) 

  Repeat
      ResizeGadget(#mario, 150, 100, #PB_Ignore, #PB_Ignore) 
      KeyboardPushed(#PB_Key_W)
          x = x + 1
   If x = > 100
      x = 0
    EndIf 

FlipBuffers()
ExamineKeyboard()
    
Until Ereignis = #PB_Event_CloseWindow Or Beenden = #True

EndIf
End
ForEver
Habs versucht aber kläglich gescheitert xD

Danke!

Re: Bild auf Benutzeroberfläche bewegen?

Verfasst: 11.06.2013 00:00
von Dave
Hi,


So sollte es funktionieren:

Code: Alles auswählen

Enumeration
  #FENSTER_HAUPT
  #BILD_spielmap_DATEI = 0
  #BILD_spielmap_ANZEIGE
  #BILD_mario_ANZEIGE
  #mario
EndEnumeration


#FLAGS = #PB_Window_SystemMenu | #PB_Window_ScreenCentered
Define.f X, Y


If OpenWindow(#FENSTER_HAUPT, 0, 0, 800, 600, "Test", #FLAGS)
  LoadImage(#BILD_spielmap_DATEI, "landschaft.bmp")
  ImageGadget(#BILD_spielmap_ANZEIGE, 0, 0, 800, 600, ImageID(#BILD_spielmap_DATEI), #PB_Image_Border)
    
  LoadImage(#mario, "mario.bmp")
  ImageGadget(#BILD_mario_ANZEIGE, 50, 300, 50, 50, ImageID(#mario), #PB_Image_Border)
  
  
  Repeat
    Ev = WaitWindowEvent(2)
    
    If GetAsyncKeyState_(#VK_W)
      Y-0.1
    EndIf
    If GetAsyncKeyState_(#VK_S)
      Y+0.1  
    EndIf
    
    If GetAsyncKeyState_(#VK_A)
      X-0.1
    EndIf
    If GetAsyncKeyState_(#VK_D)
      X+0.1
    EndIf
    
    ResizeGadget(#BILD_mario_ANZEIGE, X, Y, #PB_Ignore, #PB_Ignore)
    
  Until Ev = #PB_Event_CloseWindow  
EndIf
End
Ohne Screen kannst du auch die PB Keyboard Library nicht benutzen.

Lg Dave

Re: Bild auf Benutzeroberfläche bewegen?

Verfasst: 11.06.2013 00:26
von NeoRon
Super, Danke!

Ihr seit echt ne klasse Community :)

Re: Bild auf Benutzeroberfläche bewegen?

Verfasst: 11.06.2013 01:43
von NeoRon
Noch ne Frage.
Wie bekomm ich das das bild sich an bestimmten stellen random bewegt.

Er meldet "Gadget not initilised"

ich habs versucht aber nix tut sich.

Hier der Code

Code: Alles auswählen

 LoadImage(#pixelmann, "pixelm.bmp")
 ig=ImageGadget(#BILD_pixelmann_ANZEIGE, 50, 300, 50, 50, ImageID(#pixelmann), #PB_Image_Border)
  

   LoadImage(#BILD_spielmap_DATEI, "landschaft.bmp")
   ImageGadget(#BILD_spielmap_ANZEIGE, 0, 0, 800, 600, ImageID(#BILD_spielmap_DATEI), #PB_Image_Border) 

   lauf=1
   AddWindowTimer(win,lauf,333)
   
Repeat
  Ereignis.i = WaitWindowEvent()
  etimer=EventTimer()
  Select Ereignis
    Case #PB_Event_Timer
      Select etimer
        Case lauf
          ResizeGadget(ig,Random(350),Random(350),#PB_Ignore,#PB_Ignore) 

 
EndSelect
EndSelect

Until Ereignis = #PB_Event_CloseWindow Or Ende = #True
 
End
EndIf

Re: Bild auf Benutzeroberfläche bewegen?

Verfasst: 11.06.2013 13:10
von bobobo

Code: Alles auswählen

 ig=ImageGadget(#BILD_pixelmann_ANZEIGE, 50, 300, 50, 50, ImageID(#pixelmann), #PB_Image_Border)
ig enthält hier nicht die unten (Resize...) angesprochene Gadgetnummer sondern nur 0 oder 1
Entweder setzt Du hier statt #BILD_pixelmann_ANZEIGE #PB_Any wobei ig dann die Gagetnummer enthält
ODER du
schreibst beim Resizen statt

Code: Alles auswählen

          ResizeGadget(ig,Random(350),Random(350),#PB_Ignore,#PB_Ignore) 
besser mal

Code: Alles auswählen

          ResizeGadget(#BILD_pixelmann_ANZEIGE,Random(350),Random(350),#PB_Ignore,#PB_Ignore) 
Übrigens : Wenn man in der IDE alles markiert und STRG i drückt, dann wird es meist nett formatiert

Re: Bild auf Benutzeroberfläche bewegen?

Verfasst: 11.06.2013 15:30
von NeoRon
Ah super funktioniert und Danke für den tipp!

Wollte nun mit ner For Next schleife das bild schrittweise hin und her bewegen in einer endlos schleife aber ohne das es das Programm behindert.
Aber es klappt nicht.

Code: Alles auswählen

 

define.f x, y
Repeat
      Ereignis.i = WaitWindowEvent()
      etimer=EventTimer()
      Select Ereigns
        Case #PB_Event_Timer
          Select etimer
            Case lauf
              ResizeGadget(#BILD_pixelmann_ANZEIGE,x,y,#PB_Ignore,#PB_Ignore) 
              For var=x To 300 Step 1
              Next 
          EndSelect
      EndSelect
Grüße und Danke

Re: Bild auf Benutzeroberfläche bewegen?

Verfasst: 11.06.2013 15:38
von WPö
Moin!

Da kann überhaupt nichts funktionieren, denn Dein
NeoRon hat geschrieben: Select Ereigns
wird immer NULL sein. Innerhalb einer Ereignisschleife darfst Du selbstverständlich keine 300stufige Bewegung einbauen, sondern immer nur eine einzige Stufe. Die Umkehrpunkte mußt Du selbst bestimmen, auswerten und danach die Bewegungsrichtung bestimmen. Zuletzt: Wo ist die Anweisung zur Neupositionierung?

Gruß - WPö