Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Bild um einen Vektor verschieben

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 03.09.2012, 21:45    Titel: Bild um einen Vektor verschieben Antworten mit Zitat

Hi lächeln

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 03.09.2012, 22:08    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
schildron



Anmeldungsdatum: 25.08.2008
Beiträge: 86

BeitragVerfasst am: 04.09.2012, 06:47    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 04.09.2012, 12:48    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 04.09.2012, 16:42    Titel: Antworten mit Zitat

@Jojo
Ich nutze OpenB3D für X-tfb, da gibt es schon eine Funktion, um Objekte auf einem Vektor zu verschieben. zwinkern
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. neutral

Ich versuche es mal mit schildrons Methode, danke.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz