Array zu langsam??

Übersicht BlitzBasic Allgemein

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

 

beginr

BeitragFr, Apr 18, 2008 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
@Tankbuster:

Zitat:
Ich weiß nicht was du hast o.0
Die Maus blinkt nicht, und es werden alle Pixel auf denen die Maus stand gezeichnet.


Also bei mir sieht das so aus:

weg isses Wink

Keine Ahnung ob mein Computer zu langsam ist... das nene ich jedenfalls nicht pixelgenau. Vielleicht kann ja mal jemand, bei dem es funktioniert, ein Bild hochladen.
  • Zuletzt bearbeitet von beginr am Fr, Apr 18, 2008 18:47, insgesamt einmal bearbeitet
 

beginr

BeitragFr, Apr 18, 2008 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
wie kann man die verdammten beiträge löschen??
  • Zuletzt bearbeitet von beginr am Fr, Apr 18, 2008 18:48, insgesamt 2-mal bearbeitet

BladeRunner

Moderator

BeitragFr, Apr 18, 2008 15:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Und der edit-button zu klein? Wink
Bitte benutz den das nächste mal.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Tankbuster

BeitragFr, Apr 18, 2008 17:28
Antworten mit Zitat
Benutzer-Profile anzeigen
beginr hat Folgendes geschrieben:
@Tankbuster:

Zitat:
Ich weiß nicht was du hast o.0
Die Maus blinkt nicht, und es werden alle Pixel auf denen die Maus stand gezeichnet.


Also bei mir sieht das so aus:

[bild]

Keine Ahnung ob mein Computer zu langsam ist... das nene ich jedenfalls nicht pixelgenau. Vielleicht kann ja mal jemand, bei dem es funktioniert, ein Bild hochladen.


Ich glaub du hast irgendwas am Code verändert, oder die Maus ganz schnell bewegt. So sieht das jedenfalls aus Wink
Twitter
Download Jewel Snake!
Windows|Android

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Apr 18, 2008 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
beginr, wenn dein Maustreiber - sagen wir mal - 100 mal in der Sekunde die neue Position errechnet und an Windows weiter leitet. Was glaubst du, wieviele Pixel du zu erkennen bekommst, wenn du die Maus schnell im Kreis bewegst? Man würde locker 5 ganze Kreise pro Sekunde mit der Maus bewegen können, dann würde jeder Kreis aus etwa 20 Pixeln bestehen. Vorausgesetzt, wenn Mausaktualisierung und die Programmaktualisierung syncron sind.

Wenn du Linen haben willst, dann musst du zwischen allen Punkten Line benutzen, oder dir eine Funktion schreiben, welche die Zwischenpositionen linear umrechnet. Zum Beispiel hat jedes vernünftige Malprogramm so ein Linear-Umrechnealgorithmus drin.
 

beginr

BeitragFr, Apr 18, 2008 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
@Tankbuster:
Natürlich habe ich die Maus schnell bewegt!!
Tut mir leid, es kann sein, dass ich oben nicht explizit darauf hingewiesen habe, aber hier noch mal ausführlich mein Problem:

Ich möchte die Bewegungen des Mauszeigers für eine bestimmte Zeit (ca. 250 - 750 ms lang) zwischenspeichern. Insbesondere sollen dabei schnelle Mausbewegungen ebenfals pixelgenau aufzeichnet werden. Später möchte ich die Mausbewegungen auswerten; ich möchte a) eine Linie auf den Bildschirm zeichnen (könnte auch in Echtzeit sein, muss aber nicht) und b) auswerten, ob ein bestimmtes Objekt getroffen wurde.

So, was ich jetzt noch einmal ausprobieren werde (nachdem ihr mein Missverständnis der BB-Hilfe geklärt habt, ist, die Linie in Echtzeit auf den Bildschirm zu zeichnen und ebenfalls in real-time zu prüfen, ob der Mauszeiger das Objekt getroffen hat. Melde mich dann wieder.

@bladerunner:
Sorry, ich hatte eben nicht so viel Zeit, eine kleinere Version des Bildes auf den Server zu laden. Werde es jetzt ganz rausnehmen.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Apr 18, 2008 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Noch einmal, dein Maustreiber liefert nicht mehr Informationen, als die die auch angezeigt werden. Du hast überhaupt keine Zwischenpositionen, da diese nicht an das System weitergeleitet werden. Du kannst solche Zwischenpositionen nur selbst berechnen. Wenn es nur ums einzeichnen geht, dann kannst du Line benutzen. Willst du aber jede Zwischenposition auf Kollision prüfen, dann musst du dir dafür wohl eine Funktion schreiben, die genau das macht. Es nützt alles andere nichts. Es wird auch nichts bringen, dein Programm auf 1000 FPS zu laufen. Du kannst sicherlich solche Funktionen auch hier im Form finden. Dazu einfach mal nach ''Linenalgorithmus'' oder ''Linen AND zeichnen'' suchen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

beginr

BeitragFr, Apr 18, 2008 19:34
Antworten mit Zitat
Benutzer-Profile anzeigen
hectic hat Folgendes geschrieben:
Noch einmal, dein Maustreiber liefert nicht mehr Informationen, als die die auch angezeigt werden. Du hast überhaupt keine Zwischenpositionen, da diese nicht an das System weitergeleitet werden. Du kannst solche Zwischenpositionen nur selbst berechnen. Wenn es nur ums einzeichnen geht, dann kannst du Line benutzen. Willst du aber jede Zwischenposition auf Kollision prüfen, dann musst du dir dafür wohl eine Funktion schreiben, die genau das macht. Es nützt alles andere nichts. Es wird auch nichts bringen, dein Programm auf 1000 FPS zu laufen. Du kannst sicherlich solche Funktionen auch hier im Form finden. Dazu einfach mal nach ''Linenalgorithmus'' oder ''Linen AND zeichnen'' suchen.


Sorry, irgendwie haben sich unsere Beiträge überschnitten.

Gibt es wirklich absolut keine Möglichkeit, die Frequenz der Maus/des Treibers aus BB heraus zu erhöhen. Wenn nicht: Du hast oben geschrieben, es gibt dazu Programme. Welche? Natürlich weiß ich, wie ich die Zwischenpunkte errechnen kann. Aber das liefert nicht das richtige Resultat! Wenn ich einen schnellen Bogen mit der Maus mache und nur die Endpunkte aufgezeichnet werden, dann wird das Ergebnis nicht ein bisschen, sondern sehr stark verfälscht.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Apr 19, 2008 0:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Auf der ersten Seite habe ich einen Link gegeben, mit welchen Programm man die Mausaktualisierung erhöhen kann. Jedoch wird es nicht sonderlich nützen, da dieses dann nur auf deinem System der Fall wäre.

Du kannst aber die Zwischenschritte über eine Spline -Kurve ausrechnen. Doch halte ich so eine Genauigkeit für überzogen in einem Game. Zumindest für solche Sachen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

beginr

BeitragSa, Apr 19, 2008 13:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Auf der ersten Seite habe ich einen Link gegeben, mit welchen Programm man die Mausaktualisierung erhöhen kann.


Das habe ich nicht gesehen Embarassed Du hast auch nur geschrieben, dass man damit die Mausrate auf dem System abrufen kann:

Zitat:
Wenn ihr wissen wollt, wie schnell eurer Maustreiber die Mausposition updatet, so ladet euch doch einfach den mouse rate checker (über ''download'' gehen) runter.


...egal.

Zitat:
Jedoch wird es nicht sonderlich nützen, da dieses dann nur auf deinem System der Fall wäre.


Stimmt. Ich habe jetzt doch die Version mit Line und nachträglichem Berechnen der Zwischenpositionen genommen. Geht wohl nicht anders.
 

beginr

BeitragSa, Apr 19, 2008 13:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Tut mir leid, aber es läuft immer noch nicht! Und Blitz verhält sich sehr merkwürdig:

Wenn ich folgenden Code laufen lasse, funktioniert alles perfekt.

Code: [AUSKLAPPEN]
Graphics 1024,768,16,2
SetBuffer BackBuffer()
Dim Mouse(1000,2)
Time = MilliSecs()
Mouse(Z,1) = MouseX()
Mouse(Z,2) = MouseY()
Repeat
   If MouseXSpeed() <> 0 Then
    Z = Z + 1
    Mouse(Z,1) = MouseX()
    Mouse(Z,2) = MouseY()
    Line Mouse(Z-1,1),Mouse(Z-1,2),Mouse(Z,1),Mouse(Z,2)
    Flip
   EndIf
Until MilliSecs() > (Time + 5000)
End


Ich habe die Pixel im Array, zum Auswerten, die Linien werden ausgegeben, alles OK (der untere Teil des Fensters wird wegen der Titelleiste abgeschnitten, aber egal).

Aber wenn ich das ganze im Vollbildmodus laufen lasse, etwa so:

Code: [AUSKLAPPEN]
Graphics 1024,768,16,1
SetBuffer BackBuffer()
Dim Mouse(1000,2)
Time = MilliSecs()
Mouse(Z,1) = MouseX()
Mouse(Z,2) = MouseY()
Repeat
   If MouseXSpeed() <> 0 Then
    Z = Z + 1
    Mouse(Z,1) = MouseX()
    Mouse(Z,2) = MouseY()
    Line Mouse(Z-1,1),Mouse(Z-1,2),Mouse(Z,1),Mouse(Z,2)
    Flip
   EndIf
Until MilliSecs() > (Time + 5000)
End


Ich habe nur eine Zahl für den Vollbildmodus angepasst!! Und nun flimmert es und plötzlich werden die Linien gestrichelt usw.!


    - Wieso ist das so?
    - Wie kann ich das verhindern (im Vollbildmodus sehen manche Spiele einfach besser aus)?

BladeRunner

Moderator

BeitragSa, Apr 19, 2008 14:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Bitte vermeide in Zukunft Doppelpostings, sonst werd ich schliessen. Nutz statt dessen den Edit-button.
Danke.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Apr 19, 2008 16:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Es flimmert, weil unter Fenstermodus der Backbuffer zum Frontbuffer kopiert wird. Das heisst, der Backbuffer bleibt erhalten, während im Vollbildmodus der Backbuffer mit dem Frontbuffer vertauscht wird. Dieses ist schneller, da nur der Pointer geändert wird, und nicht der ganze Bildinhalt kopiert werden muß. Mit anderen Worten, mit Flip tauschst du die beiden Buffer (Front- Backbuffer) miteinander und zeichnest abwechselnd in diese ein, wo du diese auch abwechselnd anzeigen lässt.

Es fehlt also ein Cls und das zeichnen der ganzen Linie jedem Durchlauf um ein neues.

Es fehlt auch eine Arrayverwaltung, die berhindert, dass es zu einem Überlaf kommt. Dazu kannst du eben ein ''Datenkarussel'' benutzen, oder du machst eine skallierbare Abfrage der Daten.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

beginr

BeitragSo, Apr 20, 2008 12:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Es fehlt auch eine Arrayverwaltung, die verhindert, dass es zu einem Überlauf kommt. Dazu kannst du eben ein ''Datenkarussell'' benutzen, oder du machst eine skalierbare Abfrage der Daten.


Ein Array(1000,2) kan offensichtlich bei 5 s Speicherung alles bis 200 FPS abfangen. Da ein "normaler" Maustreiber laut deiner Aussage höchstens auf 100 FPS komt, habe ich mich für die unkompliziertere Lösung entschieden.

Zitat:
Es flimmert, weil unter Fenstermodus der Backbuffer zum Frontbuffer kopiert wird. Das heisst, der Backbuffer bleibt erhalten, während im Vollbildmodus der Backbuffer mit dem Frontbuffer vertauscht wird. Dieses ist schneller, da nur der Pointer geändert wird, und nicht der ganze Bildinhalt kopiert werden muß. Mit anderen Worten, mit Flip tauschst du die beiden Buffer (Front- Backbuffer) miteinander und zeichnest abwechselnd in diese ein, wo du diese auch abwechselnd anzeigen lässt.


Danke für den Tip, obwohl ich sagen muss, dass ich diese Regelung ziemlich unlogisch finde.

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group