AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Rotation

Ein Thema von Basti · begonnen am 22. Mär 2003 · letzter Beitrag vom 23. Mär 2003
Antwort Antwort
Basti

Registriert seit: 27. Feb 2003
19 Beiträge
 
Delphi 4 Professional
 
#1

Rotation

  Alt 22. Mär 2003, 09:25
Hi,
wie ich unter den Tipps auf dieser Seite erfahren habe, kann man TImageSprites um ihre eigene Achse drehen lassen. Dies soll mit der Funktion: X :=X + Cos256(Angle);
die man unter die DoMove Methode einfügen soll, funktionieren. Leider bekomme ich hierbei eine Fehlermeldung, er kenne die Variable Angle nicht. Wenn ich diese deklariere und das Programm starte, dreht das TImageSprite sich nicht.
Was habe ich falsch gemacht
  Mit Zitat antworten Zitat
arnoldo

Registriert seit: 8. Dez 2002
Ort: Berlin
131 Beiträge
 
Delphi 7 Personal
 
#2
  Alt 22. Mär 2003, 09:33
Tach basti,

du musst TimagespriteEX benutzen (nicht timagesprite).
Den Sprite drehst Du dann mit [sprite].angle:=winkel;

arnoldo
  Mit Zitat antworten Zitat
Basti

Registriert seit: 27. Feb 2003
19 Beiträge
 
Delphi 4 Professional
 
#3
  Alt 22. Mär 2003, 10:56
Danke, das funktioniert so.
Allerdings entsteht dadurch ein neues Problem. Wenn das rotierende Bild wieder auf seiner Ursprungsposition ist (nach 256 Versetzungen), entstehen im Bild einige seltsame Linien, die da eigentlich nichts zu suchen haben. Weißt du, woran das liegen könnte
  Mit Zitat antworten Zitat
arnoldo

Registriert seit: 8. Dez 2002
Ort: Berlin
131 Beiträge
 
Delphi 7 Personal
 
#4
  Alt 22. Mär 2003, 10:59
Also sowas konnte ich noch nicht beobachten.
Du kannst ja wenn der Winkel 256 erreicht ist,
diesen wieder auf 0 setzen. vielleicht hilfts.
  Mit Zitat antworten Zitat
Basti

Registriert seit: 27. Feb 2003
19 Beiträge
 
Delphi 4 Professional
 
#5
  Alt 22. Mär 2003, 16:11
Das muss am Bild liegen. Ich erstell einfach ein neues. Aber ich habe ein weiteres Problem.
Diese Rotation brauch ich für ein Raumschiffspiel. Man soll mit dem Raumschiff Loopings fliegen können, wobei der Schuss immer von der gleichen Position des Raumschiffs abgefeuert werden soll. Wenn ich das Raumschiff nicht rotieren lasse, wäre das diese Position:

Laser.X := Raumschiff.X + Raumschiff.Width;
Laser.Y := Raumschiff.Y + (Raumschiff.Height div 2);

Wie kann ich diese Position auch nach der Rotation ermitteln (z.B bei Angle = 126)???

Gruß
Basti
  Mit Zitat antworten Zitat
Minz

Registriert seit: 19. Dez 2002
476 Beiträge
 
#6
  Alt 22. Mär 2003, 22:56
Also eigentlich soll sich deine Kanone ja auf einem Kreis bewegen richtig?

Du wirst dann noch ein Problem haben, du willst ja nicht nur die Position der Kanone auf dem Kreis haben, sondern du willst auch die Richtung haben, in die geschosse werden soll.

Ich denke am besten sind dafür Vektoren.

Aber frag mich nicht wie man einen Vektor um einen Grad dreht.
Aber wenn du danach suchst, wirst du bestimmt erfolgreich sein.

Anfangsvektor=Kanonenposition-RaumschiffMittelpunkt
Deine Kanonenposition hattest du ja schon bestimmt und den
RaumschiffMittelpunkt (oder SpriteMittelpunkt) sollte auch
kein Problem sein.

so jetzt gibts vielleicht ne Formel wie
NeuerVektor=Anfangsvektor*Sin(Winkel)
(ist natürlich Quatsch, ich kenn die Formel nicht)

aber vielleicht hilfts ja weiter. Mit dem neuen Vektor hast du
halt gleich die Schussrichtung.

Minz
  Mit Zitat antworten Zitat
Basti

Registriert seit: 27. Feb 2003
19 Beiträge
 
Delphi 4 Professional
 
#7
  Alt 23. Mär 2003, 15:02
Ich denke, dass zweite Problem, von dem du meinst dass ich es haben werde, habe ich bereits gelöst. Der Schuss des Raumschiffs fliegt in die gleiche Richtung, in die das Raumschiff fliegt.
Da habe ich einfach die selbe Flugprocedure benutzt:

X := X + cos256(Angle)*Flightspeed;
Y := Y + sin256(Angle)*Flightspeed;

Angle vom Schuss ist in diesem Fall der gleiche Winkel wie der vom Raumschiff. Mein Problem bleibt weiterhin der Startpunkt, und was genau meinst du mit den Vectoren?
  Mit Zitat antworten Zitat
Minz

Registriert seit: 19. Dez 2002
476 Beiträge
 
#8
  Alt 23. Mär 2003, 15:17
Vektoren sind ein mathematisches Konstrukt und werden
als Pfeile dargestellt.

in einem solchen Pfeil stecken zwei Informationen:
1. Richtung
2. Länge

Bei einem zweidimensionalen Vektor hat der Vektor 2 Werte, z.B. x,y
x=2
y=2
Die Länge des Pfeils könnte z.B. für die Geschwindigkeit stehen.
Sie wird einfach mit Pythagoras berechnet.
Länge=wurzel(x*x+y*y)


Wenn du dir in einem Koordinatenkreuz nun einen beliebigen Punkt wählst
und dann 2 in x-richtung und 2 in y-richtung gehst und die
Strecke durch einen Pfeil kennzeichnest, ist dein Vektor fertig.

wenn du diesen Vektor(2,2) nun um 1 Grad drehen könntest, und einen neuen Vektor aus der Formel bekämst, hättest du damit automatisch
die neue Position der Kanone.
  Mit Zitat antworten Zitat
Basti

Registriert seit: 27. Feb 2003
19 Beiträge
 
Delphi 4 Professional
 
#9
  Alt 23. Mär 2003, 20:24
Ich muss also eine Gerade berechnen, die vom Mittelpunkt des Raumschiffs ausgeht und den Punkt schneidet, von dem der Schuss abgefeuert wird?
  Mit Zitat antworten Zitat
Minz

Registriert seit: 19. Dez 2002
476 Beiträge
 
#10
  Alt 23. Mär 2003, 20:28
so ungefähr,
eigentlich endet die Gerade direkt in dem Punkt, in dem der Schuss
abgefeuert wird.
Nur mit der Gerade selber kannst du ja nix anfangen.
Aber wenn du Vektoren als Gerade bezeichnest schon eher
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz