资讯详情

利用安卓手机的加速度传感器玩Processing游戏

6c3ceaa83d469868961397d619247fe8.png

图1

前几天在安卓手机上试通了Processing程序,今天趁热打铁,挖掘安卓手机的加速度传感器,让它和Processing画布中物体的互动。

手机中的加速度传感器X、Y、Z加速度值通过Processing特殊函数反馈值如下图所示。

64828d98c7ee7ae9faa4b292b46b0a72.png

图2

当手机水平放置时,X和Y轴值接近0,Z轴值接近10。如图所示,纵向手持手机顺时针旋转90度,则X轴值为-10,逆时针旋转90度X轴值为10。若横向手持手机,如图1所示,顺时针旋转90度,则Y轴值为10,逆时针旋转90度X轴值为-10。

现在我特意做了一个Processing游戏是水平手持手机,使用加速传感器Y轴值,控制一个带嘴的黄色球在画布中左右移动,如图1所示。

利用加速度传感器写Processing与普通方法相比,应特别注意在程序所在的文件夹中人为添加程序AccelerometerManager.java文件。我可以看到我写的程序所在的文件夹已经文件。

403476c31cb9ded54dd8e342228eb78d.png

图3

如果你想做另一个加速传感器Processing该程序还应人工添加此文件。本文件可以解压我上传的文章介绍Processing找到游戏的文件夹。请下载程序:Accelerater_Andriod.rar

我用的Processing软件版本为Processing 3.0a4.我用这个版本试通了安卓手机的运行Processing。

Processing游戏任务如下:Processing手机上的画布显示模式定为水平显示。当水平手持手机时,右手向下,左手向上,顺时针旋转手机超过一定角度时,加速度传感器Y轴值大于2,画布中的带嘴球向右移动。同样,当手机逆时针旋转时,加速传感器Y轴值小于-2,带嘴球会转身,嘴会转向左,球会向左移动。如果手机放在水平位置左右,当加速度传感器Y当轴值大于-2且小于2时,带嘴球立即停止移动。同时,如果带嘴球移动到画布的边缘,它也会停止移动。

我给程序的注释很详尽,大家看看,注意有关加速度传感器的X、Y、Z我用红色字体标记了如何读取轴值的程序段。

今天我发现,Processing无论是在编程环境中Andriod在模式下,还是Java如果在模式下,可以编写和修改程序Andriod在模式下保存程序,下次重新打开程序时,程序的编程环境将直接处于Andriod模式下。当然,如果要将程序下载到手机中,必须将编程环境切换到Andriod模式。

点击编程环境中的播放操作按钮,下载程序和在手机中操作程序,两个任务可以一起完成。你只需要在手机上等待Processing画面可以出现,然后你可以玩这个Processing游戏,挺好玩的!

Processing程序:

int radius =40./带嘴的球半径为40像素

float step=240; /带嘴球X轴向的初始位置是240像素

float speed =1.5;//带嘴球移动步长初始设置1.5像素

int direction=0. //手机放置状态最初设置为水平状态

int dir_state=1; //带嘴球最初设置为向左移动

//声明accel为AccelerometerManager对象

AccelerometerManager accel;

///全局变量ax、ay、az用于存储手机中的加速度传感器X、Y、Z的加速度值

float ax,ay,az;

//初始化

void setup(){

size(480,240)X轴480像素,Y轴240像素

smooth(); ///打开抗锯齿功能,使线条轮廓光滑

ellipseMode(RADIUS);//设置画圆模式为半径模式

accel = new AccelerometerManager(this);///启动加速管理器

//Processing手机显示时,画布被锁定为横向显示。

///手持手机时,如果要将显示模式锁定为纵向显示,

//则命令为orientation(PORTRAIT);

orientation(LANDSCAPE);

}

//主程序

void draw(){

background(127)

fill(255,255,0);/带嘴球填满黄色

step =speed*dir_state;///计算带嘴球实时移动的位置

///加速度传感器Y轴值大于2,手机放置状态为向右倾斜

if(ay> 2) direction =1;

///加速度传感器Y轴值小于-2,手机向左倾斜

else if(ay

///加速度传感器Y轴值大于-2,小于2,手机水平放置

else direction =0;

///当手机向右倾斜时,球还没有达到画布的右边

if(direction ==1 && step<= width-radius){

arc(step,120,radius,radius,0.52,5.76)

dir_state=1.///球设置向右移动

speed=1.5; ///球移动步长设置为1.5像素

}

///当手机向右倾斜时,球已经到达画布的右边

if(direction ==1 && step> width-radius){

arc(step,120,radius,radius,0.52,5.76)

dir_state=1.///球设置向右移动

speed=0; //球移动步长设置为0,因此球停止移动

}

///当手机向左倾斜时,球还没有达到画布的左边缘

if(direction ==-1 && step>= radius)

arc(step,120,radius,radius,3.67,8.9);//球嘴向左

dir_state=-1.//球设置为向左移动

speed=1.5; ///球移动步长设置为1.5像素

}

///当手机向左倾斜时,球已经到达画布的左边

if(direction ==-1 && step< radius)

arc(step,120,radius,radius,3.67,8.9);//球嘴向左

dir_state=-1;//圆球设置为向左移动

speed=0; //球移动步长设置为0,因此球停止移动

}

///当手机水平放置时

if(direction ==

//同时,如果球在停止移动前向右移动

if(dir_state=={

arc(step,120,radius,radius,0.52,5.76)

speed=0; //球移动步长设置为0,因此球停止移动

}

//同时,如果球在停止移动前向左移动

if(dir_state=={

arc(step,120,radius,radius,3.67,8.9); //球嘴向左

speed=0; //球移动步长设置为0,因此球停止移动

}

}

}

////手机中加速传感器X、Y、Z加速度值,

//赋值给全局变量ax、ay、az

public void accelerationEvent(float x,float y, float z) {

ax = x;

ay = y;

az = z;

}

标签: 挖机传感器怎么安装

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台