加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 教程 > 正文

Android游戏开发之触摸轨迹曲线的达成处理

发布时间:2021-11-25 18:35:55 所属栏目:教程 来源:互联网
导读:Android提供了一个Path类 , 顾名思义这个类可以设置曲线路径轨迹。任何无规则的曲线实际上都是由若干条线段组成,而线段的定义为两点之间最短的一条线。path类就 可以记录这两点之间的轨迹,那么若干个Path 就是我们须要绘制的无规则曲线。 下面介绍一下API

Android提供了一个Path类 , 顾名思义这个类可以设置曲线路径轨迹。任何无规则的曲线实际上都是由若干条线段组成,而线段的定义为两点之间最短的一条线。path类就 可以记录这两点之间的轨迹,那么若干个Path 就是我们须要绘制的无规则曲线。
 
下面介绍一下API 中path类设置轨迹路径的方法
 
 
public class
 
Path
extends Object
java.lang.Object
        android.graphics.Path
 
quadTo(float x1, float y1, float x2, float y2)
Add a quadratic bezier from the last point, approaching control point (x1,y1), and ending at (x2,y2).
 
解释:
 
参数1 轨迹起始点X坐标
 
参数2 轨迹起始点Y坐标
 
参数3 轨迹结束点X坐标
 
参数4 轨迹结束点Y坐标
 
所以根据这个参数就可以设置一条线段轨迹。
 
同学们,我们先看一张效果图。 为了设置一条比较圆滑好看的曲线我们需要对游戏画笔进行一些设置。注释已经在代码中写的很清楚了,在这里我详细说一下 设置画笔风格  mPaint.setStyle(Paint.Style.STROKE); 意思是设置画笔的风格 android 画笔一共提供了三种风格Paint.Style.STROKE 、Paint.Style.FILL、Paint.Style.FILL_AND_STROKE 意思分别为 空心 、实心、实心与空心 。如果不设置的话默认为 Paint.Style.FILL,在这里必需设置成空心 因为如果一旦设置成实心或者实心与空心那么画笔会把path路径中间包住这样就不是曲线线段了,所以同学们注意一下这里。
 
/** 创建曲线画笔 **/  
mPaint = new Paint();  
mPaint.setColor(Color.BLACK);  
/**设置画笔抗锯齿**/  
mPaint.setAntiAlias(true);  
/**画笔的类型**/  
mPaint.setStyle(Paint.Style.STROKE);  
/**设置画笔变为圆滑状**/  
mPaint.setStrokeCap(Paint.Cap.ROUND);  
/**设置线的宽度**/  
mPaint.setStrokeWidth(5);  
 
 
在触摸按下事件中 通过moveTo() 方法设置触摸屏幕点为轨迹的起始点,这样在触摸移动事件中设置曲线的轨迹 起始点为上次触摸点 结束点为本次触摸点。使用quadTo方法记录每次移动产生的一个曲线线段 然后将所有的曲线线段绘制在屏幕中,如果触摸抬起将调用reset()方法重置曲线轨迹。
 
@Override  
public boolean onTouchEvent(MotionEvent event) {  
    /** 拿到触摸的状态 **/  
    int action = event.getAction();  
    float x = event.getX();  
    float y = event.getY();  
    switch (action) {  
    // 触摸按下的事件   
    case MotionEvent.ACTION_DOWN:  
    /**设置曲线轨迹起点 X Y坐标**/  
    mPath.moveTo(x, y);  
    break;  
    // 触摸移动的事件   
    case MotionEvent.ACTION_MOVE:  
    /**设置曲线轨迹**/  
    //参数1 起始点X坐标   
    //参数2 起始点Y坐标   
    //参数3 结束点X坐标   
    //参数4 结束点Y坐标   
    mPath.quadTo(mposX, mposY, x, y);  
    break;  
    // 触摸抬起的事件   
    case MotionEvent.ACTION_UP:  
    /**按键抬起后清空路径轨迹**/  
    mPath.reset();  
    break;  
    }  
   //记录当前触摸X Y坐标   
    mposX = x;  
    mposY = y;  
    return true;  
}  

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读