D3D Crosshair Problem

02/14/2011 20:40 germanhacker#1
Hallo, ich bins mal wieder =D

Ich wollte ein D3D Crosshair machen, das funzt auch bis auf die DrawCircle und die DrawLine Funktion :/
Bei denen crasht das game immer :(

Hier die Funktionen:

Code:
void DrawCircle(int X, int Y, int radius, int numSides, DWORD Color) 
{
	D3DXVECTOR2 Line[128]; 
	float Step = PI * 2.0 / numSides; 
	int Count = 0; 
	for (float a=0; a < PI*2.0; a += Step) 
	{ 
		float X1 = radius * cos(a) + X; 
		float Y1 = radius * sin(a) + Y; 
		float X2 = radius * cos(a+Step) + X; 
		float Y2 = radius * sin(a+Step) + Y; 
		Line[Count].x = X1; 
		Line[Count].y = Y1; 
		Line[Count+1].x = X2; 
		Line[Count+1].y = Y2; 
		Count += 2; 
	} 
	pLine->Begin(); 
	pLine->Draw(Line,Count,Color); 
	pLine->End(); 
}
void DrawLine(float x, float y, float x2, float y2, float width, DWORD color)
{
    D3DXVECTOR2 vLine[2];
    pLine->SetWidth( width );
    pLine->SetAntialias( false );
    pLine->SetGLLines( true );
    vLine[0].x = x;
    vLine[0].y = y;
    vLine[1].x = x2;
    vLine[1].y = y2;
    pLine->Begin();
    pLine->Draw( vLine, 2, color );
    pLine->End();
}
Ich hab schon ausgetestet, nur einen kreis und nur einen strich zeichnen zu lassen, aber bei beidem stürzt das game ab. Ich schätz mal in beiden Funktionen ist der selbe Fehler vorhanden :S
02/14/2011 21:04 P-a-i-n#2
Denke du machst wieder den selben Fehler wie im letzten Thread wo dir Smith viel gesagt hat

Deklaration

Code:
ID3DXLine   *pLine;
bool Init = false;
Code:
void MeineInit(LPDIRECT3DDEVICE9 pDevice)
{

		if(pLine   == NULL) D3DXCreateLine  ( pDevice, &pLine );
		Init= true;

}
In die Endscene
Code:
	if(!Init )MeineInit(pDevice);
kleiner Trick für zeichnen der Linie das sie gleich in der Mitte ist :D

Das in die Deklaration
Code:
D3DVIEWPORT9 Viewport;

Das in die EndScene
Code:
	
        float Bildx = (float)Viewport.Width / 2 ;
	float Bildy = (float)Viewport.Height / 2 ;
	pDevice->GetViewport(&Viewport);

		DrawLine(Bildx - 20, Bildy, Bildx + 20, Bildy, 2,  D3DCOLOR_ARGB( 255, 255, 000, 000 ));
Und schon hast du eine schöne horizontale Linie in der mitte, nicht das du alles mit den integern machen willst. :)
02/14/2011 21:34 germanhacker#3
man danke für die schnelle Hilfe ! Klappt jetzt. Hab mir schon gedacht, dass sich wieder son kleiner fehler eingeschlichen hat.

Und danke für den kleinen Tipp, um die Linie gleich in der mitte zu haben !
02/14/2011 21:42 P-a-i-n#4
Das geht mehr darum ich denke mal du willst es für Games nutzen.
Also holste dir dir die Auflösung weil sie immer unterschiedlich ist, wenn es mit z.B 400x400 ist ja die Mitte 200x200 aber nu spielt einer das Game auf 1200x800 auflösung da kannste dir vorstellen wo die Linie sonst gezeichnet werden würde. :)

Also geht man von der mitte aus und nicht vom linken oberen Rad und beim Kreis auch aufpassen die numSides da auch aufpassen am besten immer 4er schritte eintragen ;)
Das auf jeder Seite dann ein neuer Fangpunkt gemacht wird also z.B 4 oder 8 oder 12 oder 16 u.s.w ;) dann wird er auch richtig Rund.
02/14/2011 21:59 germanhacker#5
ja jetzt ist es auch bei cod4 in der mitte cool x)