Bild auf Benutzeroberfläche bewegen?

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
NeoRon
Beiträge: 67
Registriert: 22.03.2013 18:56

Bild auf Benutzeroberfläche bewegen?

Beitrag 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
The World is Cyber
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Bild auf Benutzeroberfläche bewegen?

Beitrag von Kiffi »

Ja, kann man.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Bild auf Benutzeroberfläche bewegen?

Beitrag 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
‮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 »

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!
The World is Cyber
Benutzeravatar
Dave
Beiträge: 22
Registriert: 12.06.2011 21:39
Computerausstattung: Windows 10 x64, Intel Core i7 7700k @4.2Ghz, 16GB RAM, PureBasic 5.72

Re: Bild auf Benutzeroberfläche bewegen?

Beitrag 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
Bild Bild Bild
Benutzeravatar
NeoRon
Beiträge: 67
Registriert: 22.03.2013 18:56

Re: Bild auf Benutzeroberfläche bewegen?

Beitrag von NeoRon »

Super, Danke!

Ihr seit echt ne klasse Community :)
The World is Cyber
Benutzeravatar
NeoRon
Beiträge: 67
Registriert: 22.03.2013 18:56

Re: Bild auf Benutzeroberfläche bewegen?

Beitrag 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
The World is Cyber
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Bild auf Benutzeroberfläche bewegen?

Beitrag 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
‮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 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
The World is Cyber
Benutzeravatar
WPö
Moderator
Beiträge: 669
Registriert: 27.05.2008 12:44
Wohnort: Oberland
Kontaktdaten:

Re: Bild auf Benutzeroberfläche bewegen?

Beitrag 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ö
Ich glaube nur der Statistik, die ich selbst gefälscht habe!
Meine Netzpräsenz: WPö.de
PB5.31 auf LMDE und Pentium T7200 2,00GHz, 4GB DDR2, ATI X1400.
Antworten