【Android粒子动画】Android粒子动画渲染学习
来源:互联网 发布:新歌声第二季网络直播 编辑:程序博客网 时间:2024/04/29 05:51
填完自己挖的坑,把之前的游戏继续做下去,而做手机游戏,在很多场景下需要做到绚烂效果,这时候就可能用到粒子,这里学习一下其他大神的做法,自己做了个。
原理如下:
1.生成一个粒子(新建一个线程)
2.运动,按照一定轨迹运动
3.在某个位置,或时间点上释放旧线程,并且生成新线程
如此反复,效果就可基本完成
效果如下:
在此之前,先学习一下有关SurfaceView方面的东西。
SurfaceView 类,Canvas上绘图
绘制简单的水面波纹
(一滴雨~)
如图,雨滴滴至水面,在此形成四个大小不等,速度不同向外扩张
以下为绘制方法,通过半径r的递增,不断刷新界面绘制四个圆
<strong><span style="font-size:18px;">public void doDraw(int x,int y,Canvas c){c.drawColor(Color.BLACK);c.translate(250, 250);c.drawCircle(x, y, r/2, p);c.drawCircle(x, y, r/3, p);c.drawCircle(x, y, r/4, p);c.drawCircle(x, y, r++, p);//重置if(r>250){r=20f;}}</span></strong>
<strong><span style="font-size:18px;">package yyc.test;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;public class Rain extends SurfaceView implements Callback{MyThread my;public Rain(Context context) {super(context);init();// TODO Auto-generated constructor stub}private void init(){SurfaceHolder surh=getHolder();surh.addCallback(this);my=new MyThread(getContext(),surh);}@Overridepublic void surfaceCreated(SurfaceHolder holder) {// TODO Auto-generated method stubmy.isrun=true;my.start();}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {// TODO Auto-generated method stub}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stubmy.isrun=false;try{my.join();}catch(Exception e){e.printStackTrace();}}class MyThread extends Thread{SurfaceHolder surfaceholder;Context context;boolean isrun;public float r=2;//半径Paint p;public MyThread(Context context,SurfaceHolder surfaceholder){this.surfaceholder=surfaceholder;this.context=context;isrun=false;p=new Paint();p.setColor(Color.YELLOW);p.setStrokeWidth(3);p.setStyle(Paint.Style.STROKE);}/* (non-Javadoc) * @see java.lang.Thread#run() */@Overridepublic void run() {// TODO Auto-generated method stubsuper.run();Canvas c=null;while(isrun){try{synchronized(surfaceholder){c=surfaceholder.lockCanvas(null); } doDraw(250,250,c);Thread.sleep(10);}catch(Exception e){e.printStackTrace();}finally{surfaceholder.unlockCanvasAndPost(c);}}}public void doDraw(int x,int y,Canvas c){c.drawColor(Color.BLACK);c.translate(250, 250);c.drawCircle(x, y, r/2, p);c.drawCircle(x, y, r/3, p);c.drawCircle(x, y, r/4, p);c.drawCircle(x, y, r++, p);//重置if(r>250){r=20f;}}}class MinThread extends Thread{Canvas c=null;public MinThread(){ }/* (non-Javadoc) * @see java.lang.Thread#run() */@Overridepublic void run() {// TODO Auto-generated method stub }}}</span></strong>
在Activity类中
setContextview(new 自己的surfaceView());
以上是简单的一个雨滴
扩展至多个雨滴:
有两点:
1.随机产生位置
2.一定情况下释放
而这两点都有办法快速解决
下篇继续
2 0
- 【Android粒子动画】Android粒子动画渲染学习
- Android中粒子动画
- 粒子动画显示文字的Android控件
- 粒子动画
- 粒子动画
- 粒子动画
- android使用粒子动画实现炊烟袅袅的效果
- android 手摸手教你用 Canvas 实现简单粒子动画
- Android 爆炸粒子动画-参考ExplosionField开源项目
- 一个用粒子动画显示文字的 Android 自定义 View
- emitter(粒子动画)
- 粒子动画处理
- iOS CoreAnimation-粒子动画
- 粒子动画实现
- swift 粒子动画
- canvas粒子动画
- Canvas之粒子动画
- canvas动画粒子
- giit 常用的操作
- 关于Qt
- sicily 1350. Piggy banks
- hiho刷题日记——第十二天刷油漆
- eclipse查看jar包中class的中文注释乱码问题的解决
- 【Android粒子动画】Android粒子动画渲染学习
- nyoj 三国志 203 (dijst++01背包) 好题
- Linux初学者学习方法
- 应用程序的通信成本
- 物联网与嵌入式系统概论-week2-Embedded Systems-Lesson2: Components of Embedded Systems
- UE4蓝图案例:制作按下键盘F键改变场景中模型的颜色
- 解决Mac OSX(El Capitan)中 通知中心(Notification Center)失去项目(Widgets)的方法
- 自己实现简单的数据库连接池
- 提高编程能力的7条建议