JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=c258c3a5a1f61b8336ff8d598b72f341Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Menü-Tutorial

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Maxim
Senior JLI'ler



Anmeldedatum: 28.03.2004
Beiträge: 249

Medaillen: Keine

BeitragVerfasst am: 05.06.2004, 18:22    Titel: Menü-Tutorial Antworten mit Zitat

Abend!
Ich möchte mein Spielchen mit Menü ausstaten, weis aber nicht wie das
funktioniern soll.
Kennt jemand ein guten Tutorial(Deutsch) dafür?
Danke.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 05.06.2004, 18:33    Titel: Antworten mit Zitat

Code:

int aktuell = 0;
string eintraege[] = {"Menue","start","optionen","exit"}
int Anzahl_eintraege = 4;

// Wird in der Spelschleife aufgerufen,
// ruft je nach Zustand die entsprechende Funktion auf
void show()
{
     switch(aktuell)
     {
         case 0: ShowMenue(); break;
         case 1: ShowGame(); break;
         case 2: ShowOptions(); break;
         default: exit(0);
     }
}

void showMenue()
{
   // hier kann dann tolle Grafik etc... rein
    for(unsigned int i=0;i<Anzahl_eintraege; i++)
    {
        cout << eintraege[i] << endl;
     }
}

...


void KeyboardInput(int taste)
{
     if(aktuell == 0)
   {
       if(taste == hoch)  aktuell = (aktuell++) % 4;
       if(taste == runter)  aktuell = (aktuell--) % 4;
   }
}

_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
PeaceKiller
JLI Master


Alter: 35
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 05.06.2004, 19:36    Titel: Antworten mit Zitat

Hier mein Vorschlag. (benützt die Klasse CDirect3D und eine leicht abgeänderte Version von CSprite aus dem Buch)

Header:
Code:
#include "Sprite.h"
#include "Direct3D.h"

#ifndef _Button_
#define _Button_

class CButton : public CSprite
{
   public:
      // zurückgeben ob der Button angeklickt wurde und Animation dementsprechend ändern
      bool GetState(bool MouseClick);

      // den Button zeichnen
      void Draw(void);

      // initialisieren
      void SetSettings(CDirect3D* Direct3DClass, char* Name);
      
      // Die Mausposition festlegn
      bool SetMousePosition(int MouseX, int MouseY);

      // den Button animieren
      void Animate(void);

   protected:

      CDirect3D* m_Direct3DClass;
      char* m_Name;
      int m_MouseX;
      int m_MouseY;
      bool LastStatus;
};

#endif


Body:
Code:
#include "Button.h"

bool CButton::GetState(bool MouseClick)
{
   bool Clicked = false;

   //Prüfen ob der Mauszeiger über dem Button ist
   if(m_MouseX <= m_vPosition.x + m_CollisionBox.right
   && m_MouseX >= m_vPosition.x + m_CollisionBox.left
   && m_MouseY >= m_vPosition.y + m_CollisionBox.top
   && m_MouseY <= m_vPosition.y + m_CollisionBox.bottom)
   {
      Clicked = MouseClick;
      m_CurrentAnimation = A_HIT;
   }
   return Clicked;
}

void CButton::Draw(void)
{
   float m_TempRot = m_Rotation * D3DX_PI / 180.0f;

    // Sprite in der passenden Animationsstufe zeichnen
    m_lpSprite->Draw(m_vAnimationSequences[m_CurrentAnimation][m_CurrentImage],
                     0,
                     &m_vScale,
                     &m_vRotationCenter,
                     m_TempRot,
                     &m_vPosition,
                     D3DCOLOR_ARGB(255,255,255,255));

   int x,y;
   x = m_vPosition.x + m_CollisionBox.left + ((m_vPosition.x + m_CollisionBox.right) - (m_vPosition.x + m_CollisionBox.left)) / 2;
   y = m_vPosition.y + m_CollisionBox.top + ((m_vPosition.x + m_CollisionBox.bottom) - (m_vPosition.x + m_CollisionBox.top)) / 2;
   //Den Namen mitten auf den Button zeichnen
   //m_Direct3DClass->DrawText(m_Name,m_vPosition.x + m_Width / 2,m_vPosition.y + m_Height / 2 - 8 ,D3DCOLOR_ARGB(255,255,255,255),TA_CENTER);
   m_Direct3DClass->DrawText(m_Name,x,y - 8 ,D3DCOLOR_ARGB(255,255,255,255),TA_CENTER);
}

// initialisieren
void CButton::SetSettings(CDirect3D* Direct3DClass, char* Name)
{
   m_Direct3DClass = Direct3DClass;
   m_Name = Name;
}

bool CButton::SetMousePosition(int MouseX, int MouseY)
{
   m_MouseX = MouseX;
   m_MouseY = MouseY;

   bool GetClicked = false;

   //Prüfen ob der Mauszeiger über dem Button ist
   if(m_MouseX <= m_vPosition.x + m_CollisionBox.right
   && m_MouseX >= m_vPosition.x + m_CollisionBox.left
   && m_MouseY >= m_vPosition.y + m_CollisionBox.top
   && m_MouseY <= m_vPosition.y + m_CollisionBox.bottom)
   {
      m_CurrentAnimation = A_HIT;
      if(!LastStatus)
      {
         GetClicked = true;
      }
      LastStatus = true;
   }
   else
   {
      m_CurrentAnimation = A_STAND;
      if(LastStatus)
      {
         GetClicked = false;
      }
      LastStatus = false;
   }
   return GetClicked;
}

void CButton::Animate(void)
{
   int Framerate = m_ResManager->GetFramerate();
   
    // m_CurrentImage in Abhängigkeit der Framerate erhöhen
    m_CurrentImage += m_AnimationSpeed / (float)Framerate;

   // mit der Anzeige wieder beim ersten Bild beginnen
    if(m_CurrentImage >= m_vAnimationSequences[m_CurrentAnimation].size())
    {
        m_CurrentImage = 0;
    }
}

_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Maxim
Senior JLI'ler



Anmeldedatum: 28.03.2004
Beiträge: 249

Medaillen: Keine

BeitragVerfasst am: 07.06.2004, 13:55    Titel: Antworten mit Zitat

Ich hab die Vorschläge noch nicht ausprobiert aber trotzdem Danke.
Jetzt hab ich wieder was zu tun Twisted Evil !!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum