Перейти к содержимому

Как инвертировать мышь по оси y

  • автор:

Как инвертировать мышь по оси y


HF-Trade © ( 2007-08-27 04:16 ) [0]

Народ, подскажите как сделать сабжик? —
Мне нуна, чтоб при запуске определенного приложения инвертировалась мышь. Отловить запущенно оно(нужное мне приложение) или нет — не проблема. А вот как мышку по Y заставить ползать наоборот я хз=(


Anatoly Podgoretsky © ( 2007-08-27 09:23 ) [1]

> HF-Trade (27.08.2007 04:16:00) [0]

Верный путь довести пользователя до дурдома.


Юрий Зотов © ( 2007-08-27 11:03 ) [2]

> HF-Trade © (27.08.07 04:16)

> подскажите как сделать сабжик?

Если скажете, для чего такой сабжик нужен, то можно и подсказать.


wp2 © ( 2007-08-27 11:28 ) [3]

если тупо: надо узнать координаты миши, и переместить мышь в нужную позицию специальными функциями (такого добра в инете полно)


HF-Trade © ( 2007-08-27 17:35 ) [4]

Нет, тупо двинуть мышу эт не нуна.

> Юрий Зотов ©

Играю в игрушку одну — там нет инвертации мыши. А я уж 100 лет как тока на инвертированной. — привык с ней.


TUser © ( 2007-08-27 17:43 ) [5]

Хм, может Панель управления — Мышь — Для левшей?

🙂


wp2 © ( 2007-08-27 18:00 ) [6]

>Играю в игрушку одну — там нет инвертации мыши. А я уж 100 лет как тока на инвертированной. — привык с ней.

Descent?


Юрий Зотов © ( 2007-08-27 18:14 ) [7]

> HF-Trade © (27.08.07 17:35) [4]

Инвертированные кнопки — это понятно. Для левшей.

А инвертация движения — я, вроде как, тоже не первый месяц мышку гоняю, но о таком даже и не слышал ни разу.

Что-то тут не то.
:о)


Anatoly Podgoretsky © ( 2007-08-27 18:25 ) [8]

> Юрий Зотов (27.08.2007 18:14:07) [7]

Тем более по оси Х, двигаешь мышку вверх, а она вниз ползет, так и свихнуться можно.


Bora.ru ( 2007-08-27 18:27 ) [9]

Шаг вперед -> два шага назад
и наоборот


Daedr ( 2007-08-27 18:34 ) [10]


> Тем более по оси Х, двигаешь мышку вверх, а она вниз ползет,
> так и свихнуться можно.

сразу видно не геймер), вопрос хороший, часто сталкивался с подобной проблемой, если кто знает подскажите)


@!!ex © ( 2007-08-27 19:57 ) [11]

> [7] Юрий Зотов © (27.08.07 18:14)

не. нормуль. бывают игры с инвертированной мышой.
Например симуляторы какие нить.
Вот куда должен наклоняться нос самолета при движении мыши вперед?
По правилам — вниз, по стандартным привычкам — вверх.
Пот поэтому и делают инвертирование, чтобы геймер мог выбрать.
Лично я никогда не заморачивался, ибо перестройка мозга под инвертированное управление происходит минут за 10, прогу дольше писать.


DeadMeat © ( 2007-08-27 20:21 ) [12]

Всю жизнь пользуюсь во всех 3D приложениях, где не видно курсора инвертированной мышкой. И очень страдаю, когда онной «фичи» нету. И перестраиваться с одного «недоделанного» приложения на другое «нормальное» не очень то и легко. Среди пользователей (ИМХО) много «инвертеров». Это как бы и не редкость.


HF-Trade © ( 2007-08-27 22:14 ) [13]

Дык кто нить подскажет по существу то?
Игра — Хроники Тарр — космосимулятор. — Всегда играл в такие — X-Tension(The Threat,X3-Reunion и т.п.), а наши сделали и чета намудрили.
Диск есессно скачал с инета, поставил Демантулсой, все норм — инверта нема(( Вроде как и патчи они уже стяпают, тока народ пишет что после патчей ваще играть никак низя. Да и после патчей уже старфорс обламывает — грит диск не тот))
Вообщем вот так.

> Anatoly Podgoretsky © (27.08.07 18:25) [8]
> > Юрий Зотов (27.08.2007 18:14:07) [7]
>
> Тем более по оси Х, двигаешь мышку вверх, а она вниз ползет,
> так и свихнуться можно.

Во первых по Y надо, а не по X. А во вторых если надо поизуверствовать мона намного проще написать — кнопочки чтоб там менялись местами и т.п. Нафига такй гемор с инвертом в данном случае ума не приложу.


> TUser

Дык енто кнопочки=)) А тут именно иверт движения)


@!!ex © ( 2007-08-27 22:22 ) [14]

Самый просто способ — включить VSync, чтобы точно знать максимальное FPS, которое выдает игра(Оно при включенном VSync равно частоте моника), и напистаь прогу, которая с частотой в два раза превышающей максимальный фпс будет тестить положение мыши, и если она сместилась — инвертировать движение.


@!!ex © ( 2007-08-27 23:44 ) [15]

На. Только при запуске нужно указывать как часто проверять позицию мыши. у меня при 10мс, вообще все очень плавно.
Запускаешь прогу, нажимаешь Alt+F11 — активируется инверсия, Alt+F12 — выключает, Alt+F9 закрывает прогу.

uses
Windows,
Messages,
SysUtils;

var
WND:HWND;
Atom_Start,Atom_Stop, Atom_Close:Word;
Working:boolean = false;
Finished:boolean = false;
Sleep_Time:integer;
DelayTime, LastTime:integer;
msg : TMsg;
MousePos:TPoint;
NewMousePos:TPoint;

function WndProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
case (Msg) of
WM_CLOSE:
begin
PostQuitMessage(0);
end;
WM_HOTKEY: begin
Result := 0;
if wParam = Atom_Start then begin
Working:=true;
GetCursorPos(MousePos);
end
else
if wParam = Atom_Stop then
Working:=false
else
if wParam = Atom_Close then
Finished:=true;
end;
else
Result := DefWindowProc(hWnd, Msg, wParam, lParam); // Default result if nothing happens
end;
end;

Function CreateHotKeyWnd:HWND;
var
h_Instance : HINST;
wndClass : TWndClass;
begin
h_Instance := GetModuleHandle(nil);
ZeroMemory(@wndClass, SizeOf(wndClass));

with wndClass do
begin
style := CS_OWNDC ;
lpfnWndProc := @WndProc; // Set the window procedure to our func WndProc
hInstance := h_Instance;
hCursor := LoadCursor(0, IDC_ARROW);
lpszClassName := «InvertMouseWindowClass»;
end;

begin
Sleep_Time:=StrToInt(ParamStr(1));
WND:=CreateHotKeyWnd;
Atom_Start:=GlobalAddAtom(«Hot Key Start Inverting»);
Atom_Stop:=GlobalAddAtom(«Hot Key Stop Inverting»);
Atom_Close:=GlobalAddAtom(«Hot Key Close Program»);
RegisterHotKey(WND,Atom_Start,MOD_ALT,VK_F11);
RegisterHotKey(WND,Atom_Stop,MOD_ALT,VK_F12);
RegisterHotKey(WND,Atom_Close,MOD_ALT,VK_F9);
LastTime:=GetTickCount;

while not finished do
begin
if (PeekMessage(msg, 0, 0, 0, PM_REMOVE)) then begin
if (msg.message = WM_QUIT) then
finished := True
else begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
end;
DelayTime:=GetTickCount()-LastTime;
LastTime:=GetTickCount();
if Delaytime Sleep(Sleep_time-Delaytime);
if Working then begin
GetCursorPos(NewMousePos);
NewMousePos.Y:=MousePos.Y-(NewMousePos.Y-MousePos.Y);
SetCursorPos(NewMousePos.X,NewMousePos.Y);
MousePos:=NewMousePos;
end;
end;

GlobalDeleteAtom(Atom_Start);
GlobalDeleteAtom(Atom_Stop);
GlobalDeleteAtom(Atom_Close);
Destr oyWindow(WND);
end.


@!!ex © ( 2007-08-27 23:50 ) [16]

Проблемы будут, если игра фиксирует где нить курсор мыши, в экшенах это делаеться всегда.
Соответственно надо модифицировать прогу, чтобы она учитывала, что позиция куда игра кидает курсор — стартовая и двигать никуда не надо.
Минут через 40 может кину проги, учитывающей это.


HF-Trade © ( 2007-08-28 00:28 ) [17]

Спасиб. Вроде работает=)


@!!ex © ( 2007-08-28 00:37 ) [18]

После запуска игры, когда мышь зафиксируеться, не двигая мышь, нужно нажать Alt+F10.
после чего все тоже самое. Alt+F11, Alt+F12.
Не тестировал на прогах с фиксацией мыши, тольк на играх, где фиксации нет.
Все ок. ТОлько не рекоменду подводить мышу к верхней или нижней грание экрана, ибо тогда будет крайне неприятный глюк, саязынный с отличием положения реального, от тго. куда мы перемещаем мышу.
решения нормального пока не нашел, правда и не искал особо.

uses
Windows,
Messages,
SysUtils;

var
WND:HWND;
Atom_Start,Atom_Stop,Atom_Fix, Atom_Close:Word;
Working:boolean = false;
Finished:boolean = false;
Sleep_Time:integer;
DelayTime, LastTime:integer;
msg : TMsg;
MousePos:TPoint;
NewMousePos:TPoint;
Fixed:boolean;
FixedPos:TPoint;

function WndProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
case (Msg) of
WM_CLOSE:
begin
PostQuitMessage(0);
end;
WM_HOTKEY: begin
Result := 0;
if wParam = Atom_Start then begin
Working:=true;
GetCursorPos(MousePos);
end
else
if wParam = Atom_Stop then
Working:=false
else
if wParam = Atom_Close then
Finished:=true
else
if wParam = Atom_Fix then begin
Fixed:=true;
GetCursorPos(FixedPos);
end;
end;
else
Result := DefWindowProc(hWnd, Msg, wParam, lParam);
end;
end;

Function CreateHotKeyWnd:HWND;
var
h_Instance : HINST;
wndClass : TWndClass;
begin
h_Instance := GetModuleHandle(nil);
ZeroMemory(@wndClass, SizeOf(wndClass));

with wndClass do
begin
style := CS_OWNDC ;
lpfnWndProc := @WndProc; // Set the window procedure to our func WndProc
hInstance := h_Instance;
hCursor := LoadCursor(0, IDC_ARROW);
lpszClassName := «InvertMouseWindowClass»;
end;

begin
Sleep_Time:=StrToInt(ParamStr(1));
WND:=CreateHotKeyWnd;
Atom_Start:=GlobalAddAtom(«Hot Key Start Inverting»);
Atom_Stop:=GlobalAddAtom(«Hot Key Stop Inverting»);
Atom_Close:=GlobalAddAtom(«Hot Key Close Program»);
Atom_Fix:=GlobalAddAtom(«Hot Key Fix Mouse Position»);
RegisterHotKey(WND,Atom_Start,MOD_ALT,VK_F11);
RegisterHotKey(WND,Atom_Stop,MOD_ALT,VK_F12);
RegisterHotKey(WND,Atom_Close,MOD_ALT,VK_F9);
RegisterHotKey(WND,Atom_Fix,MOD_ALT,VK_F10);
LastTime:=GetTickCount;

while not finished do
begin
if (PeekMessage(msg, 0, 0, 0, PM_REMOVE)) then begin
if (msg.message = WM_QUIT) then
finished := True
else begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
end;
DelayTime:=GetTickCount()-LastTime;
LastTime:=GetTickCount();
if Delaytime Sleep(Sleep_time-Delaytime);
if Working then begin
GetCursorPos(NewMousePos);
if not Fixed or (NewMousePos.Y<>FixedPos.Y) then begin
NewMousePos.Y:=MousePos.Y-(NewMousePos.Y-MousePos.Y);
SetCursorPos(NewMousePos.X,NewMousePos.Y);
end;
MousePos:=NewMousePos;
end;
end;

GlobalDeleteAtom(Atom_Start);
GlobalDeleteAtom(Atom_Stop);
GlobalDeleteAtom(Atom_Close);
GlobalDeleteAtom(Atom_Fix);
DestroyWindow(WND);
end.


GrayFace © ( 2007-08-28 19:06 ) [19]

ИМХО, хуки для этого больше бы подошли.


HF-Trade © ( 2007-08-29 16:24 ) [20]

Да. Хук был бы предпочтительней.


@!!ex © ( 2007-08-29 17:36 ) [21]

> [19] GrayFace © (28.08.07 19:06)


> [20] HF-Trade © (29.08.07 16:24)

На что хук ставитЬ? 🙂


HF-Trade © ( 2007-08-30 23:21 ) [22]


> @!!ex © (29.08.07 17:36) [21]

На мышЬ=)


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

Может узнать разрешение и если курсор меньше или равен 0 или больше или равен разрешению по Y — откидывать его на 1 пиксель?


@!!ex © ( 2007-08-31 01:00 ) [23]

> На мышЬ=)

Хуки ставятся на события.
Как геймдевелопер завляю — игры обрабатывают очень мало событиый. И события мыши туда не входят.


> Может узнать разрешение и если курсор меньше или равен 0
> или больше или равен разрешению по Y — откидывать его на
> 1 пиксель?

Пробуй, уод у тебя есть, мне лично влом. 🙂

Как инвертировать мышь по оси y

24 мар. 2019 в 18:39

Как инвертировать ось Y?

Я тут один такой, кто не может играть в игры от первого лица, если нельзя инвертировать ось Y?

Одной из первых игр от первого лица с управлением мышой, в которую я играл, был Descent, а там управление по-самолетному: повернуться вверх — это мышь к себе, а вниз — от себя. С тех пор так и привык играть, и ни в каких играх с этим проблем не было: везде есть опция инвертирования оси Y.

А в этой игре я такой опции не нашел. Расскажите, что мне сделать, чтобы инвертировать ось Y. С неинвертированной осью Y я играть не могу.

Инверсия мыши по оси X (слева направо)

Всем привет! Хотелось бы задать вопрос. В игре есть настройка инверсия мыши. И в игре она работает по оси Y (сверху вниз)! При включении инверсии ведешь мышку от себя, камера опускается в низ и наоборот. А мне надо по оси X. Когда ведешь мышку в лево а в игре поворот идет направо и наоборот. Для чего мне это нужно? Причина одна — хотелось сыграть в сталкер на стандартных локациях под другим углом (отзеркаленным). Так как локации в сталкере уже изучены и приелись на 100% и интереса в них уже нет. И интерес к игре угасает. Да оружие будет с левой стороны, да текст будет нечитаемым, но для меня это не проблема, так как прошел все уже не один раз! Есть программа reshade-shaders для Зова Припяти и с ее помощью можно ставить новую цветовою гамму и новые эффекты, а так же с ее помощью можно отзеркалить изображение.

Сам fx файл для инверсии изображения при помощи reshade-shaders
texture BackBufferTex : COLOR;
sampler BackBuffer < Texture = BackBufferTex; >;

void PostProcessVS(in uint id : SV_VertexID, out float4 position : SV_Position, out float2 texcoord : TEXCOORD)
texcoord.x = (id == 2) ? 2.0 : 0.0;
texcoord.y = (id == 1) ? 2.0 : 0.0;
position = float4(texcoord * float2(2.0, -2.0) + float2(-1.0, 1.0), 0.0, 1.0);
>

void PS_Mirror(in float4 position : SV_Position, in float2 texcoord : TEXCOORD, out float4 o : SV_Target0)
o = tex2D(BackBuffer, float2(1 — texcoord.x, texcoord.y));
>

technique MirrorScreen
pass
VertexShader = PostProcessVS;
PixelShader = PS_Mirror;
>
>

Сам файл написан не мной, а взят из другого источника. Где конкретно уже не вспомню, так как облазил кучу форумов.
Но из-за инверсии изображения при движение мышки в лево поворот в игре идет в право! И вот тут как раз мне и нужно инверсия мышки по оси X (слева направо). А не так как это есть в игре по оси Y (верх низ). И вопрос следующий возможно ли как-то сделать инверсию мышки в игре по оси X чтобы управлять игрой под инверсированным изображением было корректным. Сторонние программы не помогают.
Пробовал AutoHotkey (в самой игре работает не корректно!)

BlockInput Mouse
SetMouseDelay -1

MouseGetPos y, oldy
SetTimer WatchMouse, 1
Return

WatchMouse:
MouseGetPos x, y
MouseMove 0, 2*(oldy-y), 0, R
MouseGetPos y, oldy
Return

Также пробовал программу MouseInverter на рабочем столе работает а в самой игре нет!

Есть также в игре есть консольная команда (mouse_invert ‘on/off’ или ‘1/0’) которая вкл. инверсию по оси Y и можно ли где-то изменить ее строки чтобы включалось инверсия не оси Y а оси X. Или написать скрипт для игры которым можно включить инверсию по оси X. В этом я сам ничего не понимаю и вот интересуюсь у более опытных и знающих людей

Что означает «инвертировать ось Y мыши» ?? Спасибо.

Это означает, что стрелка мыши будет двигаться по вертикали, сверху вниз и обратно. А по оси x — это по горизонтали. Например, в играх, задав инвертирование мыши по оси y, вы даёте возможность персонажу не только вращаться-смотреть по сторонам влево и вправео, но и опускать взгляд вниз и вверх. Почти во всехиграх эта функция не нужна, но в некоторых просто необходима.

Остальные ответы

ведешь мышь вверх — курсор ползет вниз, и наоборот.

ты вверх мышку, а она в низ.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *