Italia
Foro

Maus am Schwungrad vom Trimmrad: y-Mausposition setzen , abfragen und ausgeben überfordert

 
- Page 1 -



funkheld
Hallo, guten Tag.
Ich habe ein kombinationsproblem mit der Maus.

Ich habe circa 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
 
10.07.2012  
 



« Dieser Beitrag wurde als Lösung gekennzeichnet. »

- Page 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&)
f='./../../funktionsreferenzen/xprofan/end/'>end

Wenn Du die add strecke Zeile dahin änderst:
KompilierenMarkierenSeparieren
add strecke&,(long(my2MousePositions&,0)-long(my2MousePositions&,8))+(long(my2MousePositions&,4)-long(my2MousePositions&,12))
(also ohne abs), dann wird die rückwärtsgefahrene Strecke auch von der Streckenlänge
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.

1.247 kB
Hochgeladen:10.07.2012
Downloadcounter173
Herunterladen
 
10.07.2012  
 



 
- Page 2 -


Auf meinem Computer kann ich die Maus so schnell bewegen dass sogar 20 km/h

angezeigt werden. Wie grande ist Dein hWnd? Kann es sein das die von Dir genutzte

Maus einfach nicht schneller erfassen kann?
 
11.07.2012  
 




funkheld
Ich habe jetzt mal : add tme&,200 eingestellt.
Jetzt funktioniert es circa 15Km/h.

Welchen Einfluss hat das eigentlich?

Gruss
 
11.07.2012  
 



Nach wievielen Millisekunden die Grafikprozedur ablaufen soll -

bei 100 also 10 mal pro Sekunde und bei 200 5 mal pro Sekunde.
 
11.07.2012  
 



 
- Page 3 -



funkheld
Warum aumento sich dann die Geschwindigkeit?
Ist da irgendein Einfluss drin, wenn ich 200 eingebe?

Wie errechnest du die Geshwindigkeit?

Gruss
 
11.07.2012  
 



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 potrebbe dann nicht mehr stimmen da auf 100 ms abgestimmt.

Wenn Du alle 200 statt 100 ms rechnest dann müsstest Geschwindigkeit durch 2 nehmen.
 
11.07.2012  
 




funkheld
Ach so...., danke per 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
 
12.07.2012  
 



Ich würde empfehlen das erstmal separat von diesem Programm hier zu realisieren und

das in einem eigenen Thema zu behandeln.
 
12.07.2012  
 




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;pan>

endproc


330 kB
Hochgeladen:13.07.2012
Downloadcounter104
Herunterladen
 
13.07.2012  
 



Imho fehlen File wie z.B.:


 
13.07.2012  
 




funkheld
Hallo,ich habe die DIB hier aus dem Foro.
Habe sie jetzt drangehängt.

Vielleicht potuto man ja auch ein 2D-Hintergrund herstellen ohne Opengl, der sich je nach Geschwindigkeit bewegt und im Vordergrund eine Fahrradfahrer-Bmp.

Gruss
 
13.07.2012  
 



Das ist ja alles ganz einfach.

Was ist hiermit? [...] 
 
13.07.2012  
 




funkheld
Jup, es ist jetzt gelöst mit deinem Programm.

Danke.

Gruss
 
13.07.2012  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

24.265 Views

Untitledvor 0 min.
Ralf Netz22.05.2021
Heltal23.01.2015
Jochen Roxlau04.10.2014
Julian Schmidt22.06.2013
Di più...

Themeninformationen

Dieses Thema hat 3 subscriber:

funkheld (16x)
iF (15x)
RICOSCH (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie