android程序设计魔方矩阵,【图片】【记录】零基础用c4droid写一个3D魔方软件_c4droid吧_百度贴吧...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
9.从前述教程中整理出来的native activity框架
/*请忽视注释中提到的楼层,或结合叜駣的原教程阅读*/
#include
#include
#include
#include
const ASensor *sensor;/* 感应器 */
ASensorEventQueue *sensor_event_queue; /* 感应器事件队列 */
struct android_app *android_app;/* java扔给我们的系统状态 */
EGLSurface surface;/* egl 显示平面 */
EGLDisplay display;/* egl 显示设备 */
EGLContext context;/* egl 显示上下文 */
int x0, y0, x1, y1, x2, y2;
void refresh()
{
int x, y, z;/* 获得陀螺仪矢量的x/y/z值 */
ASensorEvent event;/* 创立一个感应器事件用来储存 */
int looper_id;/* 函数ALooper_pollAll()返回的事件代码 */
struct android_poll_source *source;
eglSwapBuffers(display, surface);/* 交换显示缓冲,display与surface于7楼创建,假定它们是全局变量 */
while ((looper_id = ALooper_pollAll(0, NULL, NULL, (void **)&source)) >= 0) /* 有事件发生,保存事件源到source,并保存事件代码 */
{
if (source)/* 如果事件源有效 */
source->process(android_app, source);
/* 将java扔给我们的系统状态与事件源扔进事件源中名为process的成员函数,对事件进行处理 */
if (looper_id == LOOPER_ID_USER)/* 如果返回的事件标识与我们初始化陀螺仪时设置的标识相同 */
while (ASensorEventQueue_getEvents(sensor_event_queue, &event, 1) > 0) /* 循环从感应器事件队列sensor_event_queue中获得事件,并保存到感应器事件event中,每次保存一个 */
{
x = event.acceleration.x;/* 从感应器事件event的成员acceleration中得到陀螺仪矢量的x值 */
y = event.acceleration.y;/* 从感应器事件event的成员acceleration中得到陀螺仪矢量的y值 */
z = event.acceleration.z;/* 从感应器事件event的成员acceleration中得到陀螺仪矢量的z值 */
}
}
}
int on_input_event(struct android_app *app, AInputEvent * input_event) /* app是java扔给我们的系统状态,input_event是java扔给我们的输入事件 */
{
if (AInputEvent_getType(input_event) == AINPUT_EVENT_TYPE_MOTION) /* 我们用AInputEvent_getType()得知输入事件是屏幕触碰 */
{
x0 = AMotionEvent_getX(input_event, 0);/* 将输入事件和触碰序号0,代入AMotionEvent_getX,得到0号手指的触碰横坐标 */
y0 = AMotionEvent_getY(input_event, 0);/* 将输入事件和触碰序号0,代入AMotionEvent_getX,得到0号手指的触碰纵坐标 */
x1 = AMotionEvent_getX(input_event, 1);/* 将输入事件和触碰序号1,代入AMotionEvent_getX,得到1号手指的触碰横坐标 */
y1 = AMotionEvent_getY(input_event, 1);/* 将输入事件和触碰序号1,代入AMotionEvent_getX,得到1号手指的触碰纵坐标 */
x2 = AMotionEvent_getX(input_event, 2);/* 将输入事件和触碰序号2,代入AMotionEvent_getX,得到2号手指的触碰横坐标 */
y2 = AMotionEvent_getY(input_event, 2);/* 将输入事件和触碰序号2,代入AMotionEvent_getX,得到2号手指的触碰纵坐标 */
}
return 0;/* 应当返回0,但如果认为input_event事件已经完全处理完毕的话,可以返回1 */
}
void on_app_cmd(struct android_app *app, int event_type) /* app是java扔给我们的系统状态,event_type是java扔给我们的事件类型 */
{
switch (event_type)/* 我们根据java扔给我们的事件类型做出不同的反应 */
{
case APP_CMD_INIT_WINDOW:/* java扔给我们的事件类型是:初始化窗口 */
{
const EGLint attribs[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_BLUE_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_RED_SIZE, 8,
EGL_DEPTH_SIZE, 8,
EGL_NONE
};
EGLint w, h, dummy, format;
EGLint numConfigs;
EGLConfig config;
display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
eglInitialize(display, 0, 0);
eglChooseConfig(display, attribs, &config, 1, &numConfigs);
eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format);
ANativeWindow_setBuffersGeometry(app->window, 0, 0, format);
surface = eglCreateWindowSurface(display, config, app->window, NULL);
context = eglCreateContext(display, config, NULL, NULL);
eglMakeCurrent(display, surface, surface, context);
break;
}
case APP_CMD_TERM_WINDOW:/* java扔给我们的事件类型是:关闭窗口 */
eglMakeCurrent(display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
eglDestroyContext(display, context);
eglDestroySurface(display, surface);
eglTerminate(display);
break;
case APP_CMD_GAINED_FOCUS:/* java扔给我们的事件类型是:获得焦点 */
ASensorEventQueue_enableSensor(sensor_event_queue, sensor); /* 为感应器事件队列(sensor_event_queue)启用陀螺仪感应器(sensor) */
ASensorEventQueue_setEventRate(sensor_event_queue, sensor, 1000000 / 60); /* 设定感应器的事件频率,换算后是1/60秒,与一般的屏幕刷新率一致) */
break;
case APP_CMD_LOST_FOCUS:/* java扔给我们的事件类型是:失去焦点 */
ASensorEventQueue_disableSensor(sensor_event_queue, sensor); /* 为感应器事件队列(sensor_event_queue)关闭感应器(sensor) */
break;
}
}
void android_main(struct android_app *app)
{
ASensorManager *sensor_manager;/* 感应器管理器 */
app_dummy();/* 确保glue的功能没有被忽略 */
app->onAppCmd = on_app_cmd;/* 将9楼完成的on_app_cmd回传函数赋值到app的onAppCmd成员 */
app->onInputEvent = on_input_event;/* 将13楼完成的on_input_event回传函数赋值到app的onInputEvent成员 */
android_app = app;/* 将参数app赋值到全局变量android_app */
sensor_manager = ASensorManager_getInstance(); /* 获得感应器管理器 */
sensor = ASensorManager_getDefaultSensor(sensor_manager, ASENSOR_TYPE_ACCELEROMETER); /* 获得陀螺仪感应器 */
sensor_event_queue = ASensorManager_createEventQueue(sensor_manager, app->looper, LOOPER_ID_USER, NULL, NULL); /* 创建系统循环更新时的感应器事件队列 */
/* 自定义部分,主循环也包含在这个部分中 */
while (1)
{
refresh();
}
}
android程序设计魔方矩阵,【图片】【记录】零基础用c4droid写一个3D魔方软件_c4droid吧_百度贴吧...相关推荐
- Android Studio新手–下载安装配置–零基础入门–基本使用–调试技能–构建项目基础–使用AS应对常规应用开发
转自:http://blog.csdn.net/yanbober/article/details/45306483 目标:Android Studio新手–>下载安装配置–>零基础入门–& ...
- 新书推荐:《Android Studio开发实战:从零基础到App上线》终章
<Android Studio开发实战:从零基础到App上线>是一部Android开发的实战教程,由浅入深.由基础到高级,带领读者一步一步走进App开发的神奇世界. 全书共分为16章.其中 ...
- 平面设计零基础怎么设计出一个完美的名片
本文由:"学设计上兔课网"原创,图片素材来自网络,仅供学习分享 平面设计零基础怎么设计出一个完美的名片?每个人都会有专属的名片,好的名片可以让你的商业精英形象愈发生动起来.今天,为 ...
- 零基础教你搭建一个自己的靶场!
零基础教你搭建一个自己的靶场! 目录 零基础教你搭建一个自己的靶场! 前言 部署 准备工作 安装环境 docker 的安装 docker-compose的安装 配置环境 安装 下载 配置 总结 前言 ...
- 零基础学java web开发_从零基础学Java成为一个专业的java web 开发者
原标题:从零基础学Java成为一个专业的java web 开发者 "我怎么才能成为一个Java Web开发者?"对于这个问题,答案其实并不简单.成为一个Java Web开发人员包括 ...
- 零基础系统学习Maya(玛雅)软件,每天30分钟【软件精通】
零基础系统学习Maya(玛雅)软件,每天30分钟[软件精通] 视频是分段播放, 免费教学,由于网站限制只能播放一集,想看全集教程的请移步哔哩哔哩搜索"3D建模云教室"观看 如果你一 ...
- DirectX11--实现一个3D魔方(1)
前言 可以说,魔方跟我的人生也有一定的联系. 在高中的学校接触到了魔方社,那时候的我虽然也能够还原魔方,可看到大神们总是可以非常快地还原,为此我也走上了学习高级公式CFOP的坑.当初学习的网站是在魔方 ...
- DirectX11--实现一个3D魔方(3)
前言 (2019/1/9 09:23)上一章我们主要讲述了魔方的旋转,这个旋转真是有毒啊,搞完这个部分搭键鼠操作不到半天应该就可以搭完了吧- (2019/1/9 21:25)啊,真香 有人发这张图片问 ...
- DirectX11--实现一个3D魔方(2)
前言 上一章我们主要讲述了魔方的构造和初始化.纹理的准备工作.目前我还没有打算讲Direct3D 11关于底层绘图的实现,因此接下来这一章的重点是魔方的旋转.因为我们要的是能玩的魔方游戏,而不是一个观 ...
最新文章
- hello world!!(Java)
- opencv 3.1编译 linux,Ubuntu 编译安装 OpenCV 3.1
- duilib基本布局学习(模仿百度网盘)及绑定按钮事件
- 串口 COM口 USB-TTL RS-232 RS-485 不同标准 区别 释疑
- [MySQL FAQ]系列 -- 数据不算大,备份却非常慢
- 【专栏必读】王道考研408操作系统万字笔记(从学生角度辅助大家理解):各章节导航及思维导图
- 阿里大鱼php发送短信,阿里大鱼短信发送PHP代码
- virtualbox linux通用网卡,详解VirtualBox + CentOS 虚拟机网卡配置
- 算法高级(9)-线程池的实现方式
- python取列表中位数_Python如何获取列表(List)的中位数
- 虚拟机中centos7 安装过程中没有自动获取到网络
- 一盘商家一盘货,拼多多为什么比手淘便宜?
- python海龟库函数大全_python海龟库的使用
- c++ 迷宫思路_C++实现简单走迷宫的代码
- Android应用盈利广告平台的嵌入方法详解
- 概述-数据建模是什么?
- 关于计算机知识脑筋急转弯,脑筋急转弯及知识竞答
- 数位dp总结 之 从入门到模板
- AFL fuzzing tcpdump-tcpdump-4.9.0
- Python 常用基础模块(二):os模块