⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smoke.java

📁 3D手机游戏开发实例源代码
💻 JAVA
字号:
import javax.microedition.midlet.*;import com.mascotcapsule.micro3d.v3.*;import java.util.*;public class Smoke extends V3Object{    private FigureLayout layout;    private Effect3D effect;    private AffineTrans trans;    // The point sprite command used when rendering the smoke.    private final int COMMAND = Graphics3D.PRIMITVE_POINT_SPRITES |                                Graphics3D.PDATA_POINT_SPRITE_PARAMS_PER_CMD |                                Graphics3D.PATTR_BLEND_ADD |                                Graphics3D.PATTR_COLORKEY;    // The number of sprites used.    private final int NUM_POINT_SPRITES = 10;      private SmokeItem []smokeItem = new SmokeItem[NUM_POINT_SPRITES];    // randomize the sprite rotation.    private Random r;    // the smoke texture.    private Texture texture = null;    private long ticks = 0; // frame counter.    public Smoke(int w, int h){        try{            texture = new Texture("/smoke.bmp", true);        }catch(Exception e){            e.printStackTrace();        }        layout = new FigureLayout();        effect = new Effect3D();        trans = new AffineTrans();        trans.setIdentity();        effect.setShadingType(Effect3D.NORMAL_SHADING);        effect.setSemiTransparentEnabled(true);        layout.setAffineTrans( trans );        layout.setPerspective(1, 4096, 512);        layout.setCenter(w/2, h/2);        trans.mul(lookAt); // the lookAt is from the super class.        // Create the smoke sprites.        smokeItem[0] = new SmokeItem(null);        for(int i=1; i<NUM_POINT_SPRITES; i++){            smokeItem[i] = new SmokeItem(smokeItem[i-1]);        }        smokeItem[NUM_POINT_SPRITES-1].start();            }    public void update(){        trans.setIdentity();        trans.mul(lookAt);    }    public void draw(Graphics3D g3d){        ticks++;        for(int i=0; i<NUM_POINT_SPRITES; i++){            smokeItem[i].render(g3d);        }    }    private class SmokeItem{        // each item has a reference to the next item so it can be started after a certain time or in this case when the item reaches a certain point.         private SmokeItem next = null;         private int [] POINT = { 0, 0, 0 }; // Position of the sprite         private int [] TEXTURE = {10, 10, 512, 0, 0, 128, 128, Graphics3D.POINT_SPRITE_PERSPECTIVE};         private int ROT; // The rotation of the point sprite, this is randomized    //   w0, h0, a0, x00, y00, x01, y01, f0,    //   w1, h1, a1, x10, y10, x11, y11, f1, ...        private int []NORMAL = new int[] {4096};        private int []COLOR = new int[] {0x00};        private boolean started = false;        private Random r = new Random();        private int mod;                public SmokeItem(SmokeItem next){            this.next = next;                        reset();        }        public void start(){            started = true;        }        /*         * Reset the size and position of the sprite         */        private void reset(){            TEXTURE[0] = 10;            TEXTURE[1] = 10;            POINT[1]  = 0;            ROT = -16 + r.nextInt(32);        }        /*         * The sprite is scaled and moved before rendered to the screen.         */        protected void render(Graphics3D g3d){            if(started && FPS.fps > 0){                                mod = FPS.fps/5;                mod = mod <1?1:mod;                                    if(ticks%mod==0){                    if(TEXTURE[0] < 80){                        // make the size of the sprite bigger.                        TEXTURE[0]++;                        TEXTURE[1]++;                    }                }                                mod = FPS.fps/10;                mod = mod <1?1:mod;                                if(ticks%mod==0){                    POINT[1] ++; // add 1 to the y position.                    if(POINT[1] == 180){                        reset(); // start over.                    }                    if(POINT[1] > 18 && next != null){                        next.start(); // start moving the next sprite                    }                }                TEXTURE[2] += ROT;            }                        // render the sprite.            g3d.renderPrimitives(texture, 0, 0, layout, effect, COMMAND, 1, POINT, NORMAL, TEXTURE, COLOR);                        }            }    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -