Я пытаюсь играть в игру на своем MacBook (The Settlers под DOSBox), в которой используется то, что в руководстве называется «специальным щелчком»: удерживание правой кнопки мыши и нажатие левой кнопки мыши.
Кажется, что это невозможно сделать с помощью трекпада. Помимо подключения внешней мыши, есть ли способ имитировать такой ввод?
Вы можете настроить тачпад для выполнения щелчка правой кнопкой мыши, нажав на его правый (или левый) нижний угол. Если ваш обычный щелчок выполняется прикосновением к трекпаду (не щелчком по нему), вы можете выполнить этот фокус — нажмите на нижний угол, чтобы щелкнуть правой кнопкой мыши, и коснитесь сенсорной панели, чтобы сделать обычный щелчок = два щелчка одновременно.
Оказалось несложно пропатчить 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 и подобных инструментов.
patch -p0 < map-mouse-buttons.diff
и следуйте инструкциям в INSTALL
файле.
пользователь 24601
легосция