代碼
init(0, 0)
local screenWidth, screenHeight= getScreenSize();
local distanceTimeRate = 1.32
local targetPositionOffset = screenHeight * 0.013
function Touch(x, y, milliSecond)
? ? touchDown(x, y)
? ? mSleep(milliSecond)
? ? touchUp(x, y)
end
function main()
dialog("請在5秒內(nèi)打開游戲,并點擊開始按鈕", 0);
mSleep(5000)
DoLoop()
end
function DoLoop()
for i = 1, 1000 do
? keepScreen(true);?
? if DoJump() == false then
? keepScreen(false);
? break
? end
? keepScreen(false);
? mSleep(2500)
end
end
function DoJump()
local x, y = GetCalcSelfPosition()
if x == -1 or x == 0 then
? return false
end
local endX = screenWidth -- 1080 1920
local endY = screenHeight * 0.7
local startX = 0
local startY = screenHeight * 0.2
if x < screenWidth / 2 then
? startX =? screenWidth / 2
else
? endX = screenWidth / 2
end
local targetX, targetY = GetTargetPosition(startX, startY, endX, endY)
local distance = math.sqrt( (x - targetX) * (x - targetX) + (y - targetY) * (y - targetY) )
local pressTime = CalcHoldTime(distance)
Touch(100,100, pressTime)
return true
end
function GetCalcSelfPosition()
x,y = findMultiColorInRegionFuzzy( 0x38365e, "-16|-6|0x35335a,13|-5|0x39375f", 98, 0, 0, screenWidth, screenHeight)
return x, y
end
function GetTargetPosition(startX, startY, endX, endY)
local step = 3
local r, g, b, rr, gg, bb
for y = startY , endY, step do
? r, g, b = getColorRGB(1, y)
? for x = startX, endX , step do
? rr, gg, bb? = getColorRGB(x, y)
? if isColor(r, g, b, rr, gg, bb, 98)? then
? ? r = rr
? ? g = gg
? ? b = bb
? else
? ? return x, y + targetPositionOffset
? end
? end
end
return -1, -1
end
function isColor(rr, gg, bb, r, g, b ,s)
? ? local fl,abs = math.floor,math.abs
? ? s = fl(0xff*(100-s)*0.01)
? ? if abs(r-rr)<s and abs(g-gg)<s and abs(b-bb)<s then
? ? ? ? return true
end
return false
end
function CalcHoldTime(distance)
return distance * distanceTimeRate
end
main()
如果腳本跑的并不準確,可以修改參數(shù)
distanceTimeRate: 數(shù)字越大表示蓄力時間越長
targetPositionOffset: 表示方塊最上方的點,距離中心點的偏移
如果還是不行的話,那就算了吧...
思路
1.確定自己的當前位置
直接查找像素就可以了
2.確定目標點位置
可以通過自己當前的位置判斷一個大致的范圍。
然后通過從左上,到右下角,依次遍歷像素。找到方塊最上方的像素點。
然后把y + 上一個大概的值來確定。
3.距離與時間轉(zhuǎn)換
游戲的公式是線性的,直接乘以系數(shù)就可以了
使用方法
**必備條件:root了的android手機**
Android手機安裝觸動精靈
左上角Wifi傳輸
復(fù)制上述代碼(直接手機新建腳本復(fù)制,會導(dǎo)致代碼格式變亂,沒法運行,得通過電腦wifi傳輸?shù)确绞絹韨鬏敚∧_本放在目錄TouchSprite/lua/下,文件名可以取為main.lua)
勾選該腳本
點擊右側(cè)菜單,點擊立即運行(按照提示進行即可)
需要優(yōu)化的點
0. 并沒有去精確的識別位置
1. sleep函數(shù)并不精確,需要一個更加精確的方式來控制
2. 不同分辨率的屏幕,并沒有做完美的適配(我的是1080 * 1920)
3. 距離時間的比率,不應(yīng)該粗暴的用一個值去控制,應(yīng)該用兩個值去分別乘以x,y的距離,然后再算距離(這得看游戲畫面本身的屏幕適配是如何做的)
4. 性能差的機型,跑得并不穩(wěn)定(我用紅米2,跑了大概10次,最高跑到2000多分,最低只跑了幾百分),這有一部分是因為“優(yōu)化點 1”導(dǎo)致的。
5. ...
其它的方式:
除了手動模擬操作,應(yīng)該還可以直接截取網(wǎng)絡(luò)請求,通過篡改分數(shù)來達到目的。
(不過感覺這樣做的話,就沒有了好看的視覺效果...)