AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Suche Ideen für Game Menü (bin bald am verzweifeln)
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von PhöniX · begonnen am 30. Jan 2004 · letzter Beitrag vom 31. Jan 2004
Antwort Antwort
Seite 2 von 2     12   
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#11

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

  Alt 31. Jan 2004, 10:18
Find ich doof
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.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von Flogo
Flogo

Registriert seit: 24. Mär 2003
Ort: Freiburg im Breisgau
317 Beiträge
 
Delphi 7 Professional
 
#12

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

  Alt 31. Jan 2004, 10:46
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:

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

Stimmt das soweit?
If one coincidence can occur, then another coincidence can occur. And if one coincidence happens to occur just after another coincidence, then that is just a coincidence.
DNA

www.Anyxist.de
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#13

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

  Alt 31. Jan 2004, 11:53
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
  Mit Zitat antworten Zitat
citybreaker
(Gast)

n/a Beiträge
 
#14

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

  Alt 31. Jan 2004, 11:54
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
Angehängte Dateien
Dateityp: zip project1_324.zip (154,6 KB, 29x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Flogo
Flogo

Registriert seit: 24. Mär 2003
Ort: Freiburg im Breisgau
317 Beiträge
 
Delphi 7 Professional
 
#15

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

  Alt 31. Jan 2004, 18:13

Zitat von citybreaker:
wenn ihr wollt häng ich auch die Source dran.
Ja! bitte, bitte!
If one coincidence can occur, then another coincidence can occur. And if one coincidence happens to occur just after another coincidence, then that is just a coincidence.
DNA

www.Anyxist.de
  Mit Zitat antworten Zitat
citybreaker
(Gast)

n/a Beiträge
 
#16

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

  Alt 31. Jan 2004, 18:30
xD Hier ist er.
Angehängte Dateien
Dateityp: zip menue.zip (16,6 KB, 25x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz