 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 03.09.2012, 21:45 Titel: Bild um einen Vektor verschieben |
|
|
Hi
Ich suche eine Möglichkeit, ein Bild um einen Vektor auf den x,y Koordinaten zu verschieben. In etwa so:
Code: | Do
Put (x,y),img,Trans
Move(img,120,340)
Loop
Sub Move(image As Any Ptr, vx As Integer, vy As Integer)
x=vx
y=vy
End Sub |
Allerdings soll das Bild natürlich nicht einfach von einem Punkt auf einen anderen gesetzt werden(wie in meinem Beispiel), sondern es soll langsam dorthin verschoben werden. Dummerweise weiß ich nicht, wie ich das anstellen soll. Könnt ihr mir da weiter helfen? |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 03.09.2012, 22:08 Titel: |
|
|
Ich bin ehrlich gesagt immer wieder über die Unterschiede zwischen Threads wie diesem und deiner Projektvorstellung erstaunt, für die du eigentlich das alles schon wissen solltest (wenn du den Code denn selbst geschrieben hast und das auf den Screenshots nicht einfach nur Hintergrund-Bitmaps sind).
Wie wäre es mit einer zeitbasierten Animation? Startpunkt merken, Zeitpunkt merken, zu dem die Animation gestartet wurde, und dann immer wieder den Timer abfragen, wie viel Zeit seitdem vergangen ist und z.B. linear zwischen Start- und Endpunkt interpolieren (also in etwa x = startX + progress * (endX - startX), wobei progress der Fortschritt auf einer Skala von 0 bis 1 ist).
Das kann man auch prima objektorientiert realisieren, indem man z.B. eine Kopie des zu bewegenden Objekts erstellt und diese als Referenz für die Animation nimmt und dann zwischen dem alten Objektzustand und dem neuen Objektzustand (Zustand ist in dem Fall nur die Position, kann aber auch andere Dinge wie Farbe beinhalten) interpoliert. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
schildron
Anmeldungsdatum: 25.08.2008 Beiträge: 86
|
Verfasst am: 04.09.2012, 06:47 Titel: |
|
|
Du hast einen Startpunkt und einen Endpunkt.
Für eine gleichmäßige Bewegung muss du dir den Einheitsvektor zwischen den Beiden Punkten berechnen:
Vektor = Endpunkt-Startpunkt
Berechnung des Einheitsvektors:
Einheitsvektor = Vektor / Betrag des Vektors
Das kann man auch aufschlüsseln, um mit nicht-Vektor werten zu arbeiten
EinheitVekX = (x/√(x^2 + y^2))
EinheitVekY = (y/√(x^2 + y^2))
Die eigentliche Bewegung erzeugst du mit:
NeuerStandpunkt = AlterStandpunkt*Geschwindigkeit*vergangenerZeitseitletztdemFrame |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 04.09.2012, 12:48 Titel: |
|
|
schildron hat Folgendes geschrieben: | vergangenerZeitseitletztdemFrame |
Frame-unabhängige Zeitmessung ist eine ganz schlechte Idee und sehr unpräzise. Es ist sinnvoller, solche Dinge framebasiert zu berechnen (also immer x mal pro Sekunde), und wenn zu viel Zeit zwischen zwei Frames vergangen ist, einfach die Berechnung mehrmals durchführen. Und das ganze natürlich noch unabhängig in einem eigenen Thread, nicht im Grafikthread oder sonstwo, wo andere komplizierte Berechnungen durchgeführt werden. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 04.09.2012, 16:42 Titel: |
|
|
@Jojo
Ich nutze OpenB3D für X-tfb, da gibt es schon eine Funktion, um Objekte auf einem Vektor zu verschieben.
Der Code ist selbst geschrieben und das sind keine Bitmaps. Für X-tfb ist auch nicht viel Wissen nötig.
Man schreibt ein einfaches Spiel, packt eine hübsche Grafik drauf und jeder hält es für unglaublich kompliziert.
Ich versuche es mal mit schildrons Methode, danke. |
|
Nach oben |
|
 |
|
|
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.
|
|