|  |  | 
|  | 
|  | 
| - Seite 1 - | 
| 
 
 | 
|  funkheld
 | | Hallo, guten Tag. Ich habe ein kombinationsproblem mit der Maus.
 
 Ich habe über dem Schwungrad von meinem Trimmrad eine optische Mausplatine befestigt(5 Euro-Maus). Die Befestigung ist so, das, wenn ich trete, die Mausposition von y-0 nach y-Max geht.
 
 Wie kann man es machen, das die Maus zb auf y=0 gesetzt wird und bei y>500 ein Zähler gezählt wird und die Maus dann wieder auf y=0 gesetzt wird.
 Dies dann in einer Schleife abläuft.
 
 Diese kombination bekomme ich  nicht hin, weil die Maus bei einer bestimmten Geschwindigkeit überfordert ist, sie zählt dann nicht mehr weiter.
 Mit "sleep 1" geht es auch nicht.
 
 Woran liegt das.
 Ich compiliere mit XPSE.
 KompilierenMarkierenSeparieren
  {$cleq}
Def @Getcursorpos(1) !"user32","GetCursorPos"
Def @Setcursorpos(2) !"USER32","SetCursorPos"
Struct Mauskoordinaten = X&,Y&
Declare Xpos&,Ypos&,Curpos#,zaehler&
Windowstyle 31
Windowtitle "Cursorposition ermitteln"
Window 200,0 - 440,440
@Setcursorpos (100,0)
While 0 = 0
    Sleep 5
    Dim Curpos#,Mauskoordinaten
    @Getcursorpos(Curpos#)
    Xpos& = Curpos#.X&
    Ypos& = Curpos#.Y&
    if Ypos& > 500
        @Setcursorpos (100,0)
        zaehler&=zaehler&+1
    endif
    Dispose Curpos#
    Drawtext 0,0,"Zähler: " + zaehler& + @Space$(30)
Endwhile
Danke.
 
 Gruss
 | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
| « Dieser Beitrag wurde als Lösung gekennzeichnet. » | 
|  | 
| - Seite 1 - | 
| 
 
 | 
|  | | @Funkheld: Hab Dir hier mal was die Strecke misst... sowas? 
 Herunterladen
 KompilierenMarkierenSeparieren
  {$cleq}
Windowstyle 31
Windowtitle "Cursorposition ermitteln"
Window 500,500
setcursorpos((winRight-winLeft)\2+winLeft,(winBottom-winTop)\2+winTop)
var modified&=0
var strecke&=0
var my2MousePositions&=globalAlloc(gPTR,16)
getCursorPos(my2MousePositions&)
rtlMoveMemory(my2MousePositions&+8,my2MousePositions&,8)
while 1
    waitinput 10
    getCursorPos(my2MousePositions&)
    settext hWnd,"X:"+str$(long(my2MousePositions&,0))+" Y:"+str$(long(my2MousePositions&,4))+" Strecke:"+str$(strecke&)
    add strecke&,abs(long(my2MousePositions&,0)-long(my2MousePositions&,8))+abs(long(my2MousePositions&,4)-long(my2MousePositions&,12))
    if long(my2MousePositions&,0) > winRight
        long my2MousePositions&,0=winLeft
        inc modified&
    endif
    if long(my2MousePositions&,0) < winLeft
        long my2MousePositions&,0=winRight
        inc modified&
    endif
    if long(my2MousePositions&,4) < winTop
        long my2MousePositions&,4=winBottom
        inc modified&
    endif
    if long(my2MousePositions&,4) > winBottom
        long my2MousePositions&,4=winTop
        inc modified&
    endif
    if modified&
        modified&=0
        setCursorPos(long(my2MousePositions&,0),long(my2MousePositions&,4))
    endif
    rtlMoveMemory(my2MousePositions&+8,my2MousePositions&,8)
wend
globalFree(my2MousePositions&)
end
Wenn Du die add strecke Zeile dahin änderst:
 KompilierenMarkierenSeparieren
 (also ohne abs), dann wird die rückwärtsgefahrene Strecke auch von der Streckenlängeadd strecke&,(long(my2MousePositions&,0)-long(my2MousePositions&,8))+(long(my2MousePositions&,4)-long(my2MousePositions&,12))
subtrahiert statt zur Streckenlänge addiert.
 
 PS: Bei XPSE brauchst die ganzen Standard-APIs nicht deklarieren und es ist
 sogar sinnvoller es dann auch nicht zu tun da die Aufrufe in deutlich schnellere
 Calls umgewandelt werden.
 | 
 
  | 
|  | 
|  |  | 
|  | 
|  | 
| 
 
 
 | 
|  | 
|  |  | 
|  | 
| - Seite 2 - | 
| 
 
 | 
|  | | Auf meinem Computer kann ich die Maus so schnell bewegen dass sogar 20 km/h 
 angezeigt werden. Wie groß ist Dein hWnd? Kann es sein das die von Dir genutzte
 
 Maus einfach nicht schneller erfassen kann?
 | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
|  funkheld
 | | Ich habe jetzt mal :  add tme&,200 eingestellt. Jetzt funktioniert es über 15Km/h.
 
 Welchen Einfluss hat das eigentlich?
 
 Gruss
 | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
|  | | Nach wievielen Millisekunden die Grafikprozedur ablaufen soll - 
 bei 100 also 10 mal pro Sekunde und bei 200 5 mal pro Sekunde.
 | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  |  | 
|  | 
| - Seite 3 - | 
| 
 
 | 
|  | 
|  funkheld
 | | Warum erhöht sich dann die Geschwindigkeit? Ist da irgendein Einfluss drin, wenn ich 200 eingebe?
 
 Wie errechnest du die Geshwindigkeit?
 
 Gruss
 | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
|  | | Na es gibt doch strecke& und alle X ms merke ich in tmp& strecke& und damit ist klar wieviel strecke in der Zeit gemacht wurde. Wenn Du nur 5 mal statt 10 mal pro
 Sekunde rechnest dann kann doppelt so viel Strecke in der Zeit gemacht werden aber
 die Kalkulation dürfte dann nicht mehr stimmen da auf 100 ms abgestimmt.
 
 Wenn Du alle 200 statt 100 ms rechnest dann müsstest Geschwindigkeit durch 2 nehmen.
 | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
|  funkheld
 | | Ach so...., danke für den Hinweiss. 
 Eine Grafische spielerei:
 Du hast doch schon viele Sachen in Opengl programmiert.
 Ich möchte mal eine Geländeplatte ohne Höhen und Tiefen mit Spritebäumen unendlich bewegen, je nach dem wie schnell man in die Pedale tritt.
 
 Wie kann man das realiseren ?
 
 Gruss
 peter
 | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
|  | | Ich würde empfehlen das erstmal separat von diesem Programm hier zu realisieren und 
 das in einem eigenen Thema zu behandeln.
 | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
|  funkheld
 | | Hallo, guten Tag. Ich habe ein Programm, wo sich ein Ogl-Sprite je nach Tretgeschwindikeit von unten nach oben bewegt, bis zu der Geschwindigkeit wo das Dateneinlesen der Lasermaus aussetzt.
 Die Steigerung der Geschwindigkeit ist nicht so deutlich erkennbar beim Sprite.
 Wie kann man es hier jetzt im Programm pro Zeiteiheit so messen, das beim schnelleren Treten eine deutliche erkennbare  Bewegung des Sprites erkennbar ist.
 Es kommt jetzt nicht auf die genaue Geschwindigkeit an, sondern es kommt jetzt auf die Bewegung des Sprites an.
 
 Danke.
 
 Gruss
 KompilierenMarkierenSeparieren
  {$cleq}
declare hWin&,hintergrpic&,vordergrpic&
declare ende&,winkel!,groesse&,dib&,array&
declare bild_auto&,tex.auto&
declare bmi#,ogl_rgb#
declare x1!,y1!,dx!,dy!
declare bereich#
Dim Bereich#, 16
Def &GL_BGR $80E0
DEF CreateDIB(2) !"dib","CreateDIB"
DEF FreeDIB(1) !"dib","FreeDIB"
DEF DrawDIB(4) !"dib","DrawDIB"
DEF CloneDIB(1) !"dib","CloneDIB"
dib&=usedll("dib.dll")
hintergrpic& = create("hNewPic", 400,700,rgb(255,255,0))
vordergrpic& = create("hNewPic", 400,700,rgb(255,255,0))
bild_auto& = create("hNewPic", 128,128,rgb(255,255,0))
array&=CreateDIB(128,128)
groesse&=128*128*4
dim ogl_rgb#,groesse&
Window 20,20-800,800
Cls @RGB(220,220,220)
hWin& = @Create("text", %hWnd, "Test1", 10, 10, 128,128)
oGL("Init", hwin&, 0,0, 0, 0)
oGL("PosMode", 1)
ogl("glReadBuffer",~GL_Back)
tex.auto&=oGL("LoadTextureBMP","data\\auto.bmp",1)
drawglscene
ende&=1
winkel!=90
dx!=100
dy!=600
WHILE ende&
    getCursorPos(bereich#)
    if long(bereich#,4) > 700
        setCursorPos(100,0)
        y1!=Sin(-(winkel!)/180.0*pi())*2
        x1!=Cos(-(winkel!)/180.0*pi())*2
        dx!=dx!+x1!
        dy!=dy!+y1!
        if dy! < 0.0
            dy!=600
        endif
    endif
    if isKey(81)
        winkel!=winkel!+1.0
    endif
    if isKey(69)
        winkel!=winkel!-1.0
    endif
    drawglscene
ENDWHILE
end
proc drawglscene
    OGL("Clear")
    OGL("origin",0,0,-1.11)
    OGL("texture",tex.auto&,1)
    OGL("rotate",0,0,winkel!)
    OGL("quad",0.5,0.5)
    OGL("show")
    ogl("glReadPixels",0,0,128,128,&GL_BGR,~GL_UNSIGNED_BYTE,ogl_rgb#)
    ~setDIBits(%hdc,bild_auto&,0,128,ogl_rgb#,array&,0)
    StartPaint vordergrpic&
    DrawPic hintergrpic&,0,0;0
    drawpic bild_auto&,dx!,dy!;-1
    endpaint
    DrawPic vordergrpic&, 300,5;0
endproc
 | 
 
  | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
|  | | Imho fehlen Dateien wie z.B.: 
 
  | 
 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
|  funkheld
 | | Hallo,ich habe die DIB hier aus dem Forum. Habe sie jetzt drangehängt.
 
 Vielleicht könnte man ja auch ein 2D-Hintergrund herstellen ohne Opengl, der sich je nach Geschwindigkeit bewegt und im Vordergrund eine Fahrradfahrer-Bmp.
 
 Gruss
 | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
|  | | Das ist ja alles ganz einfach. 
 Was ist hiermit? [...]
  | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
|  funkheld
 | | Jup, es ist jetzt gelöst mit deinem Programm. 
 Danke.
 
 Gruss
 | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 |