 |
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 |
Sarevok
Anmeldungsdatum: 23.03.2011 Beiträge: 2
|
Verfasst am: 23.03.2011, 17:43 Titel: Geschwindigkeitsproblem |
|
|
Hallo
Ich bin ein absoluter Neuling im Bereich Freebasic und habe, obgleich ich mich mit Hardware und Assembler, sowie SQL und HTML gut auskenne, bisher noch nicht mit einer "richtigen" Programmiersprache gearbeitet.
Bei meinen ersten Gehversuchen in diesem Bereich hatte ich bisher keine Schwierigkeiten und habe dann aus Interesse einmal folgendes kurzes Programm geschrieben:
screen 20,32
dim x as integer
dim y as integer
do
getmouse x,y
pset (x,y)
loop
end
Dieses Programm fragt die Mausposition ab und setzt dann dort einen Punkt.
Allerdings wird daraus bei schnellen Mausbewegungen keine Linie sondern nur einzelne Punkte.
Ich würde gerne wissen woran das liegt denn mein PC müsste auf jeden Fall schnell genug sein um da eine durchgehende Linie zeichnen zu können
Liegt es an schlechten Algorithmen des Compilers oder wo sonst ist das Problem?
Über Hilfe würde Ich mich sehr freuen. |
|
Nach oben |
|
 |
XOR
Anmeldungsdatum: 23.07.2010 Beiträge: 161
|
Verfasst am: 23.03.2011, 19:23 Titel: |
|
|
Das ist immer so mit der Maus.
Mache es So:
Code: | screen 20,32
dim as integer x, y, xAlt, yAlt
do
xAlt = x
yAlt = y
getmouse x,y
line(x,y)-(xAlt,yAlt)
loop until multikey(1) 'Mit ESC abbrechen
end |
nicht getestet, sollte aber gehen, hier wird eine linie zwischen altem und der neuen Mausposition gezeichnet, so das keine luecken entstehen. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 23.03.2011, 19:32 Titel: |
|
|
Hallo,
hier noch ein ausführlicherer Vorschlag:
Code: | dim as integer x1=-1, x2, y1, y2
screen 20,32
Print "Maus bewegen und dann beliebige Taste zum Beenden druecken."
setmouse (511,383) 'Startposition der Maus setzen
do
getmouse x2, y2
if (x2 >= 0) AndAlso (y2 >= 0) AndAlso ((x2 <> x1) OrElse (y2 <> y1)) then
'-> Es handelt sich um ein gueltiges Koordinatenpaar (=Maus im Fenster),
' da x2 >= 0 und y2 >= 0
'-> Die Mausposition hat sich seit dem letzten GETMOUSE veraendert, d.h.
' wir muessen etwas zeichnen, da (x1,y1) <> (x2,y2)
'-> Hinweis: "ANDALSO" ist && in C, waehrend "AND" einem & entspricht.
if (x1 >= 0) then 'Gibt es eine vorherige Koordinate oder ist es die erste?
line (x1, y1)-(x2, y2) 'Es gibt eine vorherige -> Linie zeichnen
else
pset (x2, y2) 'Keine vorherige -> nur einen Punkt zeichnen
end if
x1 = x2
y1 = y2
end if
sleep 1 'CPU-Auslastung reduzieren
loop until inkey <> "" 'Ausfuehren bis Tastendruck erfolgt
end |
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
Sarevok
Anmeldungsdatum: 23.03.2011 Beiträge: 2
|
Verfasst am: 23.03.2011, 19:34 Titel: |
|
|
Es funktioniert, vielen Dank für Eure schnelle Hilfe.
Heißt das es liegt an dem Befehl getmouse weswegen es sonst nicht funktioniert? |
|
Nach oben |
|
 |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 23.03.2011, 19:50 Titel: |
|
|
sebastian, soweit ich weiß, ist AND statt ANDALSO (und analog OR statt ORELSE) bei vergleichen schneller.
jedes ANDALSO führt nen vergleich und nen sprung aus; ORELSE genauso.
das macht dann, genau dann und nur dann sinn, wenn du meinst:
Code: |
if bedingung1 ANDALSO zeitraubende_funktion1() then
|
RND ist genau an der schwelle zwischen zeitraubend und nicht zeitraubend, das macht keinen riesigen unterschied.
bei vergleichen ist AND aber besser. weil nur EIN vergleich, und viele (schnelle!) logische operationen ausgeführt werden
IMHO und IIRC  _________________ 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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 23.03.2011, 20:04 Titel: |
|
|
Flo hat Folgendes geschrieben: | sebastian, soweit ich weiß, ist AND statt ANDALSO (und analog OR statt ORELSE) bei vergleichen schneller. | Also bei sowas würde ich doch lieber den Optimierer arbeiten lassen (ok, geht in FB nicht, aber ganz allgemein). Es ist schon wesentlich nachvollziehbarer, wenn man AndAlso hinschreibt. Zudem bin ich mir sicher, dass x86 da irgendwelchen kranken Opcodes hat, die AndAlso genau so schnell machen (Vergleich + Sprung in einem Befehl oder so irgendwas in der Art müsste ja klappen) _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 23.03.2011, 20:50 Titel: |
|
|
echt, andalso ist lesbarer als ein reines "and"?
ich finde, das macht keinen allzugroßen unterschied; ist wohl geschmackssache (wobei ich auch && anschaulich finde )
soweit ich weiß, ist das ARM, aber nicht x86, das die "vergleiche-und-springe"-befehle in einem befehl hat
generell habe ich aber mal einen test gemacht, bei dem rausgekommen ist, dass gerade bei "normalen" vergleichen (also keinen funktionsaufrufen) AND signifikant (2x bis 3x) schneller ist als ANDALSO; allerdings bei fb0.17 _________________ 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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 23.03.2011, 20:56 Titel: |
|
|
Flo hat Folgendes geschrieben: | echt, andalso ist lesbarer als ein reines "and"?
ich finde, das macht keinen allzugroßen unterschied; ist wohl geschmackssache (wobei ich auch && anschaulich finde ) |
Das war jetzt nicht auf die tasächliche Lesbarkeit des Codes bezogen (da bevorzuge ich eh && ), sondern auf die semantische Nachvollziehbarkeit. And ist halt eigentlich eine Bitweise kombination. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
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.
|
|