Array zu langsam??
Übersicht

beginr |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wie kann man die verdammten beiträge löschen?? | ||
- Zuletzt bearbeitet von beginr am Fr, Apr 18, 2008 18:48, insgesamt 2-mal bearbeitet
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und der edit-button zu klein? ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@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. |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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![]() |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
beginr |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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
![]() 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. |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: Auf der ersten Seite habe ich einen Link gegeben, mit welchen Programm man die Mausaktualisierung erhöhen kann.
Das habe ich nicht gesehen ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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)? |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit 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.
Es fehlt also ein Cls ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group