|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Bolle52 Mini JLI'ler
Anmeldedatum: 13.07.2007 Beiträge: 24
Medaillen: Keine
|
Verfasst am: 02.09.2007, 17:20 Titel: sternenfeld |
|
|
hi @ all
wie muss ich den quellcode optimieren, damit die sterne sich auf der x-achse bewegen?
<edit TLoP>
Bitte in Zukunft cpp-Tags verwenden. Ist übersichtlicher.
</edit TLoP>
CPP: | void CStar::CalcNewPos()
{
// x, y-Koordinate zufällig festlegen
m_x = static_cast<float>((rand()%SCR_WIDTH));
m_y = static_cast<float>((rand()%SCR_HEIGHT));
// Geschwindigkeit bestimmen
m_dy = static_cast<float>(rand()%MAX_SPEED + 1);
m_dy /= 10.0f;
m_Length = static_cast<int>(m_dy) + 1;
// Position/Laenge auf Bildschirmhoehe beschraenken
if(m_y + m_Length >= SCR_HEIGHT)
{
m_y = static_cast<float>(m_Length);
}
}
void CStar::Move(void)
{
// y-Koordinate erhoehen
m_y += m_dy;
// testen, ob sich der Stern ausserhalb
// des Bildschirmes befindet
if(m_y + m_Length >= SCR_HEIGHT)
{
// wenn ja, neue Koordinaten berechnen
CalcNewPos();
// und y-Koordinate anpassen
m_y = m_dy;
}
}
void CStar::Draw(D3DCOLOR* Pixels, int Pitch)
{
// Position fuer den Stern berechnen
int index = static_cast<int>(m_y) * Pitch + static_cast<int>(m_x);
// Laenge beruecksichtigen und Farbe waehlen
for(int i=0;i<m_Length;i++)
{
Pixels[(index + i * Pitch)] = StarColors[i];
}
}
|
danke schon mal für antworten |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 02.09.2007, 19:26 Titel: |
|
|
Blöde Antwort, aber: Lese aufmerksam das Buch und versuche zu verstehen, was dort beschrieben ist. Dann schau dir den Quellcode an, und verstehe, was er tut. Dann ist es für dich ein leichtes, die Aufgabe zu lösen.
Kleiner Tip: Im Quelcode wird die X Position geändert. Würde man die y Position ändern, bewegten sich die Sterne nicht mehr entlang der y sondern der x Richtung. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Bolle52 Mini JLI'ler
Anmeldedatum: 13.07.2007 Beiträge: 24
Medaillen: Keine
|
Verfasst am: 02.09.2007, 19:44 Titel: |
|
|
das habe ich schon mitbekommen, das sich die sterne entlang der y-achse bewegen. ich habe ach schon ein bisschen mit den code gespielt, um zu sehen, welche veränderung was bewirkt. bisher habe ich es geschafft, das sich die sterne in einem bestimmten bereich nur bewegen, aber nicht, das sie sich entlang der x.achse bewegen. |
|
Nach oben |
|
|
Xibus Junior JLI'ler
Alter: 33 Anmeldedatum: 18.02.2007 Beiträge: 91 Wohnort: Deutschland -> NRW -> OWL -> Paderborn -> Salzkotten Medaillen: Keine
|
Verfasst am: 02.09.2007, 20:06 Titel: |
|
|
Ich hatte damals die klasse so umgeschrieben das ich in grad angeben kann in welche richtung die sterne sich bewegen. und wenn ich das geschafft hab das kann das nit sehr schwer sein...
Tip: mach dir klar was index und pitch bedeutet. wenn dus dann nit schafftst
ansonsten:
Star.h
CPP: | class CStar
{
public:
// Konstruktor
CStar(void);
// Stern bewegen
void Move(void);
// Berechne neue Position des Sterns
void CalcNewPos(void);
// Ausgabe des Sterns
void Draw(D3DCOLOR* Pixels, int Pitch);
protected:
float m_x; // x-Koordinate des Sterns
float m_y; // y-Koordinate des Sterns
float m_dx; // Bewegung in y-Richtung
int m_Length; // Laenge des Schweifs
};
|
Star.cpp
CPP: | CStar::CStar()
{
m_x = 0;
m_y = 0;
m_dx = 0;
m_Length = 0;
// initiale Position fuer den Stern berechnen
CalcNewPos();
}
void CStar::CalcNewPos()
{
// x, y-Koordinate zufällig festlegen
m_x = static_cast<float>((rand()%SCR_WIDTH));
m_y = static_cast<float>((rand()%SCR_HEIGHT));
// Geschwindigkeit bestimmen
m_dx = static_cast<float>(rand()%MAX_SPEED + 1);
m_dx /= 10.0f;
m_Length = static_cast<int>(m_dx) + 1;
// Position/Laenge auf Bildschirmhoehe beschraenken
if(m_x + m_Length >= SCR_WIDTH)
{
m_x = static_cast<float>(m_Length);
}
}
void CStar::Move(void)
{
// y-Koordinate erhoehen
m_x += m_dx;
// testen, ob sich der Stern ausserhalb
// des Bildschirmes befindet
if(m_x + m_Length >= SCR_WIDTH)
{
// wenn ja, neue Koordinaten berechnen
CalcNewPos();
// und y-Koordinate anpassen
m_x = m_dx;
}
}
void CStar::Draw(D3DCOLOR* Pixels, int Pitch)
{
// Position fuer den Stern berechnen
int index = static_cast<int>(m_y) * Pitch + static_cast<int>(m_x);
// Laenge beruecksichtigen und Farbe waehlen
for(int i=0;i<m_Length;i++)
{
Pixels[(index + i)] = StarColors[i];
}
}
|
_________________ Signatur
|
|
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
|