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

Странно работает передвижение курсора в моей программе.

Вопрос

Решил я написать мышь через клавиатуру, запустил, нажал F10, курсор появился и двигается влево-вправо, но случилось неприятное: не работает передвижение курсора вниз-вверх, плюс курсор ввода продолжает мигать. Ещё не работает кнопка F12, которая останавливает программу. Код:

 

http://pastebin.com/CfHV57NX

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

Иммитирует событие touch там, где находится курсор. Курсор передвигать можно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Меня смущает вот этот код:

local function stop()
    local running = false
end

Что это? Возможно по-этому у тебя не работает выход, но я стал копать дальше:

...
local function run()
    oldPix = gpu.get(mouseX, mouseY)
    gpu.set(mouseX, mouseY, "█")
    local running = true
    while running do
        local _, _, key, code = event.pull("key_down")
        if key == 0 and code == 88 then
            stop()
...

Тайна функции stop() раскрылась. Ты создаёшь в данном случае две разные переменные running, которые не зависят друг от друга. Надо было сделать так:

local running = true
local function stop()
    running = false
end

и убрать строчку 47 в твоей программе.

 

Про сдвиг вправо и влево я не знаю, возможно клавиши не правильно указал, мигания основного курсора связано с тем, что term продолжает работать, так что лучше бы ты это сделал через term.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А что должна будет делать программа? Передвигать встроенный в OC курсор?Создавать свой курсор, параллельно со встроенным?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Меня смущает вот этот код:

local function stop()
    local running = false
end

Что это? Возможно по-этому у тебя не работает выход, но я стал копать дальше:

...
local function run()
    oldPix = gpu.get(mouseX, mouseY)
    gpu.set(mouseX, mouseY, "█")
    local running = true
    while running do
        local _, _, key, code = event.pull("key_down")
        if key == 0 and code == 88 then
            stop()
...

Тайна функции stop() раскрылась. Ты создаёшь в данном случае две разные переменные running, которые не зависят друг от друга. Надо было сделать так:

local running = true
local function stop()
    running = false
end

и убрать строчку 47 в твоей программе.

 

Про сдвиг вправо и влево я не знаю, возможно клавиши не правильно указал, мигания основного курсора связано с тем, что term продолжает работать, так что лучше бы ты это сделал через term.

Сделал я так. Проблема осталась. Ещё когда нажимаешь Ctrl+Alt+C появляется ещё один курсор (надо жмякать несколько раз чтобы остановить прогу вместе с OpenOS)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

200.gif

 

А что должна будет делать программа? Передвигать встроенный в OC курсор?Создавать свой курсор, параллельно со встроенным?

 

Наверное :giggle:

velosiped_letayushhij.jpg

Изменено пользователем davial

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Зачем так говнокодить? Пора уже вводить медальку:

 

d39ef2ca985ae58bb76466c697c7a5ba.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не обращай на них внимания, ты мелок, неопытен, но когда повзрослеешь - вставишь их всех. 

Изменено пользователем cloud

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

local event = require("event")
local component = require("component")
local computer=require("computer")
local gpu = component.gpu
need_mouse=true
local monitor_address=component.gpu.getScreen()
local fake_user="AlexCC"
local keys=require("keyboard").keys
local lmckey, rmckey = "pageUp", "pageDown"
local gpuW, gpuH = gpu.getResolution()
local mouseX, mouseY = 1, 1
local start_key, stop_key = "f10", "f12"
local move_keys={up=keys.up, down=keys.down, left=keys.numpaddiv, right=keys.numpadsub}
lastsym=gpu.get(mouseX, mouseY)
local cursor_texture="⇧"
local binds={
    [keys[lmckey]]=function() if need_mouse then computer.pushSignal("touch", monitor_address, mouseX, mouseY, 0, fake_user) end end,
    [keys[lmckey]]=function() if need_mouse then computer.pushSignal("touch", monitor_address, mouseX, mouseY, 1, fake_user) end end,
    [keys[start_key]]=function() need_mouse=true lastsym=gpu.get(mouseX, mouseY) end,
    [keys[stop_key]]=function() need_mouse=false end,
    [keys.f8]=function() if need_mouse then if mouseY>1 then gpu.set(mouseX, mouseY, lastsym) mouseY=mouseY-1 lastsym=gpu.get(mouseX, mouseY) gpu.set(mouseX, mouseY, cursor_texture) end end end,
    [keys.f9]=function() if need_mouse then if mouseY<gpuH then gpu.set(mouseX, mouseY, lastsym) mouseY=mouseY+1 lastsym=gpu.get(mouseX, mouseY) gpu.set(mouseX, mouseY, cursor_texture) end end end,
    [keys.f5]=function() if need_mouse then if mouseX>1 then gpu.set(mouseX, mouseY, lastsym) mouseX=mouseX-1 lastsym=gpu.get(mouseX, mouseY) gpu.set(mouseX, mouseY, cursor_texture) end end end,
    [keys.f7]=function() if need_mouse then if mouseX<gpuW then gpu.set(mouseX, mouseY, lastsym) mouseX=mouseX+1 lastsym=gpu.get(mouseX, mouseY) gpu.set(mouseX, mouseY, cursor_texture) end end end
}
local function init(_, _, _, key_pushed)
     if binds[key_pushed] then binds[key_pushed]() end
end
 
event.listen("key_down", init)

 

 

pageUp - ЛКМ

pageDown - ПКМ

F8 вверх

F9 вниз

F5 влево

F7 враво

F10 включить, F12 выключить

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

local event = require("event")
local component = require("component")
local computer=require("computer")
local gpu = component.gpu
need_mouse=true
local monitor_address=component.gpu.getScreen()
local fake_user="AlexCC"
local keys=require("keyboard").keys
local lmckey, rmckey = "pageUp", "pageDown"
local gpuW, gpuH = gpu.getResolution()
local mouseX, mouseY = 1, 1
local start_key, stop_key = "f10", "f12"
local move_keys={up=keys.up, down=keys.down, left=keys.numpaddiv, right=keys.numpadsub}
lastsym=gpu.get(mouseX, mouseY)
local cursor_texture="⇧"
local binds={
    [keys[lmckey]]=function() if need_mouse then computer.pushSignal("touch", monitor_address, mouseX, mouseY, 0, fake_user) end end,
    [keys[lmckey]]=function() if need_mouse then computer.pushSignal("touch", monitor_address, mouseX, mouseY, 1, fake_user) end end,
    [keys[start_key]]=function() need_mouse=true lastsym=gpu.get(mouseX, mouseY) end,
    [keys[stop_key]]=function() need_mouse=false end,
    [keys.f8]=function() if need_mouse then if mouseY>1 then gpu.set(mouseX, mouseY, lastsym) mouseY=mouseY-1 lastsym=gpu.get(mouseX, mouseY) gpu.set(mouseX, mouseY, cursor_texture) end end end,
    [keys.f9]=function() if need_mouse then if mouseY<gpuH then gpu.set(mouseX, mouseY, lastsym) mouseY=mouseY+1 lastsym=gpu.get(mouseX, mouseY) gpu.set(mouseX, mouseY, cursor_texture) end end end,
    [keys.f5]=function() if need_mouse then if mouseX>1 then gpu.set(mouseX, mouseY, lastsym) mouseX=mouseX-1 lastsym=gpu.get(mouseX, mouseY) gpu.set(mouseX, mouseY, cursor_texture) end end end,
    [keys.f7]=function() if need_mouse then if mouseX<gpuW then gpu.set(mouseX, mouseY, lastsym) mouseX=mouseX+1 lastsym=gpu.get(mouseX, mouseY) gpu.set(mouseX, mouseY, cursor_texture) end end end
}
local function init(_, _, _, key_pushed)
     if binds[key_pushed] then binds[key_pushed]() end
end
 
event.listen("key_down", init)

 

 

pageUp - ЛКМ

pageDown - ПКМ

F8 вверх

F9 вниз

F5 влево

F7 враво

F10 включить, F12 выключить

Когда я попытался скомпелировать ваш код, то получил вот такую ошибку. Что не так то? 

..ers\OK\Downloads\ZeroBraneStudio\myprograms\untitled.lua:1: module 'event' not found:
	no field package.preload['event']
	no file '.\event.lua'
	no file 'C:\Users\OK\Downloads\ZeroBraneStudio\bin\lua\event.lua'
	no file 'C:\Users\OK\Downloads\ZeroBraneStudio\bin\lua\event\init.lua'
	no file './event.lua'
	no file './event/init.lua'
	no file './lua/event.lua'
	no file './lua/event/init.lua'
	no file 'C:\Users\OK\Downloads\ZeroBraneStudio\lualibs/event/event.lua'
	no file 'C:\Users\OK\Downloads\ZeroBraneStudio\lualibs/event.lua'
	no file 'C:\Users\OK\Downloads\ZeroBraneStudio\lualibs/event/event/init.lua'
	no file 'C:\Users\OK\Downloads\ZeroBraneStudio\lualibs/event/init.lua'
	no file 'C:\Users\OK\luadist\5.1\lib\lua/event.lua'
	no file 'C:\Users\OK\luadist\5.1\lib\lua/event/init.lua'
	no file 'C:\Users\OK\Downloads\ZeroBraneStudio\bin/event.dll'
	no file 'C:\Users\OK\Downloads\ZeroBraneStudio\bin/clibs/event.dll'
	no file '.\event.dll'
	no file 'C:\Users\OK\Downloads\ZeroBraneStudio\bin\event.dll'
	no file 'C:\Users\OK\Downloads\ZeroBraneStudio\bin\loadall.dll'
	no file 'C:\Users\OK\Downloads\ZeroBraneStudio\bin/event.dll'
	no file 'C:\Users\OK\Downloads\ZeroBraneStudio\bin/clibs/event.dll'
	no file 'C:\Users\OK\luadist\5.1\lib\lua/event.dll'

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...