Seite 1 von 2

programm anhalten

Verfasst: 06.07.2006 19:34
von Thomas
Hallo
Ich schreibe zurzeit an einem Spiel.
Ich habe ein Vollbildfenster erstellt (OpenScreen(...)).
Wie kann man in so einem Fenster das Programm anhalten, bis eine Taste gedrückt wurde?
Bei Windows Fenstern (OpenWindow(...)) nimmt man ja z.B. WaitWindowEvent.
Aber welchen Code verwendet man im VollbildModus?
Wenn ihr mir weiterhelfen könnt, schreibt mir Bitte eine E-Mail.
E-Mail-Adresse: obermeier.thomas@web.de
Vielen Dank
Thomas Obermeier :D

Verfasst: 06.07.2006 19:47
von ts-soft
Mit einer AnyKey-Procedure :mrgreen:

Code: Alles auswählen

Procedure AnyKey()
  Repeat
    FlipBuffers()
    
    If StartDrawing(ScreenOutput())
      DrawText(0, 0, "Press any key ;)")
      StopDrawing()
    EndIf
    
    ExamineKeyboard()
    If KeyboardPushed(#PB_Key_All)
      Break
    EndIf
  ForEver
EndProcedure

Verfasst: 06.07.2006 19:50
von Alves
Warum Email?

Wir können doch alle etwas davon erfahren!

Außerdem kannste da eine Procedure schreiben in der du in einer Schleife ein delay(0) wiederholst, bis die Pausenend Bedingung erfüllt ist, zB so:

Code: Alles auswählen

declare pause()
...
If KeyboardPushed(#pb_key_p)
  pause()
endif
...

procedure pause()
  repeat
  delay(0)
  until keyboardpushed()=#pb_key_p
endprocedure
So zB

Verfasst: 06.07.2006 20:32
von Kaeru Gaman
normalerweise macht man eine game-pause eher so, dass das game selber weiterläuft, aber alle aktionen ausgesetzt werden.

ich persönlich finde games sympatischer, bei denen man im pause-modus auch karte scrollen und einheitenbefehle erteilen kann.

das würde man also so lösen, dass man alle aufrufe von aktions-procedures wie einheiten bewegen, rohstoffe verbrauchen, bauaufträge weiterführen, etc. hinter eine abfrage setzt, ob nicht pausiert ist.
die aufrufe für karte darstellen, scroll-befehle, mauszeiger bewegen, etc. werden nicht abgefangen.
und natürlich durchläuft man die hauptschleife ganz normal mit tastatur und maus checken, buffer flippen etc.


@Alves

dein code wird sich hängen, weil du in der schleife das keyboard nicht mehr examinest...


btw:
dies ist ein forum, damit man öffentlich drüber spricht.
und deine email-adresse einfach irgendwo zu posten ist ungut, es gibt nämlich programme, die sämtlichen klartext im web nach email-adressen durchforsten.
wunder dich also nicht, wenn du bald werbung für viagra bekommst....

Verfasst: 06.07.2006 20:39
von MVXA
Ein derartiger Pausenmodus kann sich aber auf das Gameplay auswirken...

Verfasst: 06.07.2006 20:47
von Kaeru Gaman
wie meinst du das?

also, ich find die auswirkungen aufs gameplay eher positiv

grad zum üben bei nem neuen game find ich es praktisch,
auch im pausenmode befehle erteilen zu können,
wenn ich zum ersten mal dastehe und hundert einheiten in nem neuen game dastehn hab,
die alle koordiniert werden wollen.
klar, mit zunehmenden training sollte man sich das abgewöhnen,
und auch mal ganz geziehlt ohne pausen spielen,
auch um online-fähig zu werden (nicht das game, der spieler),
aber zum üben is sowas immer gut,
grad wenn man auch länger überlegen muss für die strategie,
weil man sich noch keine routine angeeignet hat.

ich finde, ich kann mich in games mit aktivem pausenmode früher online-games stellen, als ohne.

aber wie auch immer... auch in z.b. Siedler4, das keinen aktiven pausenmode hat, kann ich aber aus beobachtungen schließen, das die buffer-schleife weiterläuft.

Verfasst: 06.07.2006 20:58
von MVXA
Natürlich ist das ganz interessant, wenn es ein Spiel ist wo man mehrere
tausend kleine Figuren befehligen kann. Dann kann man sich in Ruhe mal
die Schlacht überschauen und sehen, wo noch was benötigt wird.

Aber wenn im Spiel jede einzelne Einheit fast wie ein Held zählt, dann
würde man es dem menschlichen Spieler etwas zu einfach mit diesen
Modus machen. WC3 ist dafür ein gutes Beispiel, denke ich.

Verfasst: 06.07.2006 21:04
von Kaeru Gaman
> WC3 ist dafür ein gutes Beispiel, denke ich.

jagut, da ist das schon eher so.

kann man bei WC3 scrollen im pausenmode? ich habs lang nimmer an gehabt.

also, games die komplett freezen find ich schon etwas blöd, wenigstens umsehen sollte man sich können.

bei Siedler4 kann man das "cheaten": wenn man den mausbutton für bewegen drückt, während man die pause einschaltet, kann man in der pause scrollen. deswegen kann ich auch aussagen, dass die buffer-schleife weiterläuft, auch wenn es eigentlich ne komplett-sperren-pause ist.

für irgendwelche ballergames ist es natürlich absolut unerheblich, aber ich persönlich würde auch dort die tastaturabfrage zum beenden der pause von der ganz normalen hauptschleife erledigen lassen.

Verfasst: 06.07.2006 21:10
von Alves
@ Kaeru

Muss ich in einer Prozedur Schleife das Keyboard auch testen?

Reicht das nicht, wenn ich die inner Main Schleife anfrage?

Verfasst: 06.07.2006 22:04
von Kaeru Gaman
is doch logisch. wie soll sich denn sonst der rückgabewert von KeyboardPushed() ändern können, wenn du das Keyboard nicht überprüfst, welchen zustand es hat?