Android游戏开发基础part2--Canvas画布
游戲開發(fā)基礎(chǔ)part2--Canvas畫布
又過了一周才繼續(xù)做總結(jié),四級結(jié)束了,應(yīng)該可以多點時間學(xué)習(xí)游戲編程了。
Canvas畫布類是一個在游戲當(dāng)中擔(dān)當(dāng)非常重要的角色,它可以繪制出不同的圖形和圖片,可以說沒有了畫布就不能做出畫面炫麗的游戲。
下面總結(jié)一下畫布類Canvas封裝的常用的函數(shù):
具體說明如下:
1.drawColor(int color)
作用:繪制顏色覆蓋畫布,常用于刷屏
參數(shù):顏色值,也可用十六進(jìn)制形式表示(ARGB)
2.drawText(String text,float x,float y,Paint paint)
作用:繪制文本字符
第一個參數(shù):文本內(nèi)容
第二、三個參數(shù):文本的X,Y坐標(biāo)
第四個參數(shù):畫筆實例
3.drawPoint(float x,float y,Paint paint)
作用:繪制像素點
第一、二個參數(shù):像素的坐標(biāo)
第三個參數(shù):畫筆實例
4.drawPoints(float[] pts,Paint paint)
作用:繪制多個像素點
第一個參數(shù):Float數(shù)組,數(shù)組中放置的是多個像素點的X,Y坐標(biāo)
第二個參數(shù):畫筆實例
5.drawLine(float startX,float startY,float stopX,float stopY,Paint paint)
作用:繪制一條直線
前兩個參數(shù):起點的X,Y坐標(biāo)
后兩個參數(shù):終點的X,Y坐標(biāo)
最后一個參數(shù):畫筆實例
6.drawLines(float[] pts,Paint paint)
作用:繪制多條直線
第一個參數(shù):Float數(shù)組,數(shù)組中放置的是多個直線的起始點與終點X,Y坐標(biāo)
第二個參數(shù):畫筆實例
7.drawRact(Rect r,Paint paint)
作用:繪制矩形
第一個參數(shù):矩形實例
第二個參數(shù):畫筆實例
8.drawRoundRect(RectF rect,float rx,float ry,Paint paint)
作用:繪制圓角矩形
第一個參數(shù):矩形實例
第二個參數(shù):圓角X軸的半徑
第三個參數(shù):圓角Y軸的半徑
第四個參數(shù):畫筆實例
9.drawCircle(float cx,float cy,float radius,Paint paint)
作用:繪制圓形
第一、二個參數(shù):圓形的中心點X,Y坐標(biāo)
第三個參數(shù):圓形的半徑
第四個參數(shù):畫筆實例
10.drawArc(RectF oval,float startAngle,float sweepAngle,boolean useCenter,Paint paint)
作用:繪制弧形(扇形)
第一個參數(shù):矩形實例
第二個參數(shù):弧形的起始角度
第三個參數(shù):弧形的終止角度
第四個參數(shù):是否繪制中心點;如果為真,起始點與終止點都會分別連接中心點,從而形成封閉圖形;如果為假,則起始點直接連到終止點,從而形成封閉圖形。
第五個參數(shù):畫筆實例
11.drawOval(RectF oval,Paint paint)
作用:繪制橢圓
第一個參數(shù):矩形實例
第二個參數(shù):畫筆實例
12.drawPath(Path path,Paint paint)
作用:繪制指定路徑圖形
第一個參數(shù):路徑實例
第二個參數(shù):畫筆實例
13.drawTextOnPath(String text,Path path,float hOffset,float vOffset,Paint paint)
作用:將文本沿著指定路徑進(jìn)行繪制
第一個參數(shù):文本
第二個參數(shù):路徑實例
第三個參數(shù):文本距離繪制起點的距離
第四個參數(shù):文本距離路徑的距離
第五個參數(shù):畫筆實例
?
創(chuàng)建項目實例:CanvasProject
項目運行效果圖:
項目代碼:
==>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;//聲明一個畫筆private Paint paint;//聲明一條線程private Thread th;//線程消亡的標(biāo)識位private boolean flag;//聲明一個畫布private Canvas canvas;//聲明屏幕的寬高private int screenW, screenH;//設(shè)置畫布繪圖無鋸齒private PaintFlagsDrawFilter pfd = new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);/*** SurfaceView初始化函數(shù)*/public MySurfaceView(Context context) {super(context);//實例SurfaceHoldersfh = this.getHolder();//為SurfaceView添加狀態(tài)監(jiān)聽sfh.addCallback(this);//實例一個畫筆paint = new Paint();//設(shè)置畫筆顏色為白色paint.setColor(Color.WHITE);//設(shè)置焦點setFocusable(true);}/*** SurfaceView視圖創(chuàng)建,響應(yīng)此函數(shù)*/@Overridepublic void surfaceCreated(SurfaceHolder holder) {screenW = this.getWidth();screenH = this.getHeight();flag = true;//實例線程th = new Thread(this);//啟動線程th.start();}/*** 游戲繪圖*/
public void myDraw() {try {canvas = sfh.lockCanvas();if (canvas != null) {//----設(shè)置畫布繪圖無鋸齒canvas.setDrawFilter(pfd);//----利用填充畫布,刷屏canvas.drawColor(Color.BLACK);//----繪制文本canvas.drawText("drawText", 10, 10, paint);//----繪制像素點canvas.drawPoint(10, 20, paint);//----繪制多個像素點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è)置路徑起點path.moveTo(160, 150);//路線1path.lineTo(200, 150);//路線2path.lineTo(180, 200);//路徑結(jié)束path.close();canvas.drawPath(path, paint);//----繪制指定路徑圖形Path pathCircle = new Path();//添加一個圓形的路徑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)聽*/@Overridepublic boolean onTouchEvent(MotionEvent event) {return true;}/*** 按鍵事件監(jiān)聽*/@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視圖消亡時,響應(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画布的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常见http状态码说明(转)
- 下一篇: 《c和指针》笔记5