哥最近手殘,遊戲打多了,代碼敲多了之後,我發現我的手指的神經有點不聽使喚,因此flappybird我只能拿到個位元的分數(當然從來沒看過什麼高分教程或者使用什麼作弊方法)
但是我還是怒了,我打算弄一個水管能讓我自動鑽過去的flappybird!
我在網上找了一個web版的鳥的資源,那過來之後越發覺得這資源醜陋,而且極為不全,背景都沒有,我又怒了
想想,最原生態的資源就是遊戲包裡面的資源,所以,我打算從裡面把他拆出來!
1.從像素鳥的apk裡面找到那張通過texturePacker之類的工具拼過的圖片,對,沒錯,拿個解壓軟體開啟apk,找呀找!就是assets\gfx\atlas.png
2.這是一張拼過的圖片,要知道這張圖片是怎麼拼出來的,總得找到設定檔把,繼續找,就是res/raw/atlas.txt開啟這檔案,你會發現這麼一下東西
要怎麼解讀這些數字呢?且聽如下分解
首先,每一行代表一個圖片資源,第一個不用猜都知道,是檔案名稱
第二個和第三個分別是圖片的寬度和高度,單位是像素
第四個和第五個分別是圖片左上方的定點的x座標和y座標,這是他們的座標占整張圖片的比例(換句話來說就是當整張圖片長寬為1時這張圖片左上方頂點的座標)
第六個和第七個分別是圖片寬度和高度所佔總長度和總寬度的比例
3.瞭解了以上資訊之後的程式員都會不由得微微一笑,看老子不把你給切出來!你要用ps慢慢切,我不攔著你,但是讓電腦自動給我切好會帶來更爽的趕腳!
切圖,我用python + opencv(這玩意兒我在搞我樹莓派的時候也在window上面搭好了環境,所以,毫不猶豫),要找怎麼配環境呢就搜一下“python opencv 環境搭建”
代碼麼,我加上注釋就貼在下面了
import cv2.cv as cvimport osimg = cv.LoadImage("e:/output/atlas.png", -1) #讀取原圖(這就是那張拼過的圖片,我改了一下名字)mask = cv.LoadImage("e:/output/atlas.png", 0) #讀取maskwidth, height = cv.GetSize(img)img2 = cv.CreateImage((width, height), 8, 4) #建立一張背景透明的圖片cv.Copy(img, img2, mask) #copy過去file = open("e:/output/atlas.txt") #這是輸入的檔案for line in file: strs = line.split(" ") fileName = strs[0] imgWidth = int(strs[1]) imgHeight = int(strs[2]) imgX = float(strs[3])*width imgY = float(strs[4])*height cv.SetImageROI(img2, (int(imgX), int(imgY), imgWidth, imgHeight)); #設定感興趣的地區 cv.SaveImage("e:/output/" + fileName + ".png", img2) #根據讀取到的檔案名稱儲存到這個路徑下
4. 抄完哥的代碼之後直接就run一把,你會驚奇的發現你的輸出檔案夾裡面全都是這鳥遊戲的素材了,哈哈,擷取素材大功告成,下面就是將圖片全貼到哥的小遊戲裡了
5. 對於經過上面步驟不能拿到素材的童鞋們,能擷取到素材的哥們給他們默哀一分鐘吧!
6. 再來一個圖,讓你們羨慕一下