Одновременный левый и правый щелчок с помощью трекпада

Я пытаюсь играть в игру на своем MacBook (The Settlers под DOSBox), в которой используется то, что в руководстве называется «специальным щелчком»: удерживание правой кнопки мыши и нажатие левой кнопки мыши.

Кажется, что это невозможно сделать с помощью трекпада. Помимо подключения внешней мыши, есть ли способ имитировать такой ввод?

Существуют ли внутриигровые настройки управления, которые можно использовать, чтобы избавиться от необходимости нажимать оба сразу?
Нет, элементы управления жестко запрограммированы.

Ответы (2)

Вы можете настроить тачпад для выполнения щелчка правой кнопкой мыши, нажав на его правый (или левый) нижний угол. Если ваш обычный щелчок выполняется прикосновением к трекпаду (не щелчком по нему), вы можете выполнить этот фокус — нажмите на нижний угол, чтобы щелкнуть правой кнопкой мыши, и коснитесь сенсорной панели, чтобы сделать обычный щелчок = два щелчка одновременно.введите описание изображения здесь

Это может работать, но это не работает в игре, в которую я пытаюсь играть, потому что я должен удерживать левую кнопку мыши, а затем щелкнуть правой кнопкой мыши. Есть еще идеи?
В исходном вопросе было наоборот. Но даже в вашем случае должно работать. У меня есть правый клик двумя пальцами. Итак, обычный щелчок по тачпаду (это будет щелчок левой кнопкой мыши), а затем щелчок правой кнопкой мыши двумя пальцами.
Спасибо. Это работает на долю секунды, но для этой игры мне нужно удерживать их одновременно. Поскольку моя проблема достаточно отличается, возможно, я задам отдельный вопрос.
На практике это не работает. Есть ли способ проверить это?

Оказалось несложно пропатчить DOSBox, чтобы можно было использовать клавишу клавиатуры как кнопку мыши. Я отправил патч для добавления этой функциональности в сопоставитель ключей.


Если вы хотите попробовать это, сохраните следующее в текстовый файл с именем 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 */

Затем в терминале проверьте последний код DOSBox от Subversion:

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

Войдите в каталог и примените патч с помощью patchкоманды:

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

(Это предполагает, что файл исправления сохранен в родительском каталоге dosbox-svn. Если он находится где-то еще, измените команду по мере необходимости.)

Затем следуйте инструкциям в INSTALLфайле, чтобы создать новую версию DOSBox. По сути, это три команды:

./autogen.sh
./configure
make

Хотя вам, возможно, придется установить различные зависимости, что можно сделать с помощью Macports и подобных инструментов.

Как использовать ваш патч? Я использую macbook pro 2011, с OSX 10.6.8. Я пытаюсь играть в Ultima VIII в оболочке Dosbox, где мне нужен этот специальный щелчок для выполнения действия. Спасибо!
Ознакомьтесь с исходным кодом DOSBox из SVN здесь , примените патч с помощью patch -p0 < map-mouse-buttons.diffи следуйте инструкциям в INSTALLфайле.
Ваш патч, похоже, имеет проблемы с Mac OS 10.13.3. Я получаю файл исправления src/gui/sdl_mapper.cpp Hunk #1 FAILED в 32. patch: **** искаженный патч в строке 25: \ Сможете ли вы обновиться, чтобы работать? Спасибо
Хм, у меня это работает.... Возможно, стоит попробовать скачать файл патча напрямую с Sourceforge: sourceforge.net/p/dosbox/patches/264/attachment/…