Jednoczesne kliknięcie lewym i prawym przyciskiem dotykowym


4

Próbuję zagrać w grę na moim MacBooku (The Settlers pod DOSBox), która wykorzystuje coś, co instrukcja nazywa „specjalnym kliknięciem”: przytrzymanie prawego przycisku myszy i kliknięcie lewym przyciskiem myszy.

Wydaje się to niemożliwe przy użyciu gładzika. Czy oprócz podłączenia myszy zewnętrznej istnieje jakiś sposób na symulację takich danych wejściowych?


Czy istnieją ustawienia kontroli w grze, których można użyć, aby wyeliminować potrzebę klikania obu jednocześnie?
user24601

Nie, elementy sterujące są zakodowane na stałe.
legoscia

Odpowiedzi:


1

Możesz skonfigurować touchpad do wykonywania kliknięcia prawym przyciskiem, naciskając jego prawy (lub lewy) dolny róg. Jeśli normalne kliknięcie odbywa się poprzez dotknięcie gładzika (nie klikanie go), możesz wykonać tę magiczną sztuczkę - naciśnij prawy dolny róg i dotknij touchpada, aby normalne kliknięcie = dwa kliknięcia jednocześnie. wprowadź opis zdjęcia tutaj


Może to działać, ale nie działa w grze, w którą próbuję grać, ponieważ muszę przytrzymać lewy przycisk myszy, a następnie prawy przycisk myszy. Jeszcze jakieś pomysły?
James Vanderhyde

W pierwotnym pytaniu było odwrotnie. Ale nawet w twoim przypadku powinno to działać. Mam kliknięcie prawym przyciskiem myszy dwoma palcami. Tak więc normalne kliknięcie touchpada (byłoby to kliknięcie lewym przyciskiem), a następnie kliknięcie prawym przyciskiem dwoma palcami.
Denis Rasulev

Dzięki. Działa to na ułamek sekundy, ale w tej grze muszę być w stanie je przytrzymać w tym samym czasie. Ponieważ mój problem jest wystarczająco inny, być może opublikuję osobne pytanie.
James Vanderhyde

1

Okazało się, że łatanie DOSBoxa jest dość łatwe, aby umożliwić użycie klawisza klawiatury jako przycisku myszy. I złożyła poprawkę na dodanie tej funkcjonalności do kluczowego elementu odwzorowującego.


Jeśli chcesz to wypróbować, zapisz następujące elementy w pliku tekstowym o nazwie map-mouse-buttons.diff:

Index: src/gui/sdl_mapper.cpp
===================================================================
--- src/gui/sdl_mapper.cpp  (revision 3914)
+++ src/gui/sdl_mapper.cpp  (working copy)
@@ -32,6 +32,7 @@
 #include "dosbox.h"
 #include "video.h"
 #include "keyboard.h"
+#include "mouse.h"
 #include "joystick.h"
 #include "support.h"
 #include "mapper.h"
@@ -1497,6 +1498,20 @@
    KBD_KEYS key;
 };

+class CMouseButtonEvent : public CTriggeredEvent {
+public:
+   CMouseButtonEvent(char const * const _entry,Bit8u _button) : CTriggeredEvent(_entry) {
+       button=_button;
+   }
+   void Active(bool yesno) {
+       if (yesno)
+           Mouse_ButtonPressed(button);
+       else
+           Mouse_ButtonReleased(button);
+   }
+   Bit8u button;
+};
+   
 class CJAxisEvent : public CContinuousEvent {
 public:
    CJAxisEvent(char const * const _entry,Bitu _stick,Bitu _axis,bool _positive,CJAxisEvent * _opposite_axis) : CContinuousEvent(_entry) {
@@ -1708,6 +1723,15 @@
    return event;
 }

+static CMouseButtonEvent * AddMouseButtonEvent(Bitu x,Bitu y,Bitu dx,Bitu dy,char const * const title,char const * const entry,Bit8u button) {
+   char buf[64];
+   strcpy(buf,"mouse_");
+   strcat(buf,entry);
+   CMouseButtonEvent * event=new CMouseButtonEvent(buf,button);
+   new CEventButton(x,y,dx,dy,title,event);
+   return event;
+}
+
 static CJAxisEvent * AddJAxisButton(Bitu x,Bitu y,Bitu dx,Bitu dy,char const * const title,Bitu stick,Bitu axis,bool positive,CJAxisEvent * opposite_axis) {
    char buf[64];
    sprintf(buf,"jaxis_%d_%d%s",stick,axis,positive ? "+" : "-");
@@ -1866,6 +1890,15 @@
    AddKeyButtonEvent(PX(XO+2),PY(YO+4),BW,BH,".","kp_period",KBD_kpperiod);
 #undef XO
 #undef YO
+#define XO 5
+#define YO 8
+   /* Mouse Buttons */
+   new CTextButton(PX(XO+0),PY(YO-1),3*BW,20,"Mouse");
+   AddMouseButtonEvent(PX(XO+0),PY(YO),BW,BH,"L","left",0);
+   AddMouseButtonEvent(PX(XO+1),PY(YO),BW,BH,"M","middle",2);
+   AddMouseButtonEvent(PX(XO+2),PY(YO),BW,BH,"R","right",1);
+#undef XO
+#undef YO
 #define XO 10
 #define YO 8
    /* Joystick Buttons/Texts */

Następnie w terminalu sprawdź najnowszy kod DOSBox z Subversion:

svn co svn://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk dosbox-svn

Wejdź do katalogu i zastosuj łatę za pomocą patchpolecenia:

cd dosbox-svn
patch -p0 < ../map-mouse-buttons.diff

(Zakłada się, że plik poprawki jest zapisany w katalogu nadrzędnym dosbox-svn. Jeśli jest gdzie indziej, dostosuj polecenie w razie potrzeby.)

Następnie postępuj zgodnie z instrukcjami w INSTALLpliku, aby zbudować nową wersję DOSBox. Zasadniczo są to trzy polecenia:

./autogen.sh
./configure
make

Chociaż może być konieczne zainstalowanie różnych zależności, co można zrobić za pomocą Macports i podobnych narzędzi.


Jak korzystać z twojej łatki? Używam MacBooka Pro 2011 z systemem OSX 10.6.8. Próbuję grać w Ultima VIII w opakowaniu Dosbox, gdzie potrzebuję tego specjalnego kliknięcia, aby wykonać akcję. Dzięki!

Sprawdź kod źródłowy DOSBox z SVN tutaj , zastosuj łatkę patch -p0 < map-mouse-buttons.diffi postępuj zgodnie z instrukcjami w INSTALLpliku.
legoscia

Wygląda na to, że Twoja łatka ma problemy z Mac OS 10.13.3. Dostaję plik łatki src / gui / sdl_mapper.cpp Hunk # 1 FAILED at 32. patch: **** zniekształcona łatka w linii 25: \ Czy byłbyś w stanie zaktualizować do pracy? Dzięki
Stevan Lieberman,

Hm, działa dla mnie .... Może warto spróbować pobrać plik łaty bezpośrednio z Sourceforge: sourceforge.net/p/dosbox/patches/264/attachment/…
legoscia
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.