| 
			
				|  | JLI Spieleprogrammierung 
 
 |  
 
	
		| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |  
		| Autor | Nachricht |  
		| Maxim Senior JLI'ler
 
 
 
 Anmeldedatum: 28.03.2004
 Beiträge: 249
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 05.06.2004, 18:22    Titel: Menü-Tutorial |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| HotAcid Super JLI'ler
 
  
 Alter: 44
 Anmeldedatum: 04.08.2002
 Beiträge: 372
 Wohnort: Berlin
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 05.06.2004, 18:33    Titel: |   |  
				| 
 |  
				|  	  | 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 |  |  
		|  |  
		| PeaceKiller JLI Master
 
  
 Alter: 36
 Anmeldedatum: 28.11.2002
 Beiträge: 970
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 05.06.2004, 19:36    Titel: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| Maxim Senior JLI'ler
 
 
 
 Anmeldedatum: 28.03.2004
 Beiträge: 249
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 07.06.2004, 13:55    Titel: |   |  
				| 
 |  
				| Ich hab die Vorschläge noch nicht ausprobiert aber trotzdem Danke. Jetzt hab ich wieder was zu tun
  !!! |  |  
		| Nach oben |  |  
		|  |  
		|  |  
  
	| 
 
 | 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
 |