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

首頁 > 學院 > 開發設計 > 正文

使用Timer和Canvas制作動畫效果

2019-11-18 16:05:55
字體:
來源:轉載
供稿:網友

本例演示了如何使用Canvas和Timer來制作動畫效果,可以使用Guage來調節幀速率和動畫精靈的個數。程序結構清晰,是不錯的參考案例。

使用Timer和Canvas制作動畫效果(圖一)使用Timer和Canvas制作動畫效果(圖二)

/*
 * AnimationMIDlet.java
 *
 * Created on 2005年12月2日, 上午10:50
 */

package com.j2medev.animation;

import java.util.Timer;
import java.util.TimerTask;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;

public class AnimationMIDlet extends MIDlet implements CommandListener, ItemStateListener {
   
    // The MIDlet's Display object
    PRivate Display display;
    // Flag indicating first call of startApp
    protected boolean started;
    // Exit command
    private Command exitCommand;
    // Setup command
    private Command setupCommand;
    // Run command
    private Command runCommand;
    // Configuration form
    private Form form;
    // Animation canvas
    private AnimationCanvas canvas;
    // Gauge for block count
    private Gauge blockGauge;
    // Gauge for frame rate
    private Gauge rateGauge;
    // Initial frame rate
    private static final int FRAME_RATE = 1;
    // Initial number of blocks
    private static final int BLOCK_COUNT = 1;
   
    protected void startApp() {
        if (!started) {
            display = Display.getDisplay(this);
            form = new Form("Animation");
            rateGauge = new Gauge("Frame rate", true, 10, FRAME_RATE);
            blockGauge = new Gauge("Blocks", true, 4, BLOCK_COUNT);
            form.append(rateGauge);
            form.append(blockGauge);
            form.setItemStateListener(this);
            canvas = createAnimationCanvas();
            exitCommand = new Command("Exit", Command.EXIT, 0);
            setupCommand = new Command("Setup", Command.SCREEN, 0);
            runCommand = new Command("Run", Command.SCREEN, 0);
            canvas.addCommand(exitCommand);
            canvas.addCommand(setupCommand);
            form.addCommand(exitCommand);
            form.addCommand(runCommand);
            form.setCommandListener(this);
            canvas.setCommandListener(this);
            display.setCurrent(form);
            started = true;
        }
    }
   
    protected void pauseApp() {
    }
   
    protected void destroyApp(boolean unconditional) {
    }
   
    public void commandAction(Command c, Displayable d) {
        if (c == exitCommand) {
            notifyDestroyed();
        } else if (c == runCommand) {
            display.setCurrent(canvas);
        } else if (c == setupCommand) {
            display.setCurrent(form);
        }
    }
    public void itemStateChanged(Item item) {
        if (item == blockGauge) {
            int count = blockGauge.getValue();
            if (count < 1) {
                count = 1;
            }
            canvas.setBlockCount(count);
        } else if (item == rateGauge) {
            int count = rateGauge.getValue();
            if (count < 1) {
                count = 1;
            }
            canvas.setFrameRate(count);
        }
    }
    // Creates the canvas that will draw the block
    protected AnimationCanvas createAnimationCanvas() {
        return new AnimationCanvas();
    }
    class AnimationCanvas extends Canvas {
       
        // Size of each block
        protected static final int SIZE = 6;
        // Initial speeds in the X direction
        protected final int[] xSpeeds = { 2, -2, 0, -2 };
        // Initial speeds in the Y direction
        protected final int[] ySpeeds = { 2, -2, 2, -0 };
        // Background color
        protected int background = display.isColor() ? 0xff0ff0 : 0xc0c0c0;
        // Foreground color
        protected int foreground = display.isColor() ? 0xfff000 : 0;
        // Width of screen
        protected int width = getWidth();
        // Height of screen
        protected int height = getHeight();
        // The screen update rate
        protected int frameRate;
        // The blocks to draw on the screen
        protected Block[] blocks;
        // The update timer
        protected Timer timer;
        // The update timer task
        protected TimerTask updateTask;
        // Gets the maximum number of blocks
        public int getMaxBlocks() {
            return blocks.length;
        }
        // ConstrUCts a canvas with default settings
        AnimationCanvas() {
            setBlockCount(BLOCK_COUNT);
            setFrameRate(FRAME_RATE);
        }
        // Sets the number of blocks to draw
        public void setBlockCount(int count) {
            if (count > xSpeeds.length) {
                throw new IllegalArgumentException("Cannot have more than "
                        + xSpeeds.length + " blocks");
            }
            blocks = new Block[count];
            createBlocks();
        }
        // Gets the number of blocks to draw
        public int getBlockCount() {
            return blocks.length;
        }
        // Sets the number of updates per second
        public void setFrameRate(int frameRate) {
            if (frameRate < 1 frameRate > 10) {
                throw new IllegalArgumentException("Frame rate must be > 0 and <= 10");
            }
            this.frameRate = frameRate;
            if (isShown()) {
                startFrameTimer();
            }
        }
        // Gets the number of updates per second
        public int getFrameRate() {
            return frameRate;
        }
        // Paint canvas background and all
        // of the blocks in their correct locations.
        protected void paint(Graphics g) {
            // Paint with the background color
            g.setColor(background);
            g.fillRect(0, 0, width, height);
            // Draw all of the blocks
            g.setColor(foreground);
            synchronized (this) {
                for (int i = 0, count = blocks.length; i < count; i++) {
                    g.fillRect(blocks[i].x, blocks[i].y, SIZE, SIZE);
                }
            }
        }
        // Notification that the canvas has been made visible
        protected void showNotify() {
            // Start the frame timer running
            startFrameTimer();
        }
        // Notification that the canvas is no longer visible
        protected void hideNotify() {
            // Stop the frame timer
            stopFrameTimer();
        }
        // Creates the blocks to be displayed
        private void createBlocks() {
            int startX = (width - SIZE)/2;
            int startY = (height - SIZE)/2;
            for (int i = 0, count = blocks.length; i < count; i++) {
                blocks[i] = new Block(startX, startY, xSpeeds[i], ySpeeds[i]);
            }
        }
        // Starts the frame redraw timer
        protected void startFrameTimer() {
            timer = new Timer();
            updateTask = new TimerTask() {
                public void run() {
                    moveAllBlocks();
                }
            };
            long interval = 1000/frameRate;
            timer.schedule(updateTask, interval, interval);
        }
        // Stops the frame redraw timer
        protected void stopFrameTimer() {
            timer.cancel();
        }
        // Called on eXPiry of timer.
        public synchronized void moveAllBlocks() {
            // Update the positions and speeds
            // of all of the blocks
            for (int i = 0, count = blocks.length; i < count; i++) {
                blocks[i].move();
                // Request a repaint of the screen
                repaint();
            }
        }
        // Inner class used to represent a block on the screen
        class Block {
            int x;      // X position
            int y;      // Y position
            int xSpeed; // Speed in the X direction
            int ySpeed; // Speed in the Y direction
            Block(int x, int y, int xSpeed, int ySpeed) {
                this.x = x;
                this.y = y;
                this.xSpeed = xSpeed;
                this.ySpeed = ySpeed;
            }
            void move() {
                x += xSpeed;
                if (x <= 0 x + SIZE >= width) {
                    xSpeed = -xSpeed;
                }
                y += ySpeed;
                if (y <= 0 y + SIZE >= height) {
                    ySpeed = -ySpeed;
                }
            }
        }
    }
}


(出處:http://www.49028c.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久福利视频导航| 欧美激情视频给我| 亚洲成av人影院在线观看| 色无极亚洲影院| 欧美激情一区二区三区在线视频观看| 亚洲精品自拍偷拍| 亚洲性生活视频在线观看| 97香蕉超级碰碰久久免费的优势| 在线播放国产精品| 亚洲在线观看视频网站| 亚洲一区二区三区在线免费观看| 国产精品电影观看| 国产精品高精视频免费| 91精品久久久久久久久久久| 国产成人aa精品一区在线播放| 91超碰中文字幕久久精品| 欧美日韩福利电影| 国产精品视频导航| 久久中文久久字幕| 久久亚洲国产精品成人av秋霞| 欧美日韩国内自拍| 亚洲国产精品999| 国产精品自产拍在线观看| 欧美黄色三级网站| 一道本无吗dⅴd在线播放一区| 午夜精品在线观看| 国产性色av一区二区| 国产做受69高潮| 日韩av中文在线| 亚洲日本中文字幕| 国产精品久久久久aaaa九色| 美女久久久久久久| 日韩精品免费在线播放| 国产一区二区成人| 久久亚洲电影天堂| 亚洲18私人小影院| 97国产在线视频| 欧美激情欧美激情在线五月| 欧美极品少妇与黑人| 亚洲精品mp4| 黑人极品videos精品欧美裸| 69久久夜色精品国产7777| 久久久中文字幕| 尤物九九久久国产精品的特点| 91精品视频在线播放| 日韩电影第一页| 日韩视频免费在线观看| 欧美日韩久久久久| 国产视频久久久| 久久综合久中文字幕青草| 国产91色在线免费| 亚洲成人精品av| 亚洲一区二区三区四区在线播放| 欧美精品成人91久久久久久久| 欧美猛男性生活免费| 欧美国产日韩在线| 国产九九精品视频| 91av国产在线| 亚洲欧洲第一视频| 最近2019中文字幕大全第二页| 日韩中文字幕在线免费观看| 91精品在线观看视频| 国产精品福利在线观看| 欧美激情综合色综合啪啪五月| 久久网福利资源网站| 疯狂做受xxxx欧美肥白少妇| 欧美激情视频一区二区三区不卡| 欧美性猛交xxxx| 欧美亚洲另类视频| 亚洲黄色av女优在线观看| 欧美一级淫片播放口| 91在线免费看网站| 成人写真视频福利网| 精品美女国产在线| 亚洲在线免费观看| 国产精品流白浆视频| 国模精品系列视频| 热久久视久久精品18亚洲精品| 一本一本久久a久久精品牛牛影视| 亚洲欧美日韩国产中文专区| 伊人亚洲福利一区二区三区| 国产自产女人91一区在线观看| 夜夜嗨av色一区二区不卡| 少妇av一区二区三区| 亚洲国产日韩一区| 日韩av在线直播| 久久在线观看视频| 日韩中文字幕免费| 57pao成人国产永久免费| 日韩精品在线私人| 久久久久久久av| 欧美理论电影网| 日日狠狠久久偷偷四色综合免费| 91精品国产91久久久久久久久| 欧美尤物巨大精品爽| 国产有码在线一区二区视频| 日韩中文字幕视频在线| 久久91超碰青草是什么| 久久精品人人爽| 毛片精品免费在线观看| 中文字幕精品国产| 中文字幕亚洲欧美日韩2019| 4k岛国日韩精品**专区| 久久精品成人一区二区三区| 91av在线影院| 亚洲欧美在线一区二区| 成人黄色中文字幕| 亚洲第一网站男人都懂| 国产69精品久久久久9999| 最近中文字幕2019免费| 日韩欧美一区二区在线| 亚洲一区二区日本| 美女啪啪无遮挡免费久久网站| 中文字幕日韩综合av| 青青久久av北条麻妃海外网| 久久久久久91香蕉国产| 亚洲乱码国产乱码精品精| 91av网站在线播放| 啊v视频在线一区二区三区| 久久久久久免费精品| 日韩在线观看免费av| 欧美一区第一页| 亚洲韩国欧洲国产日产av| 精品欧美aⅴ在线网站| 黄色一区二区三区| 久久免费成人精品视频| 国产精品专区第二| 亚洲女人被黑人巨大进入| 91wwwcom在线观看| 久久中文字幕在线| 日韩麻豆第一页| 综合久久五月天| 中日韩美女免费视频网址在线观看| 尤物精品国产第一福利三区| 国产伦精品一区二区三区精品视频| 亚洲乱亚洲乱妇无码| 国产亚洲一区二区在线| 久久久久亚洲精品| 成人两性免费视频| 国产精品久久久久久亚洲影视| 欧美性猛交xxxx免费看久久久| 在线观看日韩www视频免费| 亚洲成人a**站| 中文字幕在线看视频国产欧美在线看完整| 欧美国产欧美亚洲国产日韩mv天天看完整| 一本色道久久综合狠狠躁篇怎么玩| 久久综合伊人77777蜜臀| 欧美视频二区36p| 2020欧美日韩在线视频| 亚洲精品丝袜日韩| 国产日韩欧美自拍| 亚洲精品视频网上网址在线观看| 欧美影院成年免费版| 亚洲娇小xxxx欧美娇小| 日韩高清av一区二区三区| 欧美成人午夜激情| 一区二区亚洲欧洲国产日韩| 成人综合国产精品| 欧美一区二区三区免费观看| 国产精品久久网| 欧美性猛交视频| 国产欧美中文字幕| 欲色天天网综合久久| 欧美成人久久久|