亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android實現粒子爆炸效果的方法

2020-04-11 11:29:50
字體:
來源:轉載
供稿:網友

本文實例講述了Android實現粒子爆炸效果的方法。分享給大家供大家參考。具體如下:

1. Explosion.java文件:

package net.obviam.particles.model;import android.graphics.Canvas;import android.graphics.Rect;import android.util.Log;public class Explosion {  private static final String TAG = Explosion.class.getSimpleName();  public static final int STATE_ALIVE   = 0;  // at least 1 particle is alive  public static final int STATE_DEAD   = 1;  // all particles are dead  private Particle[] particles;  // particles in the explosion  private int x, y;  // the explosion's origin  private float gravity;  // the gravity of the explosion (+ upward, - down)  private float wind;  // speed of wind on horizontal  private int size; // number of particles  private int state; // whether it's still active or not  public Explosion(int particleNr, int x, int y) {    Log.d(TAG, "Explosion created at " + x + "," + y);    this.state = STATE_ALIVE;    this.particles = new Particle[particleNr];    for (int i = 0; i < this.particles.length; i++) {      Particle p = new Particle(x, y);      this.particles[i] = p;    }    this.size = particleNr;  }  public Particle[] getParticles() {    return particles;  }  public void setParticles(Particle[] particles) {    this.particles = particles;  }  public int getX() {    return x;  }  public void setX(int x) {    this.x = x;  }  public int getY() {    return y;  }  public void setY(int y) {    this.y = y;  }  public float getGravity() {    return gravity;  }  public void setGravity(float gravity) {    this.gravity = gravity;  }  public float getWind() {    return wind;  }  public void setWind(float wind) {    this.wind = wind;  }  public int getSize() {    return size;  }  public void setSize(int size) {    this.size = size;  }  public int getState() {    return state;  }  public void setState(int state) {    this.state = state;  }  // helper methods -------------------------  public boolean isAlive() {    return this.state == STATE_ALIVE;  }  public boolean isDead() {    return this.state == STATE_DEAD;  }  public void update() {    if (this.state != STATE_DEAD) {      boolean isDead = true;      for (int i = 0; i < this.particles.length; i++) {        if (this.particles[i].isAlive()) {          this.particles[i].update();          isDead = false;        }      }      if (isDead)        this.state = STATE_DEAD;     }  }  public void update(Rect container) {    if (this.state != STATE_DEAD) {      boolean isDead = true;      for (int i = 0; i < this.particles.length; i++) {        if (this.particles[i].isAlive()) {          this.particles[i].update(container);//         this.particles[i].update();          isDead = false;        }      }      if (isDead)        this.state = STATE_DEAD;     }  }  public void draw(Canvas canvas) {    for(int i = 0; i < this.particles.length; i++) {      if (this.particles[i].isAlive()) {        this.particles[i].draw(canvas);      }    }  }}

2. Particle.java文件如下:

package net.obviam.particles.model;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;public class Particle {  public static final int STATE_ALIVE = 0;  // particle is alive  public static final int STATE_DEAD = 1;   // particle is dead  public static final int DEFAULT_LIFETIME  = 200; // play with this  public static final int MAX_DIMENSION    = 5;  // the maximum width or height  public static final int MAX_SPEED      = 10;  // maximum speed (per update)  private int state;     // particle is alive or dead  private float widht;    // width of the particle  private float height;    // height of the particle  private float x, y;     // horizontal and vertical position  private double xv, yv;   // vertical and horizontal velocity  private int age;      // current age of the particle  private int lifetime;    // particle dies when it reaches this value  private int color;     // the color of the particle  private Paint paint;    // internal use to avoid instantiation  public int getState() {    return state;  }  public void setState(int state) {    this.state = state;  }  public float getWidht() {    return widht;  }  public void setWidht(float widht) {    this.widht = widht;  }  public float getHeight() {    return height;  }  public void setHeight(float height) {    this.height = height;  }  public float getX() {    return x;  }  public void setX(float x) {    this.x = x;  }  public float getY() {    return y;  }  public void setY(float y) {    this.y = y;  }  public double getXv() {    return xv;  }  public void setXv(double xv) {    this.xv = xv;  }  public double getYv() {    return yv;  }  public void setYv(double yv) {    this.yv = yv;  }  public int getAge() {    return age;  }  public void setAge(int age) {    this.age = age;  }  public int getLifetime() {    return lifetime;  }  public void setLifetime(int lifetime) {    this.lifetime = lifetime;  }  public int getColor() {    return color;  }  public void setColor(int color) {    this.color = color;  }  // helper methods -------------------------  public boolean isAlive() {    return this.state == STATE_ALIVE;  }  public boolean isDead() {    return this.state == STATE_DEAD;  }  public Particle(int x, int y) {    this.x = x;    this.y = y;    this.state = Particle.STATE_ALIVE;    this.widht = rndInt(1, MAX_DIMENSION);    this.height = this.widht;//   this.height = rnd(1, MAX_DIMENSION);    this.lifetime = DEFAULT_LIFETIME;    this.age = 0;    this.xv = (rndDbl(0, MAX_SPEED * 2) - MAX_SPEED);    this.yv = (rndDbl(0, MAX_SPEED * 2) - MAX_SPEED);    // smoothing out the diagonal speed    if (xv * xv + yv * yv > MAX_SPEED * MAX_SPEED) {      xv *= 0.7;      yv *= 0.7;    }    this.color = Color.argb(255, rndInt(0, 255), rndInt(0, 255), rndInt(0, 255));    this.paint = new Paint(this.color);  }  /**   * Resets the particle   * @param x   * @param y   */  public void reset(float x, float y) {    this.state = Particle.STATE_ALIVE;    this.x = x;    this.y = y;    this.age = 0;  }  // Return an integer that ranges from min inclusive to max inclusive.  static int rndInt(int min, int max) {    return (int) (min + Math.random() * (max - min + 1));  }  static double rndDbl(double min, double max) {    return min + (max - min) * Math.random();  }  public void update() {    if (this.state != STATE_DEAD) {      this.x += this.xv;      this.y += this.yv;      // extract alpha      int a = this.color >>> 24;      a -= 2;               // fade by 5      if (a <= 0) {            // if reached transparency kill the particle        this.state = STATE_DEAD;      } else {        this.color = (this.color & 0x00ffffff) + (a << 24);    // set the new alpha        this.paint.setAlpha(a);        this.age++;           // increase the age of the particle//       this.widht *= 1.05;//       this.height *= 1.05;      }      if (this.age >= this.lifetime) { // reached the end if its life        this.state = STATE_DEAD;      }      // http://lab.polygonal.de/2007/05/10/bitwise-gems-fast-integer-math/      //32bit//     var color:uint = 0xff336699;//     var a:uint = color >>> 24;//     var r:uint = color >>> 16 & 0xFF;//     var g:uint = color >>> 8 & 0xFF;//     var b:uint = color & 0xFF;           }  }  public void update(Rect container) {    // update with collision    if (this.isAlive()) {      if (this.x <= container.left || this.x >= container.right - this.widht) {        this.xv *= -1;      }      // Bottom is 480 and top is 0 !!!      if (this.y <= container.top || this.y >= container.bottom - this.height) {        this.yv *= -1;      }    }    update();  }  public void draw(Canvas canvas) {//   paint.setARGB(255, 128, 255, 50);    paint.setColor(this.color);    canvas.drawRect(this.x, this.y, this.x + this.widht, this.y + this.height, paint);//   canvas.drawCircle(x, y, widht, paint);  }}

希望本文所述對大家的Android程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人国产精品色哟哟| 亚洲国产精品嫩草影院久久| 国产国产精品人在线视| 黑人巨大精品欧美一区二区免费| 4438全国成人免费| 影音先锋欧美精品| 神马久久久久久| 国产一区二区三区高清在线观看| 欧美视频一区二区三区…| 亚洲qvod图片区电影| 国产精品久久久久99| 久久伊人精品一区二区三区| 亚洲一级黄色片| 综合激情国产一区| 中国日韩欧美久久久久久久久| 欧美最猛性xxxxx(亚洲精品)| 色婷婷**av毛片一区| 亚洲激情在线观看视频免费| 国产视频亚洲视频| 69国产精品成人在线播放| 欧美精品在线播放| 欧美怡红院视频一区二区三区| 国产精品亚洲第一区| 成人性教育视频在线观看| 91中文字幕在线观看| 在线视频欧美日韩精品| 久久久久国色av免费观看性色| 日韩精品电影网| 国产精品成人品| 亚洲欧洲日韩国产| 日韩精品高清视频| 日韩免费中文字幕| 亚洲国产成人91精品| 久久久精品久久久久| 日韩在线观看你懂的| 1769国内精品视频在线播放| 这里只有视频精品| 另类少妇人与禽zozz0性伦| 日韩成人中文电影| 国产精品久久久精品| 精品久久久久久电影| 国产精品久久久久久网站| 91a在线视频| 中文字幕国内精品| 成人妇女免费播放久久久| 亚洲国产精品va在线看黑人| 国产精品久久久久久久久影视| 狠狠操狠狠色综合网| 久久久这里只有精品视频| 91久久精品视频| 97在线看免费观看视频在线观看| 国产精品亚洲激情| 欧美日韩不卡合集视频| 日韩欧美国产中文字幕| 777国产偷窥盗摄精品视频| 成人黄色生活片| 成人精品视频99在线观看免费| 成人a在线视频| 中文字幕视频在线免费欧美日韩综合在线看| 亚洲国产日韩欧美在线动漫| 福利视频一区二区| 中文字幕9999| 日韩中文理论片| 国产精品久久久精品| 亚洲欧美精品伊人久久| www.日韩系列| 亚洲成**性毛茸茸| 国产精品亚洲精品| 97香蕉久久超级碰碰高清版| 97在线观看视频国产| 亚洲精品中文字幕有码专区| 国产一区二区在线播放| 亚洲综合一区二区不卡| 亚洲娇小xxxx欧美娇小| 国产亚洲精品美女久久久久| www.亚洲男人天堂| 欧美wwwwww| 亚洲美女福利视频网站| 久久久久久亚洲精品不卡| 亚洲欧美激情一区| 日韩在线观看成人| 欧美激情视频一区| 欧美又大粗又爽又黄大片视频| 精品视频在线观看日韩| 欧美日韩国产专区| 日本老师69xxx| 色午夜这里只有精品| 亚洲黄色www网站| 亚洲一区二区久久久久久| 国产99久久精品一区二区永久免费| 91国在线精品国内播放| 热久久免费国产视频| 精品一区二区亚洲| 91在线免费观看网站| 人九九综合九九宗合| 中文字幕亚洲一区二区三区| 成人性生交大片免费看小说| 亚洲乱亚洲乱妇无码| 欧美精品xxx| 性色av香蕉一区二区| 亚洲天堂色网站| 欧美精品电影免费在线观看| 91理论片午午论夜理片久久| 久久精品成人欧美大片| 欧美激情一区二区三级高清视频| 91精品综合久久久久久五月天| 欧美激情一区二区久久久| 欧美电影免费在线观看| 国内精品久久久久久影视8| 国产脚交av在线一区二区| 国产精品久久久久久久久久小说| 亚洲日韩欧美视频一区| 在线播放亚洲激情| 欧美最猛黑人xxxx黑人猛叫黄| 成人激情视频网| 亚洲激情第一页| 亚洲精品欧美日韩专区| 久久久久久有精品国产| 久久av中文字幕| 亚洲自拍偷拍色图| 欧美精品18videos性欧| 欧美高清在线播放| 精品久久久久久久大神国产| 国产精品一区二区久久国产| 亚洲午夜精品久久久久久久久久久久| 日韩有码视频在线| 日本道色综合久久影院| 久久人人爽人人爽人人片亚洲| 日韩av123| 91精品久久久久久久久不口人| 午夜精品www| 国产精品美女呻吟| 欧美人与物videos| 精品国产91乱高清在线观看| 日韩亚洲第一页| 久久精品久久精品亚洲人| 欧美一区二区视频97| 欧美午夜宅男影院在线观看| 精品国产区一区二区三区在线观看| 国产精品吹潮在线观看| 韩曰欧美视频免费观看| 在线激情影院一区| 国内精品久久久久久中文字幕| 清纯唯美亚洲激情| 欧美大尺度电影在线观看| 91精品国产自产在线观看永久| 久久久国产91| 国产精品嫩草影院久久久| 日韩电影网在线| 中文字幕欧美精品在线| 午夜精品久久久久久久久久久久久| 亚洲在线第一页| 久久精品亚洲热| 欧美极品美女视频网站在线观看免费| 日韩在线视频国产| 中文字幕日韩视频| 欧美黑人性视频| 久久久www成人免费精品| 久久精品福利视频| 国产精品旅馆在线| 姬川优奈aav一区二区| 成人xxxxx| 国产剧情久久久久久| 日本高清久久天堂|