Einstiegsfrage: 2D

Anfängerfragen zum Programmieren mit PureBasic.
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Einstiegsfrage: 2D

Beitrag von CNESM »

Hallo,

aufgrund einer Anforderung aus dem Bereich muss ich eine Art interaktive Präsenation eines Tools erstellen. Ich hab mich dazu das erste mal mit 2D und animierten Geschichten befasst. Leider habe ich schon nach 2 Minuten das erste Problem /:->

Code: Alles auswählen

If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Can't open DirectX 7 or later", 0)
  End
EndIf

If OpenWindow(24,0,0,798,473,"Interaktive Präsentation",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)

  If OpenWindowedScreen(WindowID(24),0,0,798,473,0,0,0)
    If StartDrawing(ScreenOutput())
      DrawImage(CatchImage(0,?Bild_1),0,0) 
    StopDrawing() 
  EndIf
  
  CreateSprite(0,13,22)
    If StartDrawing(SpriteOutput(0))
      DrawImage(CatchImage(0,?Bild_8),0,0) 
      StopDrawing()
    EndIf
    
   CreateSprite(3,13,22)
    If StartDrawing(SpriteOutput(3))
      DrawImage(CatchImage(2,?Bild_7),0,0) 
      StopDrawing()
    EndIf

Else
  MessageRequester("Error", "Can't open windowed screen!", 0)
  End
EndIf

direction = 5
x=200

Repeat
  Event.l = WindowEvent()    
    FlipBuffers() 
    ClearScreen(RGB(0,0,0))
    If StartDrawing(ScreenOutput())
      DrawImage(CatchImage(0,?Bild_1),0,0) 
      StopDrawing() 
    EndIf
    TransparentSpriteColor(0,RGB(255,0,255))
    DisplayTransparentSprite(0,x,245)

    x+direction
    If x > 320
      Event=1
    ElseIf x < 0
      direction = 5
    EndIf
    
    Delay(1)

Until Event=1

  Delay(1000)
   
    FlipBuffers() 
    ClearScreen(RGB(0,0,0))
    If StartDrawing(ScreenOutput())
      DrawImage(CatchImage(0,?Bild_1),0,0) 
      StopDrawing() 
    EndIf
    TransparentSpriteColor(3,RGB(255,0,255))
    DisplayTransparentSprite(3,150,245)

  Delay(1000)
  
EndIf
End   

Bild_1:IncludeBinary "_1.bmp"
Bild_2:IncludeBinary "_2.bmp"
Bild_3:IncludeBinary "_3.bmp"
Bild_7:IncludeBinary "_7.bmp"
Bild_8:IncludeBinary "_8.bmp"
Bild_9:IncludeBinary "_9.bmp"
Bild_10:IncludeBinary "_10.bmp"
Was macht der Code?

Der Code arbeitet nur mit Images. Der Code zeigt ein Fenster an und bewegt ein Sprite ("Mauszeiger") von A nach B. Dann wird ein ein Klick gezeigt, der Button wird eingedrückt und ein neues Fenster öffnet sich. Der Mauszeiger bewegt sich wie gewollt von A nach B, aber ab dem Verlassen der erste Schleife

Code: Alles auswählen

Until Event=1
Delay(1000)

passiert nichts mehr. Der anschließende Code wird zudem auch nicht mehr ausgeführt:

Code: Alles auswählen

    FlipBuffers() 
    ClearScreen(RGB(0,0,0))
    If StartDrawing(ScreenOutput())
      DrawImage(CatchImage(0,?Bild_1),0,0) 
      StopDrawing() 
    EndIf
    TransparentSpriteColor(3,RGB(255,0,255))
    DisplayTransparentSprite(3,150,245)
  Delay(1000)
obwohl PB den Code durchläuft. Da ist bestimmt nen Fehler von mir drinnen .... Vielleicht könnt ihr mal drüber schauen.
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Beitrag von Hoto »

Also so richtig intensiv hab ich mich mit sowas auch noch nicht auseinander gesetzt, aber fehlt da am Ende nicht noch ein FlipBuffers()? Weil soweit ich weiß wird erstmal alles in einen Buffer geschrieben und erst nach FlipBuffers dort rausgeholt und angezeigt.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ja, ein FlipBuffers() gehört ans Ende, das kann nur am Anfang stehen,
wenn es sich um eine Schleife handelt die garantiert immer durchlaufen wird.

ich habe schon angefragt, die Help-Beispiele dementsprechend anzupassen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Hallo Hoto,

das wars! Und schon was gelernt :) Vielen Dank! Ich werd mich nach dem Ende des Projekts mal melden! Vielleicht gibt die ein oder andere Optimierungsmöglichkeit in Sachen 2D.

Edit: Ja ist aus der Hilfe nicht unbedingt zu erkennen. Im Beispiel wird das ja an den Anfang der Schleife gesetzt.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Vielleicht gibt die ein oder andere Optimierungsmöglichkeit
grundsätzlich würde ich dir dazu raten, deine ganzen objekte und
deren bewegungen in einer Liste oder etwas ähnlichem zu verwalten,
und in einer einzigen hauptschleife dementsprechend flexibel
alle bewegungen durchzuführen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten