Seite 1 von 2

Geflimmer

Verfasst: 10.12.2005 16:06
von PB42
Hallo,

folgender Colde zeigt eine Klavier-Tatstatur über eine F-Dur-Oktave. Warum flimmert das Bild, wenn man mit der Maus über das Fenster geht? Wenn man das Fenster bei gedrückter Maustaste verschieben will (blaue Leiste), verschwinden übrigens alle Klaviertasten. Das schlimmste aber ist dieses Geflimmer. Wie kann das abgestellt werden? Danke.

Code: Alles auswählen

InitSprite()
OpenWindow(0,0,0,800, 600,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget,"")
OpenWindowedScreen(WindowID(0), 20, 120, 407, 200, 0, 0, 0)

Repeat
  eventID = WaitWindowEvent()
   
  StartDrawing(WindowOutput())  
    FrontColor(255,255,255)
    Box(20,120,50,200)
    Box(71,120,50,200)
    Box(122,120,50,200)
    Box(173,120,50,200)
    Box(224,120,50,200)
    Box(275,120,50,200)
    Box(326,120,50,200)
    Box(377,120,50,200)
    
    FrontColor(0,0,0)
    Box(50,120,40,125)
    Box(101,120,40,125)
    Box(152,120,40,125)
    
    Box(254,120,40,125)
    Box(305,120,40,125)  
  StopDrawing()
  
  Delay(1)
Until eventID = #PB_EventCloseWindow
PB42

P.S.: Kann man bei PB irgendwie das Muß abstellen, immer erst diesen blöden Totenkopf klicken zu müssen, bevor man weiter an dem Source arbeiten kann, nachdem es eine Fehlermeldung gab?

Re: Geflimmer

Verfasst: 10.12.2005 16:11
von HeX0R
PB42 hat geschrieben:P.S.: Kann man bei PB irgendwie das Muß abstellen, immer erst diesen blöden Totenkopf klicken zu müssen, bevor man weiter an dem Source arbeiten kann, nachdem es eine Fehlermeldung gab?
Ja, keine Fehler machen :mrgreen:

Verfasst: 10.12.2005 16:17
von PB42
D :D s ist w :D hr!

Verfasst: 10.12.2005 16:56
von AndyX
1. Mach statt WindowOutput() ScreenOutput(). Die Zeichenfläche, die du auf einem Fenster mit OpenWindowedScreen() erstellst,wird mit ScreenOutPut() angesprochen.

2. Du hast kein ClearScreen()! Das heißt die Zeichenfläche wird nicht gelöscht!

3. Du hast kein FlipBuffers()! Das heißt das was du zeichnest wird nicht gezeichnet!

gr33tz

Verfasst: 10.12.2005 17:24
von roherter

Code: Alles auswählen

InitSprite()
OpenWindow(0,0,0,800, 600,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget,"")
OpenWindowedScreen(WindowID(0), 20, 120, 407, 200, 0, 0, 0)

Repeat
  eventID = WaitWindowEvent()
  
  StartDrawing(ScreenOutput()) 
  Box(0,0,407,200,RGB(22,25,255))
  FrontColor(255,255,255)
  
  Box(20,120,50,200)
  Box(71,120,50,200)
  Box(122,120,50,200)
  Box(173,120,50,200)
  Box(224,120,50,200)
  Box(275,120,50,200)
  Box(326,120,50,200)
  Box(377,120,50,200)
  
  FrontColor(0,0,0)
  Box(50,120,40,125)
  Box(101,120,40,125)
  Box(152,120,40,125)
  
  Box(254,120,40,125)
  Box(305,120,40,125) 
  StopDrawing()
  
  Delay(1)
Until eventID = #PB_EventCloseWindow

Verfasst: 10.12.2005 17:38
von PB42
Danke, das mit dem ScreenOutput() klappt gut und das Geflimmer ist weg, aber nun sollen die Klaviertasten auch noch mit der Maus angesprochen werden können. Dazu habe ich den Source etwas verändert, sodaß sich spaßeshalber eine weitere weiße Taste ganz rechts bilden soll, wenn man die erste weiße Taste links anklickt. Ich kriege das nur so hin, wie jetzt der Code ist, nämlich mit ExamineMouse(), aber köstlicherweise ist dann überhaupt kein Mauszeiger mehr zu sehen und mit Loadsprite und DisplayTransparentSprite kriege ich auch kein Fadenkreuz oder dergleichen auf die Mattscheibe. Ich weiß da nicht weiter. Danke für Infos.

Code: Alles auswählen

InitSprite()
InitMouse()
OpenWindow(0,0,0,800,600,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget,"")
OpenWindowedScreen(WindowID(0), 0, 0, 407, 200, 0, 0, 0)
LoadSprite(0,"Bilder\Maus.bmp") 

Repeat
ExamineMouse()
  eventID = WaitWindowEvent()
  
    ClearScreen(0,0,0)
    StartDrawing(ScreenOutput())
    FrontColor(255,255,255)
    Box(0,0,50,200)
    Box(51,0,50,200)
    Box(102,0,50,200)
    Box(153,0,50,200)
    Box(204,0,50,200)
    Box(255,0,50,200)
    Box(306,0,50,200)
    Box(357,0,50,200)
    
    FrontColor(0,0,0)
    Box(32,0,36,130)
    Box(83,0,35,130)
    Box(134,0,35,130)
    
    Box(235,0,35,130)
    Box(286,0,35,130)  
  StopDrawing()
  FlipBuffers()
  
  If MouseButton(1) And MouseX() > 0 And MouseX() < 50 And MouseY() > 0 And MouseY() < 200
  StartDrawing(WindowOutput())
  FrontColor(0,0,0)
  Box(408,0,50,200)  
  StopDrawing()
  EndIf  
  
  
  Delay(1)
Until eventID = #PB_EventCloseWindow
PB42

Verfasst: 10.12.2005 17:39
von nco2k
@PB42
wenn du nicht unbedingt directx brauchst, mach es doch einfach so:

Code: Alles auswählen

If OpenWindow(0,0,0,800, 600,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget,"")
  
  If CreateGadgetList(WindowID(0))
    If CreateImage(0, 407, 200)
      If StartDrawing(ImageOutput())
        FrontColor(255,255,255)
        Box(0,0,50,200)
        Box(51,0,50,200)
        Box(102,0,50,200)
        Box(153,0,50,200)
        Box(204,0,50,200)
        Box(255,0,50,200)
        Box(306,0,50,200)
        Box(357,0,50,200)
        FrontColor(0,0,0)
        Box(30,0,40,125)
        Box(81,0,40,125)
        Box(132,0,40,125)
        Box(234,0,40,125)
        Box(285,0,40,125)
        StopDrawing()
      EndIf
      ImageGadget(0, 20, 120, 407, 200, UseImage(0))
    EndIf
  EndIf
  
  Repeat
    EventID = WaitWindowEvent()
  Until EventID = #PB_EventCloseWindow
  
EndIf
p.s.: wozu das Delay(1)?! du verwendest doch sowieso WaitWindowEvent().

c ya,
nco2k

Verfasst: 10.12.2005 17:50
von PB42
Danke, das Delay ist überflüssig. Ich habe Deinen Code ausprobiert: Die Tasten blitzen kurz auf und dann sind sie auch schonwieder weg.

PB42

Verfasst: 10.12.2005 17:53
von nco2k
@PB42
nö brauchst du nicht, deswegen erstelle ich ja das image mit CreateImage() und zeichne direkt darauf mir StartDrawing(ImageOutput()) : StopDrawing(). aber komisch, dass es bei dir nicht geht. :?

c ya,
nco2k

Verfasst: 10.12.2005 17:59
von PB42
Ich hab's nochmal geladen und jetzt läuft's plötzlich richtig. Das mit dem CreateImage() wußte ich noch nicht, sehr praktisch. :allright:

PB42