1 (изменено: Dworkin, 2013-10-05 00:33:36)

Тема: AHK: отображение точки на координатной плокости

Скажите пожалуйста как можно в Autohotkey сделать что бы точка отображалась на координатной плоскости?

Допустим возьмем прямоугольник с координатами
http://s019.radikal.ru/i612/1310/0a/3527a589dab7.png

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

2

Re: AHK: отображение точки на координатной плокости

Dworkin пишет:

Скажите пожалуйста как можно в Autohotkey сделать что бы точка отображалась на координатной плоскости?

А что ты понимаешь под координатной плоскостью? Это окно с каким-то изображением, или просто координаты на экране?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

3

Re: AHK: отображение точки на координатной плокости

Что то типа этого?


CoordMode, Mouse
Gui, Color, EC4D48
Gui -DPIScale +AlwaysOnTop -Caption +E0x08000000 
Gui, Show, Hide w5 h5

Loop
{
    MouseGetPos, X, Y
    Gui, Show, % "NA x" X+22 " y" Y+22  
    Sleep 50
    Gui, Show, Hide
    Sleep 50
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

4 (изменено: Dworkin, 2013-10-05 03:42:06)

Re: AHK: отображение точки на координатной плокости

serzh82saratov пишет:

Что то типа этого?


CoordMode, Mouse
Gui, Color, EC4D48
Gui -DPIScale +AlwaysOnTop -Caption +E0x08000000 
Gui, Show, Hide w5 h5

Loop
{
    MouseGetPos, X, Y
    Gui, Show, % "NA x" X+22 " y" Y+22  
    Sleep 50
    Gui, Show, Hide
    Sleep 50
}

не думаю

teadrinker пишет:
Dworkin пишет:

Скажите пожалуйста как можно в Autohotkey сделать что бы точка отображалась на координатной плоскости?

А что ты понимаешь под координатной плоскостью? Это окно с каким-то изображением, или просто координаты на экране?

Забыл написать...это окно с изображением. Изображение представляет собой карту местности как в играх, но мне не нужно использовать глобальную карту в игре, а только небольшой участок в форме прямоугольника у которого я мог бы задать координаты крайних точек и в этой области изображалась бы точка, которая могла бы передвигаться так как координаты игрока все время меняется(я знаю адрес в игре откуда могу взять координаты игрока).
Игра делается в оконном режиме и все это выводится рядом с ним, только так что бы не сворачивало бы игру

5 (изменено: serzh82saratov, 2013-10-05 22:13:17)

Re: AHK: отображение точки на координатной плокости

Кажется понял что имеешь ввиду:


Gui, Color, DA952D
Gui -DPIScale +AlwaysOnTop  
Gui, Add, Progress, x205 y145 h5 w5 vPoi BackgroundD26419F
Gui, Show, NA w210 h150
 
Loop
{ 
    Random, X, 0, 205
    Random, Y, 0, 145
    GuiControl, Move, Poi, x%X% y%Y%
    Sleep 110
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

6 (изменено: serzh82saratov, 2013-10-05 22:10:22)

Re: AHK: отображение точки на координатной плокости

Или так


Gui, Font, s24
Gui, Color, DA952D
Gui -DPIScale +AlwaysOnTop 
Gui, Add, Text, vPoi BackgroundTrans Center cD26419F, % Chr(0x263b) 
Gui, Add, Text, vPoi2 BackgroundTrans Center cRed, % Chr(0x262d) 
Gui, Show, NA w600 h400
 
 
Loop
{ 
    Random, X, 1, 575
    Random, Y, -11, 365
    GuiControl, MoveDraw, Poi, x%X% y%Y%
    Sleep 333
    
    Random, X2, 1, 560
    Random, Y2, -11, 355
    GuiControl, MoveDraw, Poi2, x%X2% y%Y2%
    Sleep 333 
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

7

Re: AHK: отображение точки на координатной плокости

serzh82saratov пишет:

Или так


Gui, Font, s24
Gui, Color, DA952D
Gui -DPIScale +AlwaysOnTop 
Gui, Add, Text, vPoi BackgroundTrans Center cD26419F, % Chr(0x263b) 
Gui, Add, Text, vPoi2 BackgroundTrans Center cRed, % Chr(0x262d) 
Gui, Show, NA w600 h400
 
 
Loop
{ 
    Random, X, 1, 575
    Random, Y, -11, 365
    GuiControl, MoveDraw, Poi, x%X% y%Y%
    Sleep 333
    
    Random, X2, 1, 560
    Random, Y2, -11, 355
    GuiControl, MoveDraw, Poi2, x%X2% y%Y2%
    Sleep 333 
}

Да похожее.
Попытался вставить картинку, но почему не отображалось поверх картинки.
Например эта картинка:
http://s020.radikal.ru/i718/1310/86/458ed4473b0c.png

Я тут подумал и понял что то что я задумал в начале сложна в реализации поэтому немного изменил.

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

8

Re: AHK: отображение точки на координатной плокости

Попытался вставить картинку, но почему не отображалось поверх картинки.

У меня нормально:


Gui -DPIScale +AlwaysOnTop  
Gui, Add, Progress, x205 y145 h5 w5 vPoi Backgroundffffff
Gui, Add, Picture, x0 y0 w210 h-1 0x4000000,D:\Images\SalvadorDali\1932\52.JPG
Gui, Show, NA w210 h150
 
Loop
{ 
    Random, X, 0, 205
    Random, Y, 0, 145
    GuiControl, Move, Poi, x%X% y%Y%
    Sleep 220
}

Я тут подумал и понял что то что я задумал в начале сложна в реализации поэтому немного изменил.

Что сложно?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

9 (изменено: serzh82saratov, 2013-10-06 01:56:41)

Re: AHK: отображение точки на координатной плокости

как сделать что бы сектор мигал или в нем было что-то изображено если координаты игрока находятся в пределах сектора?


Gui, Font, s111
Gui -DPIScale +AlwaysOnTop  
Gui, Add, Progress, x0 y135 h2 w400 Background000000
Gui, Add, Progress, x175 y0 h400 w2 Background000000
Gui, Add, Picture, x0 y0 w400 h300 0x4000000,D:\Images\SalvadorDali\1932\52.JPG
Gui, Show, NA w400 h300
Gui, Add, Text, vPoi BackgroundTrans Center cffffff hidden, % Chr(0x263b) 
Gui, Add, Progress, BackgroundD3DAED hidden vPoi2

return
     
1::
    GuiControl, MoveDraw, Poi, x42 y99  
    Flash("Poi") 
    return
     
2::
    GuiControl, MoveDraw, Poi2, x0 y0 h135 w175 
    Flash("Poi2") 
    return
    
Flash(name)  {
    Loop 3
    {  
        GuiControl, Show, %name%  
        Sleep 222 
        GuiControl, Hide, %name%
        Sleep 222 
    } 
} 
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

10

Re: AHK: отображение точки на координатной плокости

serzh82saratov пишет:

как сделать что бы сектор мигал или в нем было что-то изображено если координаты игрока находятся в пределах сектора?


Gui, Font, s111
Gui -DPIScale +AlwaysOnTop  
Gui, Add, Progress, x0 y135 h2 w400 Background000000
Gui, Add, Progress, x175 y0 h400 w2 Background000000
Gui, Add, Picture, x0 y0 w400 h300 0x4000000,D:\Images\SalvadorDali\1932\52.JPG
Gui, Show, NA w400 h300
Gui, Add, Text, vPoi BackgroundTrans Center cffffff hidden, % Chr(0x263b) 
Gui, Add, Progress, BackgroundD3DAED hidden vPoi2

return
     
1::
    GuiControl, MoveDraw, Poi, x42 y99  
    Flash("Poi") 
    return
     
2::
    GuiControl, MoveDraw, Poi2, x0 y0 h135 w175 
    Flash("Poi2") 
    return
    
Flash(name)  {
    Loop 3
    {  
        GuiControl, Show, %name%  
        Sleep 222 
        GuiControl, Hide, %name%
        Sleep 222 
    } 
} 

Спасибо буду разбираться.

serzh82saratov пишет:

Я тут подумал и понял что то что я задумал в начале сложна в реализации поэтому немного изменил.

Что сложно?

Нуу...попробую объяснить, а вы уже скажите пожалуйста сложно это или нет.

http://i017.radikal.ru/1310/d9/0aa4880d89ad.png
На картинке реальные координаты из игры.
Например реальные координаты игрока:
X = 196.4629517
Y = -256.4821167

Как сделать что бы точка(игрок) корректно отображалась?
То есть например: я(игрок) в игре смотрю на карту и вижу что я стою в левом нижнем углу карты и смотрю где меня отображает макрос у себя, оно должно совпадать иначе макрос не корректно отображает.

11

Re: AHK: отображение точки на координатной плокости

А почему Y нижних краёв отличаются: 350 и 210?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

12 (изменено: serzh82saratov, 2013-10-06 17:26:34)

Re: AHK: отображение точки на координатной плокости

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

13

Re: AHK: отображение точки на координатной плокости

serzh82saratov пишет:

А почему Y нижних краёв отличаются: 350 и 210?

ой, Y = -350.3629761 и там и там.

serzh82saratov пишет:

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

да

14

Re: AHK: отображение точки на координатной плокости

Простейшая математика в помощь.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

15

Re: AHK: отображение точки на координатной плокости

serzh82saratov пишет:

Простейшая математика в помощь.

Подскажите пожалуйста тогда или киньте ссылочку на эту математику, а то что-то я не могу догадаться

16 (изменено: serzh82saratov, 2013-10-07 14:55:24)

Re: AHK: отображение точки на координатной плокости

Подскажите пожалуйста тогда или киньте ссылочку на эту математику, а то что-то я не могу догадаться

Учебник за 5 класс максимум


inX1 := 121.0988922, inX2 := 454.7867432
inY1 := 85.5152516, inY2 := -350.3629761

inW := Abs(inX2-inX1), inH := Abs(inY2-inY1)

guiW := 200, guiH := Ceil(guiW * (inW / inH)) ; ширина карты
 
markW := 5, markH := 5 ; размеры маркера
 
Gui, Margin, 0, 0
Gui, Color, DA952D
Gui -DPIScale +AlwaysOnTop
Gui, Add, Progress, x205 y161 w%markW% h%markH% vPoi BackgroundD26419F
Gui, Show, % " NA w" guiW + markW " h" guiH + markH 

SetTimer, Flash, -1 

RelativeMovePoi(inX2, inY1)
Sleep 555
RelativeMovePoi(inX1, inY1)
Sleep 555
RelativeMovePoi(inX1, inY2) 
Sleep 555
RelativeMovePoi(inX2, inY2)  
Sleep 555
RelativeMovePoi(196.4629517, -256.4821167)
return


RelativeMovePoi(posX, posY)  {
    Global
    outX := guiW * (Abs(posX - inX1) / inW) 
    outY := guiH * (Abs(posY - inY1) / inH) 
    GuiControl, Move, Poi, x%outX% y%outY%
    GuiControl, Show, Poi
}

Flash: 
    GuiControl,  % (T := !T) ? "Show" : "Hide", Poi
    SetTimer, Flash, -133  
    return
+ пример с поправкой на маркер-изображение

inX1 := 121.0988922
inY1 := 85.5152516
inX2 := 454.7867432
inY2 := -350.3629761
  
inW := inX2-inX1
inH := inY1 + Abs(inY2)
 
guiW := 200 ; ширина карты
guiH := Ceil(guiW * (inW / inH) )
     
markW := 25 ; размеры маркера
markH := 35

Gui, Margin, 0, 0
Gui, Color, DA952D
Gui -DPIScale +AlwaysOnTop
Gui, Font, s24  
Gui, Add, Text, x0 y-11 w%markW% h%markH% vPoi Center c26419F BackgroundTrans, % Chr(0x263b) 
Gui, Show, % " NA w" guiW + markW " h" guiH + markH - 11
 
RelativeMovePoi(196.4629517, -256.4821167)
Sleep 555
RelativeMovePoi(inX2, inY1)
Sleep 555
RelativeMovePoi(inX1, inY1)
Sleep 555
RelativeMovePoi(inX1, inY2) 
Sleep 555
RelativeMovePoi(inX2, inY2)   
return


RelativeMovePoi(posX, posY)  {
    Global
    outX := guiW * (Abs(posX - inX1) / inW) 
    outY := (guiH * (Abs(posY - inY1) / inH)) - 11
    GuiControl, Move, Poi, x%outX% y%outY%
}
+ точка на картинке

inX1 := 121.0988922
inY1 := 85.5152516
inX2 := 454.7867432
inY2 := -350.3629761
  
inW := inX2-inX1
inH := inY1 + Abs(inY2)
 
guiW := 1110  ; ширина карты
guiH := Ceil(guiW * (inW / inH) )
     
markW := 25 ; размеры маркера
markH := 25

Gui, Margin, 0, 0
Gui, Color, DA952D
Gui -DPIScale +AlwaysOnTop
Gui, Font, s24   
Gui, Add, Progress, x205 y161 w%markW% h%markH% vPoi BackgroundDffffff

Gui, Add, Picture,  % "x0 y0 0x4000000 w" guiW + markW " h" guiH + markH, D:\Images\SalvadorDali\1932\52.JPG 
Gui, Show, NA
 
RelativeMovePoi(196.4629517, -256.4821167)
Sleep 555
RelativeMovePoi(inX2, inY1)
Sleep 555
RelativeMovePoi(inX1, inY1)
Sleep 555
RelativeMovePoi(inX1, inY2) 
Sleep 555
RelativeMovePoi(inX2, inY2)   
return


RelativeMovePoi(posX, posY)  {
    Global
    outX := guiW * (Abs(posX - inX1) / inW) 
    outY := guiH * (Abs(posY - inY1) / inH) 
    GuiControl, MoveDraw, Poi, x%outX% y%outY%
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

17 (изменено: Dworkin, 2013-10-06 20:30:05)

Re: AHK: отображение точки на координатной плокости

Хм, а теперь можете пожалуйста объяснить формулы и почему именно их взяли?

inH := inY1 + Abs(inY2) ; понятно что тут высота, но я прочитал в справке про abs и не понял ничего, не понял зачем использовали Abs и почему прибавляли, когда для нахождения длины вычитали
guiH := Ceil(guiW * (inW / inH) ) ; понятно что длина карты, но я не понял почему используется эта формула

и

RelativeMovePoi(posX, posY)  {
    Global
    outX := guiW * (Abs(posX - inX1) / inW) 
    outY := guiH * (Abs(posY - inY1) / inH) 
    GuiControl, Move, Poi, x%outX% y%outY%
} ; я так понял что эта функция отвечает за правильное отображение точки, но не понятно опять же формула(

18 (изменено: serzh82saratov, 2013-10-06 21:32:20)

Re: AHK: отображение точки на координатной плокости

guiH := Ceil(guiW * (inW / inH) ) ; понятно что длина карты, но я не понял почему используется эта формула

guiH это высота gui окна карты. Задавая самостоятельно guiW ширину gui окна карты, нам надо знать коэфициент соотношения сторон чтобы задать высоту. Разделив inW на inH мы получаем коэфициент соотношения сторон. Ceil округляет до большего целого.

inH := inY1 + Abs(inY2) ; понятно что тут высота, но я прочитал в справке про abs и не понял ничего(

inY2 отрицательно. Можно просто inH := inY1 - inY2. Сделано для наглядности. Abs всего лишь делает отрицательное - положительным.
inH и inW дают не просто высоту и ширину, они как бы задают inY2 и inX2 в нормальной системе координат, где inX1 и inY1 равны нулю. Это и есть ответ на вопрос:

outX := guiW * (Abs(posX - inX1) / inW) 

Вся штука тут в относительности. posX - inX1 отнимаем смещение слева, и приводим X к нормальной системе. Далее делим этот нормальный X на всю длинну отрезка, и получаем коэфициент смещения от начала 0 до конца 1. Умножаем ширину gui окна карты на этот коэфициент, и получаем X исходя из ширины карты.
Abs тут не нужен, так как в изначальной системе координат нет отрицательного X, можно и без него:

outX := guiW * ((posX - inX1) / inW)    

Он нужен только для outY где возможно отрицательное значение.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

19

Re: AHK: отображение точки на координатной плокости

inH := inY1 + Abs(inY2) ; понятно что тут высота, но я прочитал в справке про abs и не понял ничего, не понял зачем использовали Abs и почему прибавляли, когда для нахождения длины вычитали

Геометрия... Для приведения к той самой нормальной системе координат, нам нужны длинны плоскостей начиная от нуля.

inW := inX2-inX1

...


inX1 := 121.0988922
inX2 := 454.7867432

Здесь нет разбега в разные стороны от изначального нуля, мы просто удаляем смещение от нуля, и получаем длинну плоскости.


inY1 := 85.5152516
inY2 := -350.3629761

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

Универсально и правильно, лучше записать и то и другое как:

inH := Abs(inY2-inY1)
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

20

Re: AHK: отображение точки на координатной плокости

Спасибо огромное. Буду сидеть и разбираться.