【Android】用Cubism 2制作自己的Live2D——官方App样例源码学习(4)!
前言-
这是最后一个重要的类了——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)!的更多相关文章
- 【Android】用Cubism 2制作自己的Live2D——官方App样例源码学习(1)!
前言- 上几篇文章,我们一个一个的研究了Cubism官方提供的Android使用Live2D的简单例子,但是依旧和大家平时见到的还是有很大差距的.在研究了代码差不多一周以后,我决定还是用文字的形式记录 ...
- 【Android】用Cubism 2制作自己的Live2D——官方App样例源码学习(2)!
前言- 明确了项目目录的结构,但是结构什么的也太"抽象"了. 本篇开始上代码! 模型的绘制- 前几天的学习中,live2d的绘制有了一些了解了,在Android端使用OpenGL ...
- 【Android】用Cubism 2制作自己的Live2D——官方App样例源码学习(3)!
---恢复内容开始--- 前言- 虽然上文说的是model的绘制但是这个说法并不严谨,之前的几个例子都会有模型文件的读入和载入,可是在LAppRenderer.LAppView中并没有.moc等文件的 ...
- Android源码学习之装饰模式应用
首先得了解最基础的装饰器模式 参考 设计模式之八 --- 装饰模式(Decorator) 参考链接:http://blog.csdn.net/cjjky/article/details/7478788 ...
- Android事件分发详解(三)——ViewGroup的dispatchTouchEvent()源码学习
package cc.aa; import android.os.Environment; import android.view.MotionEvent; import android.view.V ...
- [Android FrameWork 6.0源码学习] View的重绘过程之WindowManager的addView方法
博客首页:http://www.cnblogs.com/kezhuang/p/关于Activity的contentView的构建过程,我在我的博客中已经分析过了,不了解的可以去看一下<[Andr ...
- Android源码浅析(四)——我在Android开发中常用到的adb命令,Linux命令,源码编译命令
Android源码浅析(四)--我在Android开发中常用到的adb命令,Linux命令,源码编译命令 我自己平时开发的时候积累的一些命令,希望对你有所帮助 adb是什么?: adb的全称为Andr ...
- Android源码-学习随笔
在线代码网站1:http://grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android/ 书籍: ...
- Android源码学习之模板方法模式应用
一.模板方法模式定义 模板方法模式定义: defines the skeleton of an algorithm in a method, deferring some steps to subcl ...
随机推荐
- 《HelloGitHub》第 35 期
<HelloGitHub>第 35 期 兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编程新手.热爱编程. ...
- 什么是TensorFlow?
前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 回顾前面: 从零开始学TensorFlow[01-搭 ...
- Linux挖矿病毒 khugepageds详细解决步骤
一.背景 最近公司一台虚拟机被攻击,其中一种挖矿病毒.会伪CPU数.即如果用top命令只能看到一个cpu.并且负载不高.实际上整个负载300%以上,及时定时任务关掉也不起作用. 二.言归正传开始干掉这 ...
- c#在pictureBox控件上绘制多个矩形框及删除绘制的矩形框
在pictureBox上每次只绘制一个矩形框,绘制下一个矩形框时上次绘制的矩形框取消,代码如链接:https://www.cnblogs.com/luxiao/p/5625196.html 在绘制矩形 ...
- Hello World 程序的起源与历史
这是一个最著名的程序.对每一位程序员来说,这个程序几乎是每一门编程语言中的第一个示例程序.那么,这个著名的程序究竟从何而来呢? 实际上,这个程序的功能只是告知计算机显示 Hello World 这句话 ...
- Redis内存模型(2):存储细节
1. 概述 先看一下执行set hellow world时,所涉及的数据模型: (1)dictEntry:Redis是Key-Value数据库,因此对每个键值对都会有一个dictEntry,里面存储了 ...
- windows下nginx的安装及使用
安装过程比较简单 1.下载nginx http://nginx.org/en/download.html 下载稳定版本,以nginx/Windows-1.14.2为例,直接下载 nginx-1.14. ...
- 如何检测或判断一个文件或字节流(无BOM)是什么编码类型
前言: 昨天,在文章:终于等到你:CYQ.Data V5系列 (ORM数据层,支持.NET Core)最新版本开源了 中, 不小心看到一条留言: 然后就去该地址看了一下,这一看,顺带折腾了一天. 今天 ...
- 微软推出了Cloud Native Application Bundles和开源ONNX Runtime
微软的Microsoft Connect(); 2018年的开发者大会 对Azure和IoT Edge服务进行了大量更新; Windows Presentation Foundation,Window ...
- logisim元件清单