Gepostet: |
Sprites transformieren | ||||||||||
Hallo zusammen, scheint als ob ich hier Hilfe finden könnte :) Vorab: Ich benutze MS Visual C++ und das DirectX SDK Juni 2007 (und bin blutiger Noob^^) Ich versuche im Moment ein 2d Game zu erstellen(, bei dem bisher noch nicht so viel passiert). Ich möchte, dass sich ein Sprite (ein Typ, von dem man von oben herab sieht) sich mit dem Mauszeiger dreht. Also, wenn der Mauszeiger am rechten, oberen Rand ist, dass der Typ nach oben rechts guckt, wovon ich aber noch weit entfernt bin. Ich scheitere schon dabei, den Sprite an sich zu drehen. Wenn ich es per D3DXMATRIX versuche dreht sich nicht nur der eine Sprite, sondern alle Sprites, und das um den Centerpunkt. Dies geschieht allerdings auch mit den Sprites, die vor der Deklaration und Bekanntmachung... D3DXMATRIX matRotateZ; D3DXMatrixRotationZ(&matRotateZ, D3DXToRadian(30.0f)); //beispielsweise d3ddev->SetTransform(D3DTS_WORLD, &matRotateZ); ...gedrawt wurden. Ich hab auch schon versucht diese Drehung bekannt zugeben, den zu drehenden Sprite zu drawn und anschließend die Rotation wieder auf "0" zu setzen, was aber keinen Erfolg zeigte, da sich dann garnichts drehte :( . Jetzt hoffe ich hier Hilfe zu finden und danke schoeinmal für potentielle Antworten |
|||||||||||
Zum Seitenanfang | ICQ | ||||||||||
Gepostet: |
|||||||||||
Ich konnte das Problem nun selber lösen. // Texture being used is 70 by 70: D3DXVECTOR2 spriteCentre=D3DXVECTOR2(35.0f,35.0f); // Screen position of the sprite D3DXVECTOR2 trans=D3DXVECTOR2(shipx,shipy); // Rotate based on the position of the mouse float rotation=atan2(currentYMouse - shipy, currentXMouse - shipx); //CalcDegree(xMouse, yMouse) D3DXToRadian() atan2(currentYMouse, currentXMouse) // Build our matrix to rotate, scale and position our sprite D3DXMATRIX mat; // out, scaling centre, scaling rotation, scaling, rotation centre, rotation, translation D3DXMatrixTransformation2D(&mat,NULL,0.0,NULL,&spriteCentre,rotation,&trans); // Tell the sprite about the matrix d3dspt->SetTransform(&mat); // Draw the sprite left, top, right, bottom SetRect(&Part, 0, 0, 70, 70); //|0|//lol//|0|// d3dspt->Draw(TypTexture,&Part,NULL,NULL,0xFFFFFFFF); shipx und shipy sind die punkte um die sich das sprite drehen soll und auf denen das Sprite platziert ist. Danke, dass niemand antwortet XD |
|||||||||||
Zum Seitenanfang | ICQ | ||||||||||