【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 ...
随机推荐
- MyBatis中主键回填的两种实现方式
主键回填其实是一个非常常见的需求,特别是在数据添加的过程中,我们经常需要添加完数据之后,需要获取刚刚添加的数据 id,无论是 Jdbc 还是各种各样的数据库框架都对此提供了相关的支持,本文我就来和和大 ...
- SpringBoot进阶教程(二十四)整合Redis
缓存现在几乎是所有中大型网站都在用的必杀技,合理的利用缓存不仅能够提升网站访问速度,还能大大降低数据库的压力.Redis提供了键过期功能,也提供了灵活的键淘汰策略,所以,现在Redis用在缓存的场合非 ...
- 第15章 时间常数字符串比较 - IdentityModel 中文文档(v1.0.0)
在比较安全上下文中的字符串(例如比较键)时,应尽量避免泄漏时序信息. 该TimeConstantComparer类可以帮助: var isEqual = TimeConstantComparer.Is ...
- go.js remove 特定part
我想删除一个实际上是背景的部分. 假设这是我添加part的方式 myDiagram.add( scope.gj(go.Part,//此Part未绑定到任何模型数据 { layerName:“Backg ...
- Odoo:全球第一免费开源ERP 人力资源模块操作指南(完美珍藏版)
概述 人力资源管理概述 一般企业里,和人力资源相关的工作有:1)员工合同管理,即员工基本档案管理:2)招聘管理,即岗位及岗位人员补充管理:3)员工薪资计算: 4)员工考勤:5)员工休假管理:6)员工绩 ...
- 一文搞懂RAM、ROM、SDRAM、DRAM、DDR、flash等存储介质
一文搞懂RAM.ROM.SDRAM.DRAM.DDR.flash等存储介质 存储介质基本分类:ROM和RAM RAM:随机访问存储器(Random Access Memory),易失性.是与CPU直接 ...
- asp.net core 2.0的认证和授权
在asp.net core中,微软提供了基于认证(Authentication)和授权(Authorization)的方式,来实现权限管理的,本篇博文,介绍基于固定角色的权限管理和自定义角色权限管理, ...
- .NET Core 2.1来了!
太棒了! .NET Core 2.0正式发布至今已经过去了大半年,这大半年说长不长说短不短,这段时间里,我是充分地体会到了微软的诚意,那就是认认真真打造一个优秀的开源平台.这大半年的时间里,微软一直在 ...
- “Validation failed for one or more entities”异常的解决办法
日志中出现Entity Framework修改数据库时的错误: Validation failed for one or more entities. See 'EntityValidationErr ...
- .NET Core微服务之基于Steeltoe使用Eureka实现服务注册与发现
Tip: 此篇已加入.NET Core微服务基础系列文章索引 => Steeltoe目录快速导航: 1. 基于Steeltoe使用Spring Cloud Eureka 2. 基于Steelt ...