Tastatur Configuration und Mousebuttons "Binden"?
Übersicht

HaubitzeBetreff: Tastatur Configuration und Mousebuttons "Binden"? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Leute ich bins mal wieder,
ich habe zwar die einige freds gefunden die das schon behandeln nur nicht mit den Mousebuttons und der weel, darum frage ich einfach nochmal nach. falls es dazu schon eine loesung giebt so bitte ich darum das der fred geloescht wird und mir bitte ein link per PM gesendet wird. ich habe mir eine datei namens KeyDefs.bb gebastelt wo ich alle tasten scancodes in constanten gespeichert habe. diese sieht wie folgt aus Code: [AUSKLAPPEN] ... Const VKEY_W =17 Const VKEY_X =45 Const VKEY_Y =21 Const VKEY_Z =44 Const VKEY_F1 =59 Const VKEY_F2 =60 Const VKEY_F3 =61 Const VKEY_F4 =62 ... nun habe ich mir eine datei gebastelt namens Keybinder.bb wo ich tasten den einzelnen aktionen zuordnen kann, diese sieht wie folgt aus. Code: [AUSKLAPPEN] Const MKEY_Up =0 Const MKEY_Down =1 Const MKEY_Left =2 Const MKEY_Right =3 Const MKEY_Jump =4 Const MKEY_MJump =24 Const MKEY_Debug =5 Dim MKeys(259) Function BindKey(Mkey, ScanCode) MKeys(Mkey)=ScanCode End Function Function SetupKeys() BindKey(MKEY_Up, VKEY_W) BindKey(MKEY_Down, VKEY_S) BindKey(MKEY_Right, VKEY_D) BindKey(MKEY_Left, VKEY_A) BindKey(MKEY_Jump, VKEY_Up) BindKey(MKEY_MJump, VKEY_Down) BindKey(MKEY_Debug, VKEY_F1) End Function dabei sind die constanten die aktionen und die function BindKey weist nun jeder aktion die dazugehoerige taste zu. nun moechte ich ueber diese funktion aber auch die maustasten und das mausrad einbinden. leider steh ich da grade aufn schlauch und habe keine richtige idee wie ich dies umsetzen soll. darum bitte ich euch hiermit um eure hilfe. danke im vorraus euer noob Haubitze Edit: ich benutze BB3D |
||
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Dim MKeys(259)
dem entnehme ich mal dass du 259 Tasten benutzt dann mach doch einfach Code: [AUSKLAPPEN] Dim MKeys(264)
wobei 260-264 die mausklicks(rechts,links,mitte,rseite,lseite) sind und bei der Tastenabfrage: Code: [AUSKLAPPEN] Function KeyMouseDown(keycode)
if keycode<260 Return KeyDown(keycode) else Return MouseDown(keycode-259) endif end Function |
||
Haubitze |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
meine guete is das einfach....
naja is ja immer so das einfache is oft schwerer ![]() nur wie wuerdest du denn dann da noch das mausrad einbinden? nochmal 3 "tasten" dazu die die zustaende des mausrades uebergeben? ich hab da irgendwie keine idee wie ich das machen soll... im endeffekt moechte ich ein menue haben wo ich die tasten neudefinieren kann und ich dann zB bei NextWeapon einfach das mausrad nach oben drehe und dieses dann als "aktionstaste" uebernommen wird. natuerlich muss die tastenabfrage wie du sie gepostet hast dann noch ein wenig angepasst werden aber wie ist mir ein raetsel. Edit: Habe deinen code nun so gaendert und das funktioniert zumindest bei der steuerung dann auch nun muss ich zumindest fuer die maustasten nurnoch eine eigene"bindroutine" basteln Code: [AUSKLAPPEN] Function KeyMouseDown(mkeycode) If mkeycode<255 Return KeyDown(MKeys(mkeycode)) Else If MKeys(mkeycode)>=1000 And MKeys(mkeycode)<=1002 Return MouseZSpeed() Else Return MouseDown((MKeys(mkeycode)-1002)) EndIf End Function eine frage noch kann man diese funktion hier noch effectiefer gestallten? Code: [AUSKLAPPEN] Function SetKeyMouse(mkeycode) Local tmp=False,scan=-1 Repeat scan=scan+1 If MouseZSpeed()=-1 Then MKeys(mkeycode)=1000:tmp=True If MouseZSpeed()=1 Then MKeys(mkeycode)=1002:tmp=True If MouseHit(1) Then MKeys(mkeycode)=1003:tmp=True If MouseHit(2) Then MKeys(mkeycode)=1004:tmp=True If MouseHit(3) Then MKeys(mkeycode)=1005:tmp=True If KeyHit(scan) Then MKeys(mkeycode)=scan:tmp=True If scan>255 Then scan=-1 Until tmp=True End Function danke fuer die antwort und gruesse Haubitze |
||
HaubitzeBetreff: Options Menue mit Draw3D2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hallo leute ich nochmal,
ich haette diesmal eine Draw3D2 frage. ich habe mir ein menue gebastelt und moechte nun damit die tasten abfrage configurieren. dabei hab ich das problem das ich 1. nicht genau weis wie ich die felder in einem SGGROOSTER abfragen kann; und 2. ob ich bestimmte tasten sperren bzw fuer andere zwecke freigeben kann wenn ich mit der maus ueber einem "MENUE" bin? 3. haette ich gern einen MenueEditor fuer die DrawSGG koennt ihr mir sagen ob es da schon was giebt oder muesst ich mir da auch etwas selbercoden? ich benutz Draw3D2 da ich der meinung bin das dies ein echt gutes teil ist um menues zu basteln und mein menue befindest sich in einer 3D umgebung so wie in dem demo nr 5 von DrawSGG. nur das ich mich in diesem raum auch noch bewegen kann... im grunde ist es wie ein "holodeck" wo ich mir profile erstellen und die optionen einstellen kann. ich hoffe das ich mich nicht ganz undeutlich ausgedrueckt habe und das ihr mir weiterhelfen koennt. Gruesse Euer Noob Haubitze |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zu 1:
GetStringSGG( Handle ) liefert dir den Inhalt des aktuell ausgewählten SGGROSTER, SGGINTAKE oder SGGBUTTON SetSelectSGG( Handle, 5, Wert ) setzt die aktuelle Auswahlposition (''Wert'' ab 0) eines SGGROSTER oder SGGBUTTON. Statt der 5 kann man auch SGGSLCT eingeben. Die Zahl (zweiter Parameter) bestimmt, was gemacht werden soll: 1 = SGGXPOS = Die X·Position des Nebenelementes 2 = SGGYPOS = Die Y·Position des Nebenelementes 3 = SGGALGN = Die Textausrichtung vom String (0=links, 1=mitte, 2=rechts) 4 = SGGXRAN = Die Breite des Nebenelementes bzw. Angle beim OUTLAY 5 = SGGSLCT = Die Auswahlposition vom BUTTON oder ROSTER bei mehreren Einträgen 6 = SGGVIEW = Die Sichtbarkeitsgröße (Anzahl Zeilen) beim ROSTER 7 = SGGLPOS = Die Listen-Scroll-Position beim ROSTER 8 = SGGSUMM = Anzahl Einträge vom BUTTON oder ROSTER (nur GetSelectSGG) Wie man mit SetSelectSGG die Werte setzen kann, kann man mit GetSelectSGG die Werte auch wieder abfragen. Hoffe das hilft erstmal weiter. - - - Zu 2: Hab ich nicht eingebaut. Und ich hätte es auch schon gebrauchen können. Die SGG war ursprünglich wirklich nur als absolute MiniGUI gedacht. Man kann sich jedoch mehrere Hauptelemente erstellen und diese dann ein- bzw. ausblenden. Das erscheint dann wie eine Reitersteuerung. Aber dazu sei gesagt, wird es dann wirklich schnell zu einer Friemelarbeit. Mein Tipp dann: Wenn zu viele Kompromisse eingegangen werden müssen, dann lieber sich selbst eine GUI schreiben. Die SGG war auch nur ein Test von mir, ob man eine schnelle GUI schaffen kann, die direkt zeichnet und nicht erst auf Texturen rendern muss. - - - Zu 3: Ich hatte mal einen Menueditor für die SGG schon begonnen gehabt. Wie auch andere Editoren die mit der Draw3D2 hätten raus gehen sollten. Aber dann passiert genau das, was man Leben nennt. Zwischenfälle ![]() Gruß. |
||
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzBasic: [AUSKLAPPEN] Function SetKeyMouse(mkeycode) Bei der hier ab ich selbst nen fehler eingebaut sry BlitzBasic: [AUSKLAPPEN] Global Wheel Den Umweg mit der Globalen ist die Antwort auf Mausklicks richtig abfragen, denn den gleichen Effekt hast du wenn du MouseZSpeed() öfterin der Schleife abfragst. |
||
Haubitze |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi Silver_Knee
ich verstehe gerade nicht warum dies Code: [AUSKLAPPEN] ... scan=(scan+1) Mod 265;Zählt bis 255. Mod=Rest ;(scan+1)/256 hat wenn scan<255 ist immer scan+1 Rest effektiver sein soll bzw warum du so vorgehst, koenntest du mir das mal bitte erlaeutern? bei letzterer function sehe ich auch nicht so recht warum du diese Globale Weel einfuehst, ich benutze diese function so Code: [AUSKLAPPEN] if KeyMouseDown(MKEY_Jump) then.... ich uebergebe also nur die gewunschte aktion und fuehre diese dann aus (dafuer baue ich mir gerade eine PerformAction funktion) dabei sollte es doch ausreichen zu schaun ob der aktioncode 1000 oder groesser ist und dann einfach den MouseZSpeed zurueckzugeben. natuerlich kann dieser auch mal 0 sein aber das ist ja im grunde auch richtig so... stell dir vor du hast eine Zoom funktion und eine zoomit variable, wuerdest du die ganze zeit ueber diese globale variable diese veraendern, so wie ich mir das grade vorstelle passiert doch da eins, ich drehe das mausrad um einen schrit nach hinten in Weel steht 1 und und zoomit wuerde staendig um 1 erhoet,der Zoom wuerde die ganze zeit zoomen obwohl ich doch nur um 1 zoomen moechte. kann natuerlich auch sein das ich dich grade total falsch verstehe ![]() @hectic ich habe nun versucht mit GetSelectSGG ein button anzusprechen. was mir leider nicht gelingt. wenn ich innerhalb eines roosters bin kann ich damit wunderbar die einzelnen eintraege ansprechen aber bei einem button will das nicht nicht. hier mal die relevanten ausschnitte meines code evtl kannst du mir ja sagen was ich falsch mache. Code: [AUSKLAPPEN] ... Local Pivot=CreatePivot3D(Cube, 0,0,-1.01, 0,0,0, 0.008) Local Menu1=CreateSGG(0,0,100,128,"SGG_FlatMalistic.sgg",Pivot,0) Local M1Title =AddingSGG(Menu1,SGGOUTLAY,0,+110,"<#ffff>Profilauswahl",1,0) Local M1Profile =AddingSGG(Menu1,SGGROSTER,0,0,ProfileString$,0,100) Local M1NewProfile=AddingSGG(Menu1,SGGBUTTON,-50,-110,"<#4f4>Neues Profil",1,42) Local M1Exit =AddingSGG(Menu1,SGGBUTTON,50,-110,"<#4f4>Exit",1,42) SetSelectSGG(M1Profile,6,12) SetSelectSGG(M1Exit,5,0) ... while not keyhit(1) ... SGGKey3D=GetKey() AddSelectSGG(M1Profile,7,-MZSpeed) DrawON=DrawSGG(Menu1,DrawXP,DrawYP) If DrawON>1 Then If SGGHit3D<>0 Then Value=GetStringSGG(SGGHit3D) ;SGGHit3D waere eine alternative um die einzelnen buttons auszulesen tmp=GetSelectSGG(M1Exit,5) ;tmp soll den button exit auswerten ;If tmp=1 Then tmp=0:Exit1=False Else Exit1=True EndIf ;Hier kommen sachen die die Nebenelemente bearbeiten End If ... wend ... mit SGGHit3D koennte ich zwar die buttons auslesen aber dann muesste ich fuer jedes menue die "rueckgabewerte" erstmal bestimmen... schoener waere es wenn mir ein Button einfach nur ein true zurueckgiebt wenn es geklickt wurde. was aber wenn ich deine aussage richtig verstanden habe nicht implementiert ist. ich danke nochmals fuer eure aufmerksamkeit salute Haubitze |
||
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
das mit dem Mod ist soweit ich weiß n tick schneller weils intern weniger zu machen ist
Wenn du Code: [AUSKLAPPEN] KeyMouseDown(MKEY_Jump)
.. KeyMouseDown(MKEY_Up) .. KeyMouseDown(MKEY_Down) .. machst und mehreres ist an das Mausrad gebunden dann wird nur bei dem ersten die richtige MouseZSpeed raus kommen. Denn MouseZSpeed berechnet sich immer seit dem letzten Aufruf von MouseZSpeed. Solltest du also einmal 1000 und einmal 1002 abfragen, hatte der Nutzer bei der ersten AbfrageZeit das mausrad zu drehen während flip, Renderworld, Cls und all die etwas länger dauernden sachen passieren. um bei der 2. Abfrage was zu machen muss er zwischen der ersten und der zweiten Abfrage das mausrad drehen. Deshalb speichere den wert einmal pro Schleifendurchlauf in eine Variable (Wheel) und lass die Funktion diese auswerten. |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Haubitze,
dein Button M1Exit hat ja nur ein Eintrag drin ("<#4f4>Exit"). Da wird dir GetSelectSGG(M1Exit,5) immer nur eine 0 ausgeben. Erst wenn mehrere Einträge drin wären ("<#4f4>Exit|<#4f4>Zurück") würde sich der Button bei jedem Klick austauschen und GetSelectSGG(M1Exit,5) würde dir je nach Zustand eine 0 oder eine 1 zurück geben. Was du brauchst sind die Rückgabewerte der globalen Variablen: gibt das SGG-Nebenelement-Handle zurück,... SGGHit3D ...das gerade geklickt wurde SGGDown3D ...das gerade gedrückt wird SGGSpz3D ...das mit der linken Maustaste geklickt wurde oder mit der rechten gedrückt wird Für deine Zwecke in diesem Fall wäre wohl SGGHit3D das richtige und wird wie folgt angewendet: Code: [AUSKLAPPEN] ...
Local Pivot=CreatePivot3D(Cube, 0,0,-1.01, 0,0,0, 0.008) Local Menu1=CreateSGG(0,0,100,128,"SGG_FlatMalistic.sgg",Pivot,0) Local M1Exit=AddingSGG(Menu1,SGGBUTTON,50,-110,"<#4f4>Exit",1,42) ; SetSelectSGG(M1Exit,5,0) ;KANNST DU NICHT NUTZEN, DA EH NUR EIN EINTRAG DRIN IST ... While Not KeyHit(1) ... SGGKey3D=GetKey() DrawON=DrawSGG(Menu1,DrawXP,DrawYP) If DrawON>1 Then ;SUPER! NUR DANN SACHEN ABFRAGEN, WENN ES NÖTIG IST ; If SGGHit3D<>0 Then ;IST UNNÖTIG, DA BEREITS [DrawON AUS DER DrawSGG] ABGEFRAGT WIRD If SGGHit3D=M1Exit Then ;EXIT-BUTTON WURDE GEKLICKT End If ; End If End If ... Wend ... |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Haubitze |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ah okay das klingt irgenwie einleuchtend ![]() ich danke dir fuer diese einsicht. hatte das problem sicher erst nach 1000 testlaeufen mitbekomm. nun hoff ich nurnoch das mir hectic sagt wie ich das mit dem button loesen kann ![]() salute Edit: oh tschuldige hectic da war ich wohl zu langsam ![]() nun klappt das auch so wie ich das will danke schoen. PS:du solltest mal ein ausfuehrliches Tutorial fuer deine Draw3D2 machen falls noch nicht geschehen ![]() |
||
- Zuletzt bearbeitet von Haubitze am Fr, Aug 27, 2010 12:48, insgesamt 2-mal bearbeitet
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab ich grad gesagt. Aber ich push das mal damit das nicht aus deinen Augen fällt (kann sich eh keiner gestört dran fühlen, außer die paar die sich innerhalb dieser 2 Minuten hier aufhalten). | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group