前言-

这是最后一个重要的类了——LAppLive2DManager,流程什么的也清晰了,话不多说我们来康康吧!

LAppLive2DManager-

public class LAppLive2DManager{
public void releaseModel(){}
public void update(GL10 gl){ }
public LAppModel getModel(int no){}
public int getModelNum(){}
public LAppView createView(Activity act){}
public void onSurfaceChanged(GL10 gl, int width, int height){}
public void changeModel(){}
public boolean tapEvent(float x,float y){} public void flickEvent(float x,float y){} public void shakeEvent(){} public void setDrag(float x,float y){}
public L2DViewMatrix getViewMatrix(){}
}

结构

model切换-

public void releaseModel(){
for(int i=0;i<models.size();i++){
models.get(i).release();
} models.clear();
} public void update(GL10 gl){
view.update();
if(reloadFlg){ reloadFlg=false; int no = modelCount % 4; try {
switch (no) {
case 0:
releaseModel(); models.add(new LAppModel());
models.get(0).load(gl, LAppDefine.MODEL_HARU);
models.get(0).feedIn();
break;
case 1:
releaseModel(); models.add(new LAppModel());
models.get(0).load(gl, LAppDefine.MODEL_SHIZUKU);
models.get(0).feedIn();
break;
case 2:
releaseModel(); models.add(new LAppModel());
models.get(0).load(gl, LAppDefine.MODEL_WANKO);
models.get(0).feedIn();
break;
case 3:
releaseModel(); models.add(new LAppModel());
models.get(0).load(gl, LAppDefine.MODEL_HARU_A);
models.get(0).feedIn(); models.add(new LAppModel());
models.get(1).load(gl, LAppDefine.MODEL_HARU_B);
models.get(1).feedIn();
break;
default: break;
}
} catch (Exception e) { Log.e(TAG,"Failed to load."+e.getStackTrace());
SampleApplication.exit();
}
}
}

每次点击左下角按钮以后,每次都会先releaseModel()一下然后再add新的model,如果需要load更多的model,就像最后一个那样就好了。

触摸事件-

public boolean tapEvent(float x,float y)
{
if(LAppDefine.DEBUG_LOG)Log.d(TAG, "tapEvent view x:"+x+" y:"+y); for (int i=0; i<models.size(); i++)
{
if(models.get(i).hitTest( LAppDefine.HIT_AREA_HEAD,x, y ))
{ if(LAppDefine.DEBUG_LOG)Log.d(TAG, "Tap face.");
models.get(i).setRandomExpression();
}
else if(models.get(i).hitTest( LAppDefine.HIT_AREA_BODY,x, y))
{
if(LAppDefine.DEBUG_LOG)Log.d(TAG, "Tap body.");
models.get(i).startRandomMotion(LAppDefine.MOTION_GROUP_TAP_BODY, LAppDefine.PRIORITY_NORMAL );
}
}
return true;
}
tapEvent()里实现了脸部和身体的触摸的功能
脸部触摸后调用setRandomExpression而身体触摸以后调用startRandomMotion

轻触和震动事件-

//轻触事件
public void flickEvent(float x,float y)
{
if(LAppDefine.DEBUG_LOG)Log.d(TAG, "flick x:"+x+" y:"+y); for (int i=0; i<models.size(); i++)
{
if(models.get(i).hitTest( LAppDefine.HIT_AREA_HEAD, x, y ))
{
if(LAppDefine.DEBUG_LOG)Log.d(TAG, "Flick head.");
models.get(i).startRandomMotion(LAppDefine.MOTION_GROUP_FLICK_HEAD, LAppDefine.PRIORITY_NORMAL );
}
}
} //震动事件
public void shakeEvent()
{
if(LAppDefine.DEBUG_LOG)Log.d(TAG, "Shake event."); for (int i=0; i<models.size(); i++)
{
models.get(i).startRandomMotion(LAppDefine.MOTION_GROUP_SHAKE,LAppDefine.PRIORITY_FORCE );
}
}

至此项目的大概已经明白了,剩下的就是转换成自己的东西了

【Android】用Cubism 2制作自己的Live2D——官方App样例源码学习(4)!的更多相关文章

  1. 【Android】用Cubism 2制作自己的Live2D——官方App样例源码学习(1)!

    前言- 上几篇文章,我们一个一个的研究了Cubism官方提供的Android使用Live2D的简单例子,但是依旧和大家平时见到的还是有很大差距的.在研究了代码差不多一周以后,我决定还是用文字的形式记录 ...

  2. 【Android】用Cubism 2制作自己的Live2D——官方App样例源码学习(2)!

    前言- 明确了项目目录的结构,但是结构什么的也太"抽象"了. 本篇开始上代码! 模型的绘制- 前几天的学习中,live2d的绘制有了一些了解了,在Android端使用OpenGL ...

  3. 【Android】用Cubism 2制作自己的Live2D——官方App样例源码学习(3)!

    ---恢复内容开始--- 前言- 虽然上文说的是model的绘制但是这个说法并不严谨,之前的几个例子都会有模型文件的读入和载入,可是在LAppRenderer.LAppView中并没有.moc等文件的 ...

  4. Android源码学习之装饰模式应用

    首先得了解最基础的装饰器模式 参考 设计模式之八 --- 装饰模式(Decorator) 参考链接:http://blog.csdn.net/cjjky/article/details/7478788 ...

  5. Android事件分发详解(三)——ViewGroup的dispatchTouchEvent()源码学习

    package cc.aa; import android.os.Environment; import android.view.MotionEvent; import android.view.V ...

  6. [Android FrameWork 6.0源码学习] View的重绘过程之WindowManager的addView方法

    博客首页:http://www.cnblogs.com/kezhuang/p/关于Activity的contentView的构建过程,我在我的博客中已经分析过了,不了解的可以去看一下<[Andr ...

  7. Android源码浅析(四)——我在Android开发中常用到的adb命令,Linux命令,源码编译命令

    Android源码浅析(四)--我在Android开发中常用到的adb命令,Linux命令,源码编译命令 我自己平时开发的时候积累的一些命令,希望对你有所帮助 adb是什么?: adb的全称为Andr ...

  8. Android源码-学习随笔

    在线代码网站1:http://grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android/ 书籍: ...

  9. Android源码学习之模板方法模式应用

    一.模板方法模式定义 模板方法模式定义: defines the skeleton of an algorithm in a method, deferring some steps to subcl ...

随机推荐

  1. 服务端预渲染之Nuxt (使用篇)

    服务端预渲染之Nuxt - 使用 现在大多数开发都是基于Vue或者React开发的,能够达到快速开发的效果,也有一些不足的地方,Nuxt能够在服务端做出渲染,然后让搜索引擎在爬取数据的时候能够读到当前 ...

  2. CSS 火焰?不在话下

    正文从下面开始. 今天的小技巧是使用纯 CSS 生成火焰,逼真一点的火焰. 嗯,长什么样子?在 CodePen 上输入关键字 CSS Fire,能找到这样的: 或者这样的: 我们希望,仅仅使用 CSS ...

  3. Web前端-Ajax基础技术(下)

    Web前端-Ajax基础技术(下) 你要明白ajax是什么,怎么使用? ajax,web程序是将信息放入公共的服务器,让所有网络用户可以通过浏览器进行访问. 浏览器发送请求,获取服务器的数据: 地址栏 ...

  4. SuperMap iObject入门开发系列之六管线区域查询

    本文是一位好友“托马斯”授权给我来发表的,介绍都是他的研究成果,在此,非常感谢. 管线区域查询功能针对单一管线图层进行区域多边形框选查询,然后将查询结果输出为列表,并添加定位和闪烁功能,效果如下图所示 ...

  5. Android 项目中用得最多最火的第三方框架可能都在这里了

    分类 二级分类 框架名称 简介 Star 数 最近更新 UI 刷新 SmartRefreshLayout 智能下拉刷新框架 14k 18天 UI 刷新 Android-PullToRefresh 比较 ...

  6. 在github上fork项目如何同步并解决冲突

    在github上fork项目如何同步并解决冲突 在github上有些项目我们可能会进行一些自己功能的添加但是提交PR后作者基于设计或者其他原因考虑没有通过,但是这个功能又是我们必须的.这时我们就想自己 ...

  7. php爬取微信文章内容

    php爬取微信文章内容 在做官网升级的时遇到新的需求,需要将公司公众号文章显示在官网的文章模块下.但存在的问题是:微信文章的链接会失效,并且需要对文章部分内容做修改,同时要减少微信运营人员的工作量,避 ...

  8. cmd中输入net start mysql 提示:服务名无效或者MySQL正在启动 MySQL无法启动

    在DOS窗口.gitbush以及一些可以使用的命令行工具的界面上,输入:net stop mysql.net start mysql时,总是提示:服务名无效. 出现提示如下: 原因是:因为net st ...

  9. Java经典面试题+答案(全)

    这套面试题主要目的是帮助那些还没有java软件开发实际工作经验,而正在努力寻找java软件开发工作的朋友在笔试时更好地赢得笔试和面试. 1.一个".java"源文件中是否可以包括多 ...

  10. Appium在Android7.0及以上系统运行时报错的解决方案

    背景:在使用Samsung S系列手机进行自动化测试时,发现同样脚本的情况下华为荣耀系列可以正常运行,最终发现差异在于Android7.0及以上系统和appium版本不匹配,需要升级appium.但需 ...