在使用surfaceView開發(fā)一個小游戲的過程中,遇到的一些問題記錄:
一、使用
類A繼承自surfaceView,在構(gòu)造函數(shù)中使用getHolder()得到SurfaceHolder對象,SurfaceHolder可以得到Canvas對象,有了Canvas對象就可以做畫圖相關(guān)的操作了。
SurfaceHolder holder = getHolder(); Canvas canvas = holder.lock(); if(canvas == null){ return; } canvas.save(); //畫圖相關(guān)操作 canvas.restore(); holder.unlockCanvasAndPost(canvas);
以上就是surfaceView的通用使用方式了,可以在線程中使用(這是與View的大區(qū)別)。
以上代碼有幾個注意點(diǎn)
1、必須判斷canvas為空,如果使用線程循環(huán)操作時,在應(yīng)用切換到后臺,或退出應(yīng)用時,canvas得到的對象是為空的。
2、必須為canvas繪制背景圖,如果沒有背景圖,繪制的圖像在執(zhí)行幾次循環(huán)后,就會出現(xiàn)重影(在這個地方被坑了半天)。
二、開發(fā)游戲的時候參考了http://tanqisen.github.io/blog/2013/09/13/develop-android-wechat-flight-game-step-by-step-1/ 這篇文章,博主寫的游戲是一個小的框架,很到的體現(xiàn)了面向?qū)ο蟮乃枷搿T谶@篇文章中博主的資源文件(.plist)是從微信上扣出來的。也沒有對旋轉(zhuǎn)的圖片進(jìn)行處理。這里補(bǔ)上我的一些處理經(jīng)驗(yàn)。
1、plist圖像文件的生成和json字符串的生成。
生成以上文件使用了一個破解版的工具TexturePacker。在處理這個問題時一個有游戲開發(fā)經(jīng)驗(yàn)的同事給了我很大的幫助。非常感謝他。
2、對于在plist中被旋轉(zhuǎn)圖片的處理。
前提是使用TexturePacker生成的json格式的文件。將http://tanqisen.github.io/blog/2013/09/13/develop-android-wechat-flight-game-step-by-step-1/的代碼下載下來后,找到GameContext中的displayArt()方法。
canvas.save(); Sprite s = spriteManager.getSprite(a.sprite); Rect spriteFrame = a.spriteFrame(); Rect colorRect = s.spriteColorRect; int left = 0,top = 0,right = 0,bottom = 0; if(s.isRotated()){ int height = bmp.getWidth(); Frame frame = s.getFrame(); left = frame.getY()+spriteFrame.left; top = height-(frame.getX()+frame.getH())+spriteFrame.top; right = left + frame.getW(); bottom = top + frame.getH(); Matrix matrix = new Matrix(); int px = 0,py = 0; px = spriteFrame.left; py = spriteFrame.top+height; matrix.setTranslate(px, py); matrix.postRotate(-90,px, py); canvas.clipRect(left, top, right, bottom); canvas.drawBitmap(bmp,matrix,paint); }else{ left = spriteFrame.left; top = spriteFrame.top; right = left + colorRect.width(); bottom = top + colorRect.height(); canvas.clipRect(left<viewRect.left?viewRect.left:left, top<viewRect.top?viewRect.top:top, right>viewRect.right?viewRect.right:right, bottom>viewRect.bottom?viewRect.bottom:bottom); canvas.drawBitmap(bmp, left - colorRect.left, top - colorRect.top, paint); } canvas.restore();
這是對被旋轉(zhuǎn)順時針旋轉(zhuǎn)90度的處理方法。
結(jié)語:
感謝Cooper的文章分享,在進(jìn)入陌生的開發(fā)領(lǐng)域時有一位有經(jīng)驗(yàn)的朋友幫助是很重要的。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)頁題目:surfaceView開發(fā)游戲初涉一-創(chuàng)新互聯(lián)
文章來源:http://www.chinadenli.net/article12/dgiodc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、動態(tài)網(wǎng)站、網(wǎng)站改版、建站公司、響應(yīng)式網(wǎng)站、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容