ich habe ein kleines Problem mit meinem Kartenspiel (mein erstes Projekt in PB).
Es handelt sich um einen WindowedScreen auf dem die gesamten
Grafikausgaben u.a. mit 2D und 3D Sprites ausgeführt werden.
Der Screen nimmt nicht die gesamte Fensterfläche ein, so daß
rechts vom Screen gleichzeitig noch Statistikausgaben in ein
EditGadget gemacht werden.
Dort rechts sind auch ein paar CheckBoxen, mit denen ich testweise
einige Programmfunktionen ein/ausschalte.
(Hier ist ein Screenshoot)
Der Mauszeiger wird innerhalb des Screenbereiches durch ein
Sprite dargestellt - der normale Mauszeiger ist in diesem Bereich
disabled.
Und zwar habe ich jetzt den Effekt, daß unter gewissen Umständen
dieser Sprite-Mousepointer sich sehr zähflüssig bewegt.
Normalerweise flutscht das wie verrückt, da ich den Screen aus
performancegründen auch nicht für jeden Framewechsel neu aufbaue.
Die Grafik wird nur generiert, wenn es wirklich nötig ist (z.B.
neue Karten auf den Tisch malen).
Danach wird der gesamte Screen in einem Sprite gesichert.
Mit diesem einen Sprite wird dann bei sekundären Grafikaktionen
(z.B. Mauszeiger neu zeichnen oder ne Anim zeichnen) der Hintergrund
mit einem DisplaySprite neu rekonstruiert.
Wenn ich jetzt die Exe starte und ein wenig mit den Klickern rechts
rumspiele und den Mousepointer dann wieder in den Screen ziehe, dann
kommt es ziemlich regelmäßig vor, daß mein Mousesprite den Bewegungen
meiner Maus nur noch im Zeitlupentempo folgt.
Ich vermute, daß ds was mit dem Messagesystem von Windows zu tun hat,
aber sicher bin ich mir nicht.
Der Eventloop sieht eigentlich auch ziemlich in Ornung aus.
Code: Alles auswählen
  Event = WaitWindowEvent(5) ; This line waits until an event is received from Windows
  
  WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
  
  GadgetID = EventGadget() ; Is it a gadget event?
  
  EventType = EventType() ; The event type
  
  Select Event 
    Case #PB_Event_Menu
      MenuID = EventMenu()
      Select MenuID
        Case #NEWGAME
          Debug "GadgetID: #NEWGAME"
        Case #MIXCARDS
          Debug "GadgetID: #MIXCARDS"
        Case #QUITGAME
          Debug "GadgetID: #QUITGAME"
          End
      EndSelect
   
    Case #PB_Event_Gadget
      Select GadgetID
        Case #Button_Test1
          MixCards()
          DrawTable()
        Case #Button_Test2
          DrawTable()
        Case #CheckBox_0
          DrawTable()
        Case #CheckBox_1
          DrawTable()
        Case #CheckBox_2
          DrawTable()
        Case #CheckBox_3
          If GetGadgetState(#CheckBox_3) ; Anim on / off
            ActiveAnim = 1
            ScreenRefresh = #True
          Else
            ActiveAnim = 0
            ScreenRefresh = #True
          EndIf
      EndSelect
;    Case #WM_MOUSEMOVE
;      DrawGraphics()
  EndSelect
  DrawGraphics()
    
Until Event = #PB_Event_CloseWindow Or MenuID = #QUITGAME; End of the event loopmal den Source hingelegt und würde mich über Tipps
zur Lösung des Problems freuen.
Gruß Markus





