Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
0oFreako0
Anmeldungsdatum: 17.12.2011 Beiträge: 114
|
Verfasst am: 17.04.2012, 13:18 Titel: Pixelbewegung per Winkel? |
|
|
Hi ich hätte da mal eine Frage an euch und zwar.
Ich hab mir auf die schnelle diesen code gebastelt.
Code: |
#Include "fbgfx.bi"
ScreenRes 320,240
Dim x As Double = 10
Dim y As Double = 10
Dim go_x As Integer = 100
Dim go_y As Integer = 100
Dim As Integer xm, ym, buttons, Ergebnis
Do
Ergebnis = GetMouse (xm, ym, , buttons)
If buttons And 1 Then
go_x = xm
go_y = ym
EndIf
If x < go_x Then x += 1
If x > go_x Then x -= 1
If y < go_y Then y += 1
If y > go_y Then y -= 1
Cls
Draw String (0,0),Str (xm) & " " & Str(ym)
Circle (x,y),5
Sleep 1
Loop Until InKey = "q"
end |
Dieser ist jetzt nur QUICK AND DIRTY also nix mit backbuffer oder screenlock...
Der Kreis bewegt sich ja immer zum Mausklick bin aber halt wie ein Kran anhand der X und Y Pfade.
Wie ist es möglich per WInkelfunktionen es hinzubekommen das er sie exakt ansteuert ohne den ausgleich mit X und Y zu berücksichtigen also nicht wie ein Krahn sich zu bewegen? |
|
Nach oben |
|
 |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 17.04.2012, 13:37 Titel: |
|
|
wenn du es unbedingt mit winkelfunktionen machen willst (willst du nicht!), dann würdest du atn/atn2 (ich weiß nicht ob fb einen atn2 hat) auf die steigung (delta_y/delta_x) anwenden wollen, um den winkel zu erhalten; anschließend würdest du cosinus und sinus anwenden wollen, um anhand des winkels die teilgeschwindigkeiten für x- und y- zu erhalten.
was du aber wirklich willst, ist folgendes:
du willst den abstand berechnen mittels sqr(delta_x^2 + delta_y^2) (delta_foo ist foo_neu - foo_alt). dann willst du pro schleifendurchlauf um delta_x / abstand * irgendwas, delta_y / abstand * irgendwas (dasselbe irgendwas!) bewegen. achtung, du wirst gleitkommazahlen brauchen, momentan benutzt du ints. _________________ MFG
Flo
Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich. |
|
Nach oben |
|
 |
0oFreako0
Anmeldungsdatum: 17.12.2011 Beiträge: 114
|
Verfasst am: 17.04.2012, 17:40 Titel: |
|
|
Glaub das 2. Spricht mich mehr an.
Auch wenn ich noch nicht richtig verstehe was genau ich machen muss.
Hätte noch auf die schnelle eine andere Frage.
Wenn ich mit GET einen ScreenTeil in einen buffer einlesen lasse ist dies ja kein problem. Aber wenn ich einen buffer von einem imagecreate mit get holen will und einen teil in meinem Zielpuffer kopieren will geht es nicht?
Aber in der FBHelp steht das es funzen müsste |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 17.04.2012, 18:07 Titel: |
|
|
Befehlsreferenz hat Folgendes geschrieben: | PUT überträgt Daten (einen Bildausschnitt) aus einem Puffer auf den Bildschirm oder in einen anderen Puffer. Die Datenquelle ist vom selben Format, wie es bei GET (Grafik) verwendet wird. |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
0oFreako0
Anmeldungsdatum: 17.12.2011 Beiträge: 114
|
Verfasst am: 17.04.2012, 19:55 Titel: |
|
|
Ja aber wie kann ich von einem buffer mit get aus lesen also ein bestimmten bereich ohne das pic vorher auf den screen zu bringen und diesen abschnitt in einen neuen buffer kopieren |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 17.04.2012, 20:13 Titel: |
|
|
Code: | GET quellpuffer, (startX, startY)-(endX, endY), neuerPuffer |
_________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
0oFreako0
Anmeldungsdatum: 17.12.2011 Beiträge: 114
|
Verfasst am: 18.04.2012, 08:26 Titel: |
|
|
Zitat: | GET quellpuffer, (startX, startY)-(endX, endY), neuerPuffer |
Klappt irgentwie bei mir net....  |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 18.04.2012, 09:20 Titel: |
|
|
Hier
http://www.freebasic-portal.de/befehlsreferenz/imagecreate-307.html
findest du ein gutes Beispiel (unten auf der Seite).
Code: | ...
Get Img, (0, 0)-(31, 31), Cut
... |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
0oFreako0
Anmeldungsdatum: 17.12.2011 Beiträge: 114
|
Verfasst am: 18.04.2012, 20:03 Titel: |
|
|
Frag mich warum das hier dann net funzen will
Code: |
ScreenRes 320,240,32
Type Tstripe
gfx As Byte Ptr
End Type
Dim b As Integer = 50
Dim h as Integer = 50
Dim img As Byte Ptr
img = ImageCreate(b,h,32)
Line img,(0,0)-(b,h),RGB(255,0,0),bf
Dim stripe(h) As Tstripe
For i As Integer = 0 To h
stripe(i).gfx = ImageCreate(50,1,32)
Get img, (0,i)-(b,i),stripe(i).gfx
Next i
For i As Integer = 0 To h
Put (0,i),stripe(i).gfx
Next i
Sleep
End
|
|
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 18.04.2012, 20:38 Titel: |
|
|
Es fängt damit an, dass dein Buffer 50 Pixel breit ist, also der x-Wert von 0 bis 49 reicht. Du willst aber bis 50 auslesen. Damit greifst du auf nicht erlaubten Bereich zu, was zum Absturz führt. Bei der Höhe ist es dann letztendlich noch einmal dasselbe. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
|