2015-12-10 42 views
0

我爲Piano Tiles 2創建了一個簡單的宏,以查看是否可以無限期地自動化它。 我的代碼在這裏:試圖找出一個區域的4個座標

search = true 
region = {100, 500, 500, 1} 
while search do 
    findColorTap(0, 1, region); 
    findColorTap(258, 1, region); 
    findColorTap(16758018, 1, region); 
    usleep(5000) 
end 

適用於所有三個瓷磚。

--0 being jet black notes 
--258 being hold notes which have a smaller "hitbox" 
--16758018 being extra notes which have an even small "hitbox" 

目前該腳本將檢查屏幕上的每一種顏色的1像素水平線上從開始到結束(100-> 500),並且當它與顏色我需要返回,它將輕按像素一次。

我很好奇如何從該地區只拿4分,並檢查那些一樣。 我也很好奇,如果以上是可能的,Lua能夠比檢查區域更快或更慢地編譯腳本。

我的想法是,一旦findColorTap返回我需要的值。其他檢查本質上是在浪費寶貴的時間。但是,我也知道代碼越複雜,我的手機就越難處理這些命令。

我曾嘗試:

例1

check = true 

while check do 
    note1 = getColor(80,500) 
    note2 = getColor(240,500) 
    note3 = getColor(400,500) 
    note4 = getColor(560,500) 
end 

while check do 
if note1 == 0 then 
    tap(80,500) 
elseif note1 == 258 then 
    tap(80,500) 
elseif note1 == 16758018 then 
    tap(80,500) 
    else 
    end 
end 

這結束了在所有要麼不讀任何票據或當它抓住它屬於不同步的遊戲。

例2

function fct(startX, maxX, y, increment) 
    for x=startX,maxX,160 do 
     check=getColor(x,y) 
     if check == 0 then 
     return(x) 
     end 
    tap(x,y) 
    end 
end 

v = true 
repeat 
fct(80,560,500) until 
v == false 

這是一個正確的檢查和快得多,但在錯誤的地點被竊聽。

+0

很難說出你在問什麼,findColorTap是如何工作的? – warspyking

+0

findColorTap(顏色,發生,區域)。它將檢查我在該區域內的代碼中指定的可變顏色。如果顏色返回與代碼中的顏色相匹配,那麼我的手機將在發現顏色的屏幕上模擬觸摸。所以當這些黑條從屏幕的頂部到底部下落時,手機正在檢查X平面上的一條線,並且當其中一條橫穿y(500)時,它將被點擊。 –

+0

而不是檢查每個'x'從100到600.我只想檢查4個精確像素的變量顏色'0'。但我希望它更有效率,這就是它可能會遇到的問題。 –

回答

0

其他檢查本質上是在浪費寶貴的時間。但是,我也知道代碼越複雜,我的手機就越難處理這些命令。

的「其他檢查」你打電話是大大比你的任何代碼更復雜。

你不用擔心你有多少行代碼,你需要擔心計算上的問題昂貴的正在執行很多。

Lua能夠比檢查區域更快或更慢地編譯腳本。

你的意思是運行更快。編譯在啓動時完成一次,不會影響運行速度。

是的,檢查4個像素比數百個像素更快。

我已經試過

說你已經試過什麼呢我們沒有好,除非你告訴我們爲什麼它沒有工作

while check do 
    note1 = getColor(80,500) 
    note2 = getColor(240,500) 
    note3 = getColor(400,500) 
    note4 = getColor(560,500) 
end 

while check do 
    if note1 == 0 then 
     tap(80,500) 
    elseif note1 == 258 then 
     tap(80,500) 
    elseif note1 == 16758018 then 
     tap(80,500) 
     else 
     end 
    end 
end 

這看起來永遠不會離開第一環(除非您設置了checkgetColor)。

此外,第二個循環中的每個分支都會產生完全相同的分支。

很難告訴你在問什麼,但如果我們的目標是在指定的地點檢查的顏色,然後點擊在這取決於你發現顏色另一個指定的位置,你可以做這樣的事情:

-- which points to check 
points = { 
    { x= 80, y=500 }, 
    { x=240, y=500 }, 
    { x=400, y=500 }, 
    { x=560, y=500 }, 
} 

-- map a found color to a resulting tap point 
tapPoints = { 
    [0]  = { x=80, y=500 }, -- these 
    [258]  = { x=80, y=500 }, -- should 
    [16758018] = { x=80, y=500 }, --  be different! 
} 

while check do 
    for checkPoint in ipairs(points) do 
     local note = getColor(checkPoint.x, checkPoint.y) 
     local tapPoint = tapPoints[note] 
     tap(tapPoint.x, tapPoint.y) 
    end 
end 
+0

我喜歡在表格中設置點。這將有所幫助。對於每個[0],[258]等,我應該從表中設置特定的點。我需要四種tapPoints用於每種顏色。此外,我瞭解所有事情,直到最後一塊。我是否錯過宣佈checkPoint的地方,並且因爲我真的無法理解它,本地note = getColors()和tapPoints [note]有什麼關係? –

+0

'checkPoint'是循環變量,'tapPoint [note]'只是查表。這是非常基本的Lua。正如我在一週前推薦的,[我的回答是你的其他問題](http://stackoverflow.com/a/34073130/501459),你需要學習Lua。試圖通過反覆試驗來實現這一點,實際上從長遠來看,會花費你更多的時間。獲取一個編程的副本在Lua中,5.1的免費版已經不夠好了,至少要學習該語言的基礎知識。 – Mud