Sprite, Mouse und Absturz

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
irobot
Beiträge: 162
Registriert: 16.10.2005 09:22
Kontaktdaten:

Sprite, Mouse und Absturz

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

bitte code tags setzen... :)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
irobot
Beiträge: 162
Registriert: 16.10.2005 09:22
Kontaktdaten:

Beitrag von irobot »

Was heisst das "tags setzen"
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Tags sind die Befehle zwischen den []. Ein Code Tag sieht so aus:
[code][/code]
Bild
Benutzeravatar
irobot
Beiträge: 162
Registriert: 16.10.2005 09:22
Kontaktdaten:

Beitrag von irobot »

... ich weiss nicht was du meintst

:-(
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag 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
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
irobot
Beiträge: 162
Registriert: 16.10.2005 09:22
Kontaktdaten:

Beitrag 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 !
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten