Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

RmbRT

Treue Seele

  • »RmbRT« ist der Autor dieses Themas

Beiträge: 169

Wohnort: Darmstadt

Beruf: Student

  • Private Nachricht senden

11

10.10.2010, 18:08

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    for ( ItTower = m_TowerList.begin (); ItTower != m_TowerList.end (); ++ItTower)
    {
        // Schuss-Timer aktualisieren
        ItTower->m_fShootTimer += g_pTimer->GetElapsed();

        for ( ItCreep = m_CreepList.begin (); ItCreep != m_CreepList.end (); ++ItCreep)
        {

            // Ist das Creep innerhalb der Reichweite des Towers?
            if(CX >= (TX - TR)          &&
               CX <= (TX + TR + 40.0f)  &&
               CY >= (TY - TR)          &&
               CY <= (TY + TR + 40.0f)  )
            {
                float dx = CX - TX;
                float dy = CY - CY;
                TA = atan_d( dx, dy );
                ItTower->m_pSpriteTower->m_pImage = rotozoomSurface(
                    g_pGame->m_pSpriteTower->m_pImage, TA, 1, 1);
}


}

}
"Dumm ist, wer dummes tut."

12

10.10.2010, 18:28

Soweit ich weis, dreht die SDL das ganze nur vom LinkenOberen Punkt aus. Da müsstest du es halt davor und danach so verschieben, dass es passt ;)

RmbRT

Treue Seele

  • »RmbRT« ist der Autor dieses Themas

Beiträge: 169

Wohnort: Darmstadt

Beruf: Student

  • Private Nachricht senden

13

10.10.2010, 18:35

Und wie bekomme ich den wert zum zurückverschieben?
getrect()->w/2 oder was?
"Dumm ist, wer dummes tut."

14

10.10.2010, 18:53

Also du hast im Prinzip 3 Möglihckeiten:
a) ich1994 ne PM schreiben, der hats erst letztens mit der SDL gelöst ist aber nich in jedem Thread hier unterwegs
b) Warten auf ne antwort oder Googlen
c) Probier mal:
Um die Hälfte der Größer Verschieben
Rotieren
Wieder um die Hälfte der Größe zurückverschieben
(bin mir aber nich ganz sicher ;) )

15

10.10.2010, 18:53

Ja so kannst du das machen.

  1. Surface verschieben um (-w/2|-h/2)
  2. rotieren
  3. Surface zurückschieben um (w/2|h/2)
Ok, E122 hats schon geschrieben. Probiers doch einfach mal aus. Nicht jede Kleinigkeit erfragen, du willst doch auch was lernen oder nich?! ;)

Gruß
SaRu_

16

10.10.2010, 19:26

SaRu: Sind die Vorzeichen nicht genau anderst herum ;) Also beim Erstenmal + und beim 2. mal -

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

17

10.10.2010, 21:14

Also wenn der Ursprung oben links ist, müsste man wohl auch zuerst in diese richtung verschieben (also -) und danach wieder zurück (+)

18

10.10.2010, 21:22

Ja genau, bei der SDL sitzt der Koordinaten-Ursprung oben links, daher ergibt sich diese Verschiebung.

Vielleicht kann ich es - besonders dir, RmbRT - noch verdeutlichen mit dieser Grafik:


(Link)


Beachte bitte, dass die Diagonale eines Rechtecks immer länger als die Seitenlängen des Rechtecks ist. (Hypotenuse) Daher kann es passieren, dass dein Sprite bei der Rotation breiter wird. Die Koordinaten der linken, oberen Ecke deines Sprites vor und nach der Drehung sind also meist nicht die gleichen. Willst du also dein Sprite zurückschieben, dann solltest du eine Verschiebung um genau die Strecke durchführen um die du auch beim ersten Mal verschoben hast. Nur mit anderem Vorzeichen. Sonst verrutscht dein Sprite. ;)

Hoffe das Hilft?!

Gruß
SaRu_

19

10.10.2010, 21:25

Ah, OK, Hatte vergessen, wo der Ursprung bei der SDL sitzt. Hatte heute genau das Selbe Problem in Javascript^^

ich1994

Treue Seele

Beiträge: 164

Wohnort: Erlangen(nähe Nuernberg)

Beruf: Bald Abiturient(kein job eig...)

  • Private Nachricht senden

20

10.10.2010, 21:30

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 if(angle)
{
SDL_Rect tempRect=m_Rect;//ein temporäres Rect wegen der neuen X und Y Coord's 
SDL_Surface *temp1=rotozoomSurface(m_pImage,static_cast(angle),1,0);//Hier das rotozoom
SDL_Surface *temp = SDL_DisplayFormat(temp1);//Siehe eine Zeile weiter unten
SDL_SetColorKey(temp,SDL_SRCCOLORKEY, SDL_MapRGB(temp->format, 255, 0, 255) );//Damit ColorKey Funktioniert 

//Zieht die Beiden Mitten voneinander ab. -> Unterschied zwischen der neuen X/Y Coord's und der alten X/Y Coord's
tempRect.x -= temp->w/2 - m_Rect.w/2;
tempRect.y -= temp->h/2 - m_Rect.h/2; 

SDL_FreeSurface(temp1);
SDL_BlitSurface (temp, NULL, m_pScreen, &tempRect);
SDL_FreeSurface(temp);
}



Hatte vor 2-4 Tagen das gleich Problem :D
SDL FTW!!!

MfG

ICH1994

P.S: E122 Hatte unrecht :lol: :lol: :lol:

EDIT: Wieso verschiebt er immer mein Code?????

EDIT2: Jetzt wird es langsam blöd :cursing:

EDIT3: So.. dann eben ohne Tag -.-

EDIT4: Liegt wohl am Browser.

Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »ich1994« (10.10.2010, 21:45)


Werbeanzeige