JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Probleme mit Spriteposition nach Skallierung - komm nicht we

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
m_maty
Mini JLI'ler



Anmeldedatum: 12.08.2003
Beiträge: 24
Wohnort: bei Koblenz
Medaillen: Keine

BeitragVerfasst am: 19.09.2006, 20:51    Titel: Probleme mit Spriteposition nach Skallierung - komm nicht we Antworten mit Zitat

hi,

ich habe ein Problem bei der 2D Kollisionserkennung Kap. 25

wenn ich mein Sprite mit m_vScale verkleiner/vergrösser bekomm ich das Rechteck nicht richtig errechnet, hab schon alles versucht aber der x, y wert ist immer verschoben (es liegt nicht an meiner draw funktion - (getestet)) Bekomme die Formel nicht umgeschrieben (mir gehts da nur um die neue D3DXVECTOR2 m_vPosition.

ich benöteige ja nur einfach eine neue x und y Position (D3DXVECTOR2 m_vPosition) wenn sich der Skalierungswert m_vScale ändert. aber irgendwie kann ich mit zB, m_vPosition * m_vScale oder ähnlichen die korrekte Position des Sprites nach skallierung nicht errechnen. (ich teste das rect auch immer mit drübergelegtem gezeichneten rect - aber das ist immer verschoben Sad (ausser bei scall. 1.0f )

mein letzter versuch, das sprite rect ist auch wieder etwas verschoben vom x y startpunkt,
Die Grösse des Rect hab ich einfach * skallierungswert genommen das ging (h,w) aber das andre will nicht Sad
CPP:
//Liefert die aktuelle Spriteposition als CPoint   
CPoint CAnimSprite::GetAktPosition_CPoint()
{

   CPoint poSprite;

   float r = ((float)m_Width *  m_vScale.x) + m_vPosition.x;
   float b = ((float)m_Height * m_vScale.y) + m_vPosition.y;   

   poSprite.x = (int)r;
   poSprite.y = (int)b;

   return poSprite;
}
[/cpp]

kann mir jemand vileicht helfen ?

Grüsse, Maty Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 19.09.2006, 21:47    Titel: Antworten mit Zitat

m_VScale beschreibt doch die Scalierung des Sprites im Mittelpunkt oder?

Dann:

CPP:
CPoint CAnimSprite::GetAktPosition_CPoint()
{

   CPoint poSprite;

   poSprite.x = (int)m_vPosition.x;
   poSprite.y = (int)m_vPosition.y;

   return poSprite;
}


Mehr sollt das nicht sein, ist aber die Scalierung abhängig von zB dem 0,0 Punkt des Sprites ist der Mittelpunkt deines skalierten Sprites so:

CPP:
CPoint CAnimSprite::GetAktPosition_CPoint()
{
   CPoint poSprite;

   float r = ((float)m_Width *  m_vScale.x)*0.5f + m_vPosition.x;
   float b = ((float)m_Height * m_vScale.y)*0.5f + m_vPosition.y;   

   poSprite.x = (int)r;
   poSprite.y = (int)b;

   return poSprite;
}

_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
m_maty
Mini JLI'ler



Anmeldedatum: 12.08.2003
Beiträge: 24
Wohnort: bei Koblenz
Medaillen: Keine

BeitragVerfasst am: 20.09.2006, 09:17    Titel: Antworten mit Zitat

danke Fallen,

ja die Skallierung macht directx immer vom mittelpunkt aus, deshalb ändert sich auch immer die sichtbare x, y position des spirits nach der scalierung. die x ,y position die er zum zeicnen nimmt bleibt dabei ja immer noch die alte - nur an der stelle ist das sprite ja nach der verkleinerung gar nicht mehr sichtbar - und genau das ist das problem.

dein erster code geht nicht da er ja auch keine skalierung berücksichtigt , der 2. Code funktioniert nur wenn m_vScale den Wert 0.5f besitzt, bei zb. 0.3f verschiebt sich der CPoint nach oben links Sad

Nun dachte ich mal den 0.5f mit dem m_vScale tauschen, aber das ging auch nicht :
CPP:
CPoint CAnimSprite::GetAktPosition_CPoint()
{
   CPoint poSprite;
 //float r = ((float)m_Width *  m_vScale.x)*0.5f + m_vPosition.x;
 //float b = ((float)m_Height * m_vScale.y)*0.5f + m_vPosition.y;

   float r = ((float)m_Width *  m_vScale.x)* m_vScale.x + m_vPosition.x;
   float b = ((float)m_Height * m_vScale.y)* m_vScale.y + m_vPosition.y;   

    poSprite.x = (int)r;
    poSprite.y = (int)b;

   return poSprite;
}

(m_Height und m_Width enthält übrigens die orginal Höhe und Breite vor der Skalierung)



sieht vileicht einfach aus aber es klappt irgendwie nicht Sad
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
m_maty
Mini JLI'ler



Anmeldedatum: 12.08.2003
Beiträge: 24
Wohnort: bei Koblenz
Medaillen: Keine

BeitragVerfasst am: 20.09.2006, 10:55    Titel: Antworten mit Zitat

so habs nun doch gelöst Smile :
CPP:
//Liefert die aktuelle Spriteposition als CPoint   
CPoint CAnimSprite::GetAktPosition_CPoint()
{
   CPoint poSprite;

   float r = ((float)m_Width - GetSprite_CRect().right) /2;
   float b = ((float)m_Height - GetSprite_CRect().bottom)/2;   

    poSprite.x = (int)m_vPosition.x + r;
    poSprite.y = (int)m_vPosition.y + b;

   return poSprite;
}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 20.09.2006, 11:13    Titel: Antworten mit Zitat

sollte m_Width nicht das selbe sein wie GetSprite_CRect().right?
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
m_maty
Mini JLI'ler



Anmeldedatum: 12.08.2003
Beiträge: 24
Wohnort: bei Koblenz
Medaillen: Keine

BeitragVerfasst am: 20.09.2006, 11:30    Titel: Antworten mit Zitat

nein den GetSprite_CRect().right liefert mir die höhe/weite des neu skalierten Sprite-CRect (m_Width enthielt den alten Wert).
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 -> DirectX, OpenGL 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