|
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: 43 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: 35 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
|