code funzt, code funzt nicht?



  • Hi,

    ich stehe vor einem Logikproblem in dem ich kein Logikproblem sehe.

    Ich hab in SDL ein Sternenfeld gecodet was auch prima funzt! Es geht von links nach rechts. Funzt himmlich!

    Hier der code:

    void CStarfield::update(const int MsEllapsed)
    {
    	PUSH_FUNCTION
    
    		// One part of a secound
    	float PartOfSecond = static_cast<float>(MsEllapsed) / 1000.0f;
    
    	for (int i=0; i<NUM_STARS; ++i)
    	{
    		this->m_stars[i].m_x -= (PartOfSecond * this->m_stars[i].m_z / 25.5f * this->m_speed);
    
    		if (this->m_stars[i].m_x < 0.0f)
    		{
    			this->m_stars[i].m_x = 800.0f;
    			this->m_stars[i].m_y = static_cast<float>(rand() % 600);
    			this->m_stars[i].m_z = static_cast<float>(rand() % 256);
    		}
    	}
    
    	if (SDL_LockSurface (VIDEO.getBackBuffer()) == 0)
    	{
    		unsigned short pitch = VIDEO.getBackBuffer()->pitch / sizeof(unsigned short);
    
    		for (int i=0; i<NUM_STARS; ++i)
    		{
    			unsigned short color = SDL_MapRGB (VIDEO.getBackBuffer()->format, static_cast<unsigned char>(this->m_stars[i].m_z), static_cast<unsigned char>(this->m_stars[i].m_z), static_cast<unsigned char>(this->m_stars[i].m_z));
    
    			((unsigned short*)VIDEO.getBackBuffer()->pixels)[static_cast<unsigned long>(this->m_stars[i].m_y*pitch+this->m_stars[i].m_x)] = color;
    		}
    
    		SDL_UnlockSurface (VIDEO.getBackBuffer());
    	}
    
    	POP_FUNCTION
    }
    

    So jetzt wollte ich das Sternenfeld von oben nach unten moven lassen doch das war ein gewaltiger schuss in den Ofen! Alle Sterne (Punkte) gehen zu zufallspositionen obwohl sie das doch gar net sollten 😞 Kurz: es gibt nur flackern mit den Sternen...

    hier der code:

    void CStarfield::update(const int MsEllapsed)
    {
    	PUSH_FUNCTION
    
    		// One part of a secound
    	float PartOfSecond = static_cast<float>(MsEllapsed) / 1000.0f;
    
    	for (int i=0; i<NUM_STARS; ++i)
    	{
    			// geändert auf +Y
    		this->m_stars[i].m_y += (PartOfSecond * this->m_stars[i].m_z / 25.5f * this->m_speed);
    
    		if (this->m_stars[i].m_y > 600.0f) // auf Y geändert und >600
    		{
    			this->m_stars[i].m_x = static_cast<float>(rand() % 800); // geändert auf rand 800
    			this->m_stars[i].m_y = 0.0f; // so muss das sein
    			this->m_stars[i].m_z = static_cast<float>(rand() % 256);
    		}
    	}
    
    	if (SDL_LockSurface (VIDEO.getBackBuffer()) == 0)
    	{
    		unsigned short pitch = VIDEO.getBackBuffer()->pitch / sizeof(unsigned short);
    
    		for (int i=0; i<NUM_STARS; ++i)
    		{
    			unsigned short color = SDL_MapRGB (VIDEO.getBackBuffer()->format, static_cast<unsigned char>(this->m_stars[i].m_z), static_cast<unsigned char>(this->m_stars[i].m_z), static_cast<unsigned char>(this->m_stars[i].m_z));
    
    			((unsigned short*)VIDEO.getBackBuffer()->pixels)[static_cast<unsigned long>(this->m_stars[i].m_y*pitch+this->m_stars[i].m_x)] = color;
    		}
    
    		SDL_UnlockSurface (VIDEO.getBackBuffer());
    	}
    
    	POP_FUNCTION
    }
    

    ich verzweifle daran unbeschreiblich.... Ich weis einfach nicht wieso er in jedem frame jeden stern eine neue Position zuweist.... 😞



  • *push*

    ach leutz, kommt schon 😞



  • Das liegt wohl daran, dass dies das falsch Forum ist. Ich denke, du wirst bei Gelegenheit ins richtige Forum verschoben. Und dein Titel ist natürlich absoluter Mist. Wäre vielleicht hilfreicher, einen treffenderen Titel zu wählen.



  • ups, total übersehen...



  • Dieser Thread wurde von Moderator/in davie aus dem Forum C++ in das Forum Spiele-/Grafikprogrammierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Auch eine Möglichkeit als unregistrierter in dieses Forum zu gelangen. 😃



  • oje, hab ich doch glatt vergessen.. naja @OP, registrieren schadet nicht 😉



  • Tja und genau deswegen soll man eben von Anfang an auf copy & paste verzichten.

    Bye, TGGC (Der Riker ist zurück)


Anmelden zum Antworten