Seite 1 von 2

Sprite, Mouse und Absturz

Verfasst: 16.10.2005 09:48
von irobot
Tach allerseits,

habe vor (weil Faxen dicke mit Visual Basic) DER_PROZESS komplett
neu in PureBasic zu schreiben: www.der-prozess.de

Ums verrecken krieg ich den Teil mit der Grafik nicht hin.
Sollzustand: Nach Klick auf einem ButtonImageGadget (z.B. einem Ventil),
soll am Mauszeiger dranhängen ein Ventil, dieses soll dann auf der
schwarzen "Arbeitsfläche" plaziert werden. Danach weitere Armaturen, bis
man sein Fliessbild fertig hat.

Bei dem nachfolgendem (bin ja schon dichte dran) Ausschnitt klappt
das nur einmal, beim zweiten klick auf das ButtonImageGadget bleibt das
Programm mit so einer Fehlermeldung hängen. Wieso ? Weiterhin frage
ich mich, ist die Lösung mit dem Sprite überhaupt die beste ?

Danke im voraus für eure Hilfe ! Hier also der Ausschnitt:
=======================================

Code: Alles auswählen

OpenWindow(1, 0, 0, ... , "DER_PROZESS 5.0 by Ralf Neitzel")

... dieverse Vorbereitungen

Procedure HAUPTSCHLEIFE()
;hier läuft das eigentliche Programm ab
                 

   InitMouse()           
  
   Repeat 
    
      EVENT = WaitWindowEvent() 
      
      Select EVENT
      
         Case ... 
    
         Case #PB_Event_Gadget

            Select EventGadgetID()

               Case 2
                  
               Case 3
                  
               Case 4
                  
               Case 16
                  InitSprite() 
                  InitKeyboard()
                  OpenWindowedScreen(WindowID(1), 1, 32, BREITE, HOEHE, AutoStretch, RightOffset, BottomOffset)
                  CreateSprite(0, BREITE, HOEHE)
                  LoadSprite(1, "Bild.bmp" )
     
                  Repeat
                
                     FlipBuffers()
                     DisplaySprite(0, x, y)
                     ExamineMouse()
                     DisplaySprite(1, WindowMouseX(), WindowMouseY())
                     ExamineKeyboard()
                     If MouseButton(1) Or MouseButton(2) Or  
KeyboardPushed(#PB_Key_Escape)
                        ReleaseMouse(1)
                        FreeSprite(0)
                        FreeSprite(1)
                        Break
                     EndIf
                        
                  ForEver 

            EndSelect
  
      EndSelect
    
   Until  EVENT = #PB_Event_CloseWindow

    
EndProcedure

Verfasst: 16.10.2005 17:15
von Kaeru Gaman
bitte code tags setzen... :)

Verfasst: 16.10.2005 17:27
von irobot
Was heisst das "tags setzen"

Verfasst: 16.10.2005 17:33
von MVXA
Tags sind die Befehle zwischen den []. Ein Code Tag sieht so aus:
[code][/code]

Verfasst: 16.10.2005 17:39
von irobot
... ich weiss nicht was du meintst

:-(

Verfasst: 16.10.2005 17:41
von MVXA
Da Oben sind so Knöpfe. B, i.... Code. Da mal drauf drücken. Dann zwischen den Code schlüsselwörter deinen Code poste.

Code: Alles auswählen

blaaaaaaaaaaaa

Verfasst: 16.10.2005 17:53
von Kaeru Gaman
du gehst einfach bei deinem beitrag auf 'edit'

dann markierst du den kompletten code, und drückst auf den button "Code"

dann werden um den code die code-tags gesetzt und du kannst dein post wieder abschicken...

Verfasst: 16.10.2005 18:15
von irobot
Hier also der Ausschnitt. Das gesamte Programm ist
viel länger, habe hier nur den besagten Ausschnitt.
Hier nicht mit drauf sind die Erstellung der ButtonGadgets,
der Menus, Variablenzuweisung usw., das funktioniert auch
alles bestens (ist ja auch verstehbar für mich)

Hier also der Code:

Code: Alles auswählen


Declare HAUPTSCHLEIFE()

OpenWindow(1, 0, 0, HAUPTFENSTERBREITE, HAUPTFENSTERHOEHE, #PB_Window_SystemMenu |#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget | #PB_Window_SizeGadget| #PB_Window_MaximizeGadget | #PB_Window_TitleBar , "DER_PROZESS 5.0 by Ralf Neitzel")
InitSprite() 
InitKeyboard()

HAUPTSCHLEIFE()


Procedure HAUPTSCHLEIFE()

   InitMouse()           

   Repeat 
    
      EVENT = WaitWindowEvent() 
      
      Select EVENT
      
         Case #PB_Event_SizeWindow
           
         Case #PB_Event_Gadget
            Select EventGadgetID()
               Case 2
                  
               Case 3
                  
               Case 4
                  
               Case 16
                  InitSprite() 
                  InitKeyboard()
                  OpenWindowedScreen(WindowID(1), 1, 32, HAUPTFENSTERBREITE-116, HAUPTFENSTERHOEHE-71, AutoStretch, RightOffset, BottomOffset)
                  CreateSprite(0, HAUPTFENSTERBREITE-116, HAUPTFENSTERHOEHE-71)
                  LoadSprite(1, "Data\PureBasic.bmp" )
     
                  Repeat
                     FlipBuffers(1)
                     DisplaySprite(0, 0, 0)
                     ExamineMouse()
                     DisplaySprite(1, WindowMouseX(), WindowMouseY())
                     ExamineKeyboard()
                     If MouseButton(1) Or MouseButton(2) Or KeyboardPushed(#PB_Key_Escape)
                        ReleaseMouse(1)
                        FreeSprite(0)
                        FreeSprite(1)
                        Break
                     EndIf
                  ForEver 

            EndSelect
            
         Case #WM_RBUTTONDOWN   
         Case #PB_Event_Menu 
      EndSelect
           
   Until  EVENT = #PB_Event_CloseWindow
    
EndProcedure
Problem war ja, der Teil mit der Grafik.
Sollzustand: Nach Klick auf einem ButtonImageGadget (z.B. einem Ventil),
soll am Mauszeiger dranhängen ein Ventil, dieses soll dann auf der
schwarzen "Arbeitsfläche" plaziert werden. Danach weitere Armaturen, bis
man sein Fliessbild fertig hat.

Bei dem obenstenhenden Programmcode (bin ja schon dichte dran)
klappt das nur einmal, beim zweiten klick auf das ButtonImageGadget
bleibt das Programm mit so einer Fehlermeldung hängen. Wieso ?

Weiterhin frage ich mich, ist die Lösung mit dem Sprite überhaupt die
beste ?

Danke im voraus für eure Hilfe !

Verfasst: 16.10.2005 18:24
von Kaeru Gaman
argl.. wieso geht das denn nicht....

hast du das häkchen bei "BBCode deaktivieren" an?

außerdem hättest du dein erstes posting editieren können...

sorry, nich böse sein, es liest sich einfach besser, wenn es als code dasteht...



wo ist denn hier ein MOD, wenn man ihn mal braucht?


[edit]

hab mal so reingeschaut....

das erste was mir auffällt ist, daß du die inits irgendwo mitten im programm hast, nicht am anfang...

dann ist mir nicht ganz klar, was du da tust...

ein sprite 0 createn? ein leeres? wieso?

du erzeugst den windowedscreen als reaktion auf nen button?

vielleicht kommt der fehler, weil du den screen nicht wieder zu machst, ihn aber nochmal erzeugen willst...

erzeug ihn mal ganz am anfang, auch die anderen inits und das sprite-laden an den anfang...

Verfasst: 16.10.2005 19:02
von Kaeru Gaman
so, nochmal...

damit man sieht, daß ne antwort da is...

hab mal so reingeschaut....

das erste was mir auffällt ist, daß du die inits irgendwo mitten im programm hast, nicht am anfang...

dann ist mir nicht ganz klar, was du da tust...

ein sprite 0 createn? ein leeres? wieso?

du erzeugst den windowedscreen als reaktion auf nen button?

vielleicht kommt der fehler, weil du den screen nicht wieder zu machst, ihn aber nochmal erzeugen willst...

erzeug ihn mal ganz am anfang, auch die anderen inits und das sprite-laden an den anfang...