Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Suche Ideen für Game Menü (bin bald am verzweifeln) (https://www.delphipraxis.net/15554-suche-ideen-fuer-game-menue-bin-bald-am-verzweifeln.html)

PhöniX 30. Jan 2004 18:39


Suche Ideen für Game Menü (bin bald am verzweifeln)
 
Hi...Ich hab in letzter Zeit viele Fragen über DelphiX und so gestellt..
Aber es hat alles nix gebracht. :wall: :wall: .Nun hab ich eine allgemeine Frage

:arrow: Wie/Womit macht ihr eure Menüs bei Spielen (an alle die, die Spiele proggen)
...

Ich will es mit DelphiX machen, hab aber keine Ahnung, wie man das alles macht. (das heißt doch, aber es hat alles kein zusammenhang UND ich will den Code verstehen und nicht nur kopieren) :wall: :gruebel:

citybreaker 30. Jan 2004 19:07

Re: Suche Ideen für Game Menü (bin bald am verzweifeln)
 
Warum muss das Menue den unbedingt in DelphiX sein?

XeRo 30. Jan 2004 19:20

Re: Suche Ideen für Game Menü (bin bald am verzweifeln)
 
Zitat:

Zitat von citybreaker
Warum muss das Menue den unbedingt in DelphiX sein?

ja, warum? Es ist doch anders viel einfacher, und den Code versteht man auch schneller :gruebel:

PhöniX 30. Jan 2004 19:32

Re: Suche Ideen für Game Menü (bin bald am verzweifeln)
 
es soll ein menü für ein spiel sein und da das ganze spiel mit delphiX ist, sollte das menü doch eigentlich auch in delphiX sein..

Igotcha 31. Jan 2004 01:06

Re: Suche Ideen für Game Menü (bin bald am verzweifeln)
 
Habe auch das gleiche Problem und noch keine befriedigende Lösung.

Ich nehme mal an, Du willst Dein Spiel im Vollbildmodus laufen lassen (wie ich auch) und da ists nun mal Essig mit VCL - Du mußt alles selber darstellen.

Mein Ansatz ist bisher ein Menu-Image darzustellen und z.B. Buttons durch Sprites zu realisieren - ist aber ein ziemlicher Aufwand mit (selbstdefiniertem) Mauscursor, dann Kollisionsabfrage, ob es ein Button-Sprite ist, dann welcher, ob der Mausknopf zusätzlich noch gedrückt ist, etc. etc.

Flogo 31. Jan 2004 09:29

Re: Suche Ideen für Game Menü (bin bald am verzweifeln)
 
Ich schließ mich euch beiden da an!
Hab das gleiche Problem. Habs mir bis jetzt aber auch so vorgestellt wie Igotcha (eigener Cursor mit Kollisionsabfrage hab ich eh drin)
Man muss halt immer das Item speichern mit dem der Cursor zuletzt kollidiert ist. Im onClick dann abrfragen und entsprechend reagieren.
Aber ein Problem wird es hier noch mit dem Text geben: zum Beispiel bei Spielständen, kann man den Namen des Button ja nicht schon vorher als Bild speichern.
cu
Flogo :hi:

Igotcha 31. Jan 2004 09:54

Re: Suche Ideen für Game Menü (bin bald am verzweifeln)
 
Zitat:

Zitat von Flogo
Ich schließ mich euch beiden da an!
Aber ein Problem wird es hier noch mit dem Text geben: zum Beispiel bei Spielständen, kann man den Namen des Button ja nicht schon vorher als Bild speichern.

Nö, aber Du kannst ja die Tastatur abfragen und den Buchstaben ausgeben ;-)

PhöniX 31. Jan 2004 09:58

Re: Suche Ideen für Game Menü (bin bald am verzweifeln)
 
tja..ich hab erstens noch kein vollbildmodus, weil es das erste spiel ist, was ich progge und außer dem voll tastaturbelegt (keine maus)...

Mein Problem ist, das ich das Menü nicht hinkrieg...
Wie macht ihr das??
mit Items und wenn ja wie...usw. usw..ich hab noch KEINEN ansatz

OregonGhost 31. Jan 2004 10:09

Re: Suche Ideen für Game Menü (bin bald am verzweifeln)
 
Ein einfacher Ansatz ist folgender:
Jedes Menuitem muss wenigstens aus seiner Boundingbox (einem TRect) und seiner Caption (einem string) bestehen. Jetzt kommen die einfach in ein Array, und wann immer die Maus sich bewegt (und insbesondere geklickt wird) überprüft man, über welcher Boundingbox sich die Maus befindet und reagiert entsprechend. Wo ist das Problem?

PhöniX 31. Jan 2004 10:14

Re: Suche Ideen für Game Menü (bin bald am verzweifeln)
 
Ich bin newbie und hab leider keine ahnung und...

Das Spiel ist OHEN maus NUR mit tastatur...

OregonGhost 31. Jan 2004 10:18

Re: Suche Ideen für Game Menü (bin bald am verzweifeln)
 
Find ich doof :-D
Maus muss im Hauptmenü sein, finde ich, aber das überlasse ich natürlich dir.
Mit Nur-Tastatur machst du's dir natürlich noch viel einfacher, denn jetzt musst du dir nur noch merken, welches Menuitem gerade den Fokus hat, und zeichnest dieses dementsprechend etwas anderes. Wenn der Spieler dann Eingabe drückt, hast du ja schon automatisch den richtigen Tastenindex.

Flogo 31. Jan 2004 10:46

Re: Suche Ideen für Game Menü (bin bald am verzweifeln)
 
Zitat:

Zitat von Igotcha
Nö, aber Du kannst ja die Tastatur abfragen und den Buchstaben ausgeben ;-)

Meinst du über Canvas.Textout?

Also wenn mal die ganzen Sachen zusammen fassen darf:

:arrow: Für jeden "Button" erstellt man ein (eventuell leeres) Bild
:arrow: Darauf wird die Caption ausgegeben
:arrow: Bei Maussteuerung erhält man das aktive Item über Kollisionen mit dem Mouse-Sprite
:arrow: Bei Tastatur wird zum Beispiel auf die Pfeil-hoch- Pfeil-runter-Tasten reagiert und immer das aktive Item gespeichert
:arrow: Man könnte immer beim Aktiven Item das Bild ändern (zB gleiches Bild mit rotem Rahmen drum oder leuchtend)
:arrow: Bei einem Klick bzw. Enter wird auf das aktive Item raegiert (Methode der MenüSprites?)

Stimmt das soweit?

Igotcha 31. Jan 2004 11:53

Re: Suche Ideen für Game Menü (bin bald am verzweifeln)
 
Hier noch ein anderer Weg für das Main-Menü meines Spiels. Ist ein Vollbild-Menü mit einer rotierende Münze als Cursor und Text für "Spiel", "Optionen", etc.

Über MouseMove fange ich erstmal die Koordinaten der Maus ab und ordne sie dem gewählten Menüpunkt zu:

Delphi-Quellcode:
procedure TfrmMain.DXDraw1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  MouseCursor.X := X;
  MouseCursor.Y := Y;

    if assigned(spCoin) AND (Gamestate=gsMenu) then
    begin
        if (Y>250) AND (Y<=300) then
        begin
          spCoin.Y:=250;
          iMenuselect:=1;
        end
        else if (Y>350) AND (Y<=400) then
        begin
          spCoin.Y:=350;
          iMenuSelect:=2;
        end
        else if (Y>450) AND (Y<=500) then
        begin
          spCoin.Y:=450;
          iMenuSelect:=3;
        end
        else if (Y>550) AND (Y<=600) then
        begin
          spCoin.Y:=550;
          iMenuSelect:=4;
        end
         else if (Y>650) AND (Y<=700) then
        begin
          spCoin.Y:=650;
          iMenuSelect:=5;
        end;
    end;
end;
Wenn die Maustaste gedrückt wird, "fade" ich die Hintergrundmusik aus, zerstöre den Münzen-Cursor und setze eine Variable, damit die "Menu.pas" weiß, was jetzt passieren soll:

Delphi-Quellcode:
procedure TfrmMain.DXDraw1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
    if (Assigned(spCoin)) AND (GameState=gsMenu) then
    begin
      if Button=mbleft then
          begin
          bFadeBGSound:=true;
          frmMain.DXWL1.Items.Find('menuok').Play(false);
          spCoin.Dead;
           DXSpriteENgine1.Dead;
          end;
    end;

    if Button=mbleft then
      bMBLEFT:=true
    else
      bMBLEFT:=false;
end;
In der Menu.pas passiert dann folgendes:

Delphi-Quellcode:
procedure doMenu;
begin
frmMain.DXIL2.Items[0].draw(frmMain.DXDraw1.Surface, 0, 0, 0);

frmMain.DXIL2.Items.Find('menu1').Draw(frmMain.DXDraw1.Surface, 350, 250, 0);
frmMain.DXIL2.Items.Find('menu2').Draw(frmMain.DXDraw1.Surface, 400, 350, 0);
frmMain.DXIL2.Items.Find('menu3').Draw(frmMain.DXDraw1.Surface, 450, 450, 0);
frmMain.DXIL2.Items.Find('menu4').Draw(frmMain.DXDraw1.Surface, 500, 550, 0);
frmMain.DXIL2.Items.Find('menu5').Draw(frmMain.DXDraw1.Surface, 350, 650, 0);

 with frmMain.DXDraw1.Surface.Canvas do
  begin
    Brush.Style := bsClear;
    Font.Color := clwhite;
    Font.Size := 12;
    Textout(0,0,inttostr(frmMain.DXWL1.Items.Find('introbeat').Volume));
    Textout(0,20,inttostr(iMenuSelect));
  end;

if bFadeBGSound=true then
begin
  if frmMain.DXWL1.Items.Find('introbeat').Volume>-2000 then
    frmMain.DXWL1.Items.Find('introbeat').Volume:=frmMain.DXWL1.Items.Find('introbeat').Volume-20
  else
  begin
    frmMain.DXWL1.Items.Find('introbeat').Stop;
    if iMenuSelect=1 then
      GameState:=gsGameInit
    else if iMenuSelect=4 then
      GameState:=gsCreditsInit
    else if iMenuSelect=5 then
    begin
      frmMain.DXTimer1.Enabled:=false;
      frmMain.Close;
    end;
  end;
end;
Dann wird die entsprechende "GameState"-Variable gesetzt, die wiederum im Timer-Event verarbeitet wird:

Delphi-Quellcode:
procedure TfrmMain.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
 try
    DXDraw1.Surface.Fill( clwhite );
    ProcessGamestate;

    if bShowCardSprite=false then
      CardSprite.Visible:=false;

    DXSpriteENgine1.Dead;
    DXSpriteEngine1.Move(2);
    DXSpriteEngine1.Draw;
    bmbleft:=false;

  except
    dxtimer1.Enabled:=false;
    messagedlg('An error has occurred',mterror,[mbok],0);
  end;
  dxdraw1.Flip;
end;
Und das passiert in "ProcessGamestate":

Delphi-Quellcode:
procedure TfrmMain.ProcessGamestate;
begin
 case GameState of
      gsInit   : doInit;
      gsStart  : doStart;
      gsIntro1   : doIntro1;
      gsMenuInit   : doMenuInit;
      gsMenu   : doMenu;
      gsGameInit : doGameInit;
      gsGame   : doGame;
      gsCreditsInit : doCreditsInit;
      gsCredits : doCredits;
  end;
end;
Wie gesagt, das ist supernervig umzusetzen, da ich mein Spiel im Vollbildmodus laufen lassen will und mich daher um jeden Mist selbst kümmern muß - man darf ja nicht vergessen, dass neben der reinen Anzeige des Menüs auch noch weitere Aktionen wie Musik abspielen, Cursor animieren, etc. weiter laufen sollen (bzw. müssen).

Gruß Kay

citybreaker 31. Jan 2004 11:54

Re: Suche Ideen für Game Menü (bin bald am verzweifeln)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab auch mal was gemacht. Exe Datei ist im Anhang wenn ihr wollt häng ich auch die Source dran.


Menue runter: a
Menue hoch: q

Flogo 31. Jan 2004 18:13

Re: Suche Ideen für Game Menü (bin bald am verzweifeln)
 
:thuimb:
Zitat:

Zitat von citybreaker
wenn ihr wollt häng ich auch die Source dran.

:roll: Ja! bitte, bitte! :roll:

citybreaker 31. Jan 2004 18:30

Re: Suche Ideen für Game Menü (bin bald am verzweifeln)
 
Liste der Anhänge anzeigen (Anzahl: 1)
xD Hier ist er.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz