Android游戏开发基础part2--Canvas画布
游戲開(kāi)發(fā)基礎(chǔ)part2--Canvas畫(huà)布
又過(guò)了一周才繼續(xù)做總結(jié),四級(jí)結(jié)束了,應(yīng)該可以多點(diǎn)時(shí)間學(xué)習(xí)游戲編程了。
Canvas畫(huà)布類(lèi)是一個(gè)在游戲當(dāng)中擔(dān)當(dāng)非常重要的角色,它可以繪制出不同的圖形和圖片,可以說(shuō)沒(méi)有了畫(huà)布就不能做出畫(huà)面炫麗的游戲。
下面總結(jié)一下畫(huà)布類(lèi)Canvas封裝的常用的函數(shù):
具體說(shuō)明如下:
1.drawColor(int color)
作用:繪制顏色覆蓋畫(huà)布,常用于刷屏
參數(shù):顏色值,也可用十六進(jìn)制形式表示(ARGB)
2.drawText(String text,float x,float y,Paint paint)
作用:繪制文本字符
第一個(gè)參數(shù):文本內(nèi)容
第二、三個(gè)參數(shù):文本的X,Y坐標(biāo)
第四個(gè)參數(shù):畫(huà)筆實(shí)例
3.drawPoint(float x,float y,Paint paint)
作用:繪制像素點(diǎn)
第一、二個(gè)參數(shù):像素的坐標(biāo)
第三個(gè)參數(shù):畫(huà)筆實(shí)例
4.drawPoints(float[] pts,Paint paint)
作用:繪制多個(gè)像素點(diǎn)
第一個(gè)參數(shù):Float數(shù)組,數(shù)組中放置的是多個(gè)像素點(diǎn)的X,Y坐標(biāo)
第二個(gè)參數(shù):畫(huà)筆實(shí)例
5.drawLine(float startX,float startY,float stopX,float stopY,Paint paint)
作用:繪制一條直線
前兩個(gè)參數(shù):起點(diǎn)的X,Y坐標(biāo)
后兩個(gè)參數(shù):終點(diǎn)的X,Y坐標(biāo)
最后一個(gè)參數(shù):畫(huà)筆實(shí)例
6.drawLines(float[] pts,Paint paint)
作用:繪制多條直線
第一個(gè)參數(shù):Float數(shù)組,數(shù)組中放置的是多個(gè)直線的起始點(diǎn)與終點(diǎn)X,Y坐標(biāo)
第二個(gè)參數(shù):畫(huà)筆實(shí)例
7.drawRact(Rect r,Paint paint)
作用:繪制矩形
第一個(gè)參數(shù):矩形實(shí)例
第二個(gè)參數(shù):畫(huà)筆實(shí)例
8.drawRoundRect(RectF rect,float rx,float ry,Paint paint)
作用:繪制圓角矩形
第一個(gè)參數(shù):矩形實(shí)例
第二個(gè)參數(shù):圓角X軸的半徑
第三個(gè)參數(shù):圓角Y軸的半徑
第四個(gè)參數(shù):畫(huà)筆實(shí)例
9.drawCircle(float cx,float cy,float radius,Paint paint)
作用:繪制圓形
第一、二個(gè)參數(shù):圓形的中心點(diǎn)X,Y坐標(biāo)
第三個(gè)參數(shù):圓形的半徑
第四個(gè)參數(shù):畫(huà)筆實(shí)例
10.drawArc(RectF oval,float startAngle,float sweepAngle,boolean useCenter,Paint paint)
作用:繪制弧形(扇形)
第一個(gè)參數(shù):矩形實(shí)例
第二個(gè)參數(shù):弧形的起始角度
第三個(gè)參數(shù):弧形的終止角度
第四個(gè)參數(shù):是否繪制中心點(diǎn);如果為真,起始點(diǎn)與終止點(diǎn)都會(huì)分別連接中心點(diǎn),從而形成封閉圖形;如果為假,則起始點(diǎn)直接連到終止點(diǎn),從而形成封閉圖形。
第五個(gè)參數(shù):畫(huà)筆實(shí)例
11.drawOval(RectF oval,Paint paint)
作用:繪制橢圓
第一個(gè)參數(shù):矩形實(shí)例
第二個(gè)參數(shù):畫(huà)筆實(shí)例
12.drawPath(Path path,Paint paint)
作用:繪制指定路徑圖形
第一個(gè)參數(shù):路徑實(shí)例
第二個(gè)參數(shù):畫(huà)筆實(shí)例
13.drawTextOnPath(String text,Path path,float hOffset,float vOffset,Paint paint)
作用:將文本沿著指定路徑進(jìn)行繪制
第一個(gè)參數(shù):文本
第二個(gè)參數(shù):路徑實(shí)例
第三個(gè)參數(shù):文本距離繪制起點(diǎn)的距離
第四個(gè)參數(shù):文本距離路徑的距離
第五個(gè)參數(shù):畫(huà)筆實(shí)例
?
創(chuàng)建項(xiàng)目實(shí)例:CanvasProject
項(xiàng)目運(yùn)行效果圖:
項(xiàng)目代碼:
==>MySurfaceView.java
package com.cp;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PaintFlagsDrawFilter;
import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.RectF;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.SurfaceHolder.Callback;/*** * @author Himi**/
public class MySurfaceView extends SurfaceView implements Callback, Runnable {//用于控制SurfaceViewprivate SurfaceHolder sfh;//聲明一個(gè)畫(huà)筆private Paint paint;//聲明一條線程private Thread th;//線程消亡的標(biāo)識(shí)位private boolean flag;//聲明一個(gè)畫(huà)布private Canvas canvas;//聲明屏幕的寬高private int screenW, screenH;//設(shè)置畫(huà)布繪圖無(wú)鋸齒private PaintFlagsDrawFilter pfd = new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);/*** SurfaceView初始化函數(shù)*/public MySurfaceView(Context context) {super(context);//實(shí)例SurfaceHoldersfh = this.getHolder();//為SurfaceView添加狀態(tài)監(jiān)聽(tīng)sfh.addCallback(this);//實(shí)例一個(gè)畫(huà)筆paint = new Paint();//設(shè)置畫(huà)筆顏色為白色paint.setColor(Color.WHITE);//設(shè)置焦點(diǎn)setFocusable(true);}/*** SurfaceView視圖創(chuàng)建,響應(yīng)此函數(shù)*/@Overridepublic void surfaceCreated(SurfaceHolder holder) {screenW = this.getWidth();screenH = this.getHeight();flag = true;//實(shí)例線程th = new Thread(this);//啟動(dòng)線程th.start();}/*** 游戲繪圖*/
public void myDraw() {try {canvas = sfh.lockCanvas();if (canvas != null) {//----設(shè)置畫(huà)布繪圖無(wú)鋸齒canvas.setDrawFilter(pfd);//----利用填充畫(huà)布,刷屏canvas.drawColor(Color.BLACK);//----繪制文本canvas.drawText("drawText", 10, 10, paint);//----繪制像素點(diǎn)canvas.drawPoint(10, 20, paint);//----繪制多個(gè)像素點(diǎn)canvas.drawPoints(new float[] { 10, 30, 30, 30 }, paint);//----繪制直線canvas.drawLine(10, 40, 50, 40, paint);//----繪制多條直線canvas.drawLines(new float[] { 10, 50, 50, 50, 70, 50, 110, 50 }, paint);//----繪制矩形canvas.drawRect(10, 60, 40, 100, paint);//----繪制矩形2Rect rect = new Rect(10, 110, 60, 130);canvas.drawRect(rect, paint);canvas.drawRect(rect, paint);//----繪制圓角矩形RectF rectF = new RectF(10, 140, 60, 170);canvas.drawRoundRect(rectF, 20, 20, paint);//----繪制圓形canvas.drawCircle(20, 200, 20, paint);//----繪制弧形canvas.drawArc(new RectF(150, 20, 200, 70), 0, 230, true, paint);//----繪制橢圓canvas.drawOval(new RectF(150, 80, 180, 100), paint);//----繪制指定路徑圖形Path path = new Path();//設(shè)置路徑起點(diǎn)path.moveTo(160, 150);//路線1path.lineTo(200, 150);//路線2path.lineTo(180, 200);//路徑結(jié)束path.close();canvas.drawPath(path, paint);//----繪制指定路徑圖形Path pathCircle = new Path();//添加一個(gè)圓形的路徑pathCircle.addCircle(130, 260, 20, Path.Direction.CCW);//----繪制帶圓形的路徑文本canvas.drawTextOnPath("PathText", pathCircle, 10, 20, paint);}} catch (Exception e) {// TODO: handle exception} finally {if (canvas != null)sfh.unlockCanvasAndPost(canvas);}
}/*** 觸屏事件監(jiān)聽(tīng)*/@Overridepublic boolean onTouchEvent(MotionEvent event) {return true;}/*** 按鍵事件監(jiān)聽(tīng)*/@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {return super.onKeyDown(keyCode, event);}/*** 游戲邏輯*/private void logic() {}@Overridepublic void run() {while (flag) {long start = System.currentTimeMillis();myDraw();logic();long end = System.currentTimeMillis();try {if (end - start < 50) {Thread.sleep(50 - (end - start));}} catch (InterruptedException e) {e.printStackTrace();}}}/*** SurfaceView視圖狀態(tài)發(fā)生改變,響應(yīng)此函數(shù)*/@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}/*** SurfaceView視圖消亡時(shí),響應(yīng)此函數(shù)*/@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {flag = false;}
}
==>MainActivity.java
package com.cp;import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;public class MainActivity extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//設(shè)置全屏this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);requestWindowFeature(Window.FEATURE_NO_TITLE);//顯示自定義的SurfaceView視圖setContentView(new MySurfaceView(this));}
}
?
?
?
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/wwj9413/archive/2012/06/18/2638571.html
總結(jié)
以上是生活随笔為你收集整理的Android游戏开发基础part2--Canvas画布的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 常见http状态码说明(转)
- 下一篇: 《c和指针》笔记5