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

📄 smallball.java

📁 j2me手机上的音频开发
💻 JAVA
字号:
/* * @(#)SmallBall.java	1.6 04/03/11 * * Copyright (c) 1999-2004 Sun Microsystems, Inc. All rights reserved. * PROPRIETARY/CONFIDENTIAL * Use is subject to license terms */package example.audiodemo;import javax.microedition.lcdui.*;import javax.microedition.media.control.*;/** * A SmallBall is a lightweight animated ball that runs in its own thread. * It moves within a rectangular region, bouncing off the walls. */class SmallBall implements Runnable {    // random number generator    static java.util.Random random = new java.util.Random();    // Global flag to temporarily pause all balls    public static boolean paused = false;    private final static int DEFAULT_DELAY = 8;    private final static int MIN_DELAY = 1;    private final static int MAX_DELAY = 128;    // controls the speed of all balls; delay in milliseconds    static int delay = DEFAULT_DELAY;    static void slower() {	delay *= 2;	if (delay > MAX_DELAY) delay = MAX_DELAY;    }    static void faster() {	delay /= 2;	if (delay < MIN_DELAY) delay = MIN_DELAY;    }    /**     * Returns the speed in percent of     * the DEFAULT_DELAY     */    static int getSpeedPercent() {	int ret = 100; // start with 100%	int thisDelay = delay;	while (thisDelay > DEFAULT_DELAY) {	    thisDelay /= 2;	    ret -= 10;	}	while (thisDelay < DEFAULT_DELAY) {	    thisDelay *= 2;	    ret += 10;	}	return ret;    }    // the matrix to transform the direction based on the    // current direction and which wall was hit    static int[][] matrix = {	{  1,-1,  -1, 1,   1, 1 },	{ -1,-1,   1, 1,  -1, 1 },	null,	{  1, 1,  -1,-1,   1,-1 },	{ -1, 1,   1,-1,  -1,-1 }    };    // the region in which the ball moves    int top, left, width, height;    // the position and radius of the ball    int posX, posY;    int radius = 5, ballSize = radius*2;    // the direction of the ball is controlled by these two variables    int deltaX;    int deltaY;    // a handle onto the singleton Graphics object    Graphics g;    Canvas canvas;    int note = ToneControl.C4;    int clr = 0;    // public variables to control the behaviour of the thread    public boolean stop; // = false    // if true, this thread will call repaint()    public boolean doRepaint; // = false;    /**     * Constructor defines the region in which the ball moves as well     * as its starting position.     */    SmallBall(Canvas c, int left, int top, int width, int height) {	super();	canvas = c;	this.left = left + 1;	this.top  = top + 1;	this.width = width - (2 * radius + 2);	this.height = height - (2 * radius + 2);	// use positive random #s	this.posX = (random.nextInt()>>>1) % (this.width-20) + 10;	this.posY = (random.nextInt()>>>1) % (this.height-20) + 10;	deltaX = random.nextInt() & 1;	deltaY = random.nextInt() & 1;	if (deltaX == 0) deltaX = -1;	if (deltaY == 0) deltaY = -1;	stop = true;    }    public void setNote(int note) {	this.note = note;    }    /**     * Starts the ball running.     */    public void run() {	// System.out.println("starting... " + this);	int right = left + width;	int bottom = top + height;	while (!stop) {	    ballSize = radius * 2;	    // calculate a direction of the ball as an integer in the range	    // -2 .. 2 (excluding 0)	    int direction = deltaX + deltaY;	    if (direction == 0) direction = deltaX + 2*deltaY;	    // is the current position colliding with any wall	    int collision = 0;	    if (posX <= left || posX >= right) collision++;	    if (posY <= top || posY >= bottom) collision += 2;	    // change the direction appropriately if there was a collision	    if (collision != 0) {		try {		    javax.microedition.media.Manager.playTone(note, 100/*ms*/,100);		} catch (Exception ex) {		    System.out.println("failed to play tone");		}		collision = (collision - 1) * 2;		deltaX = matrix[direction+2][collision];		deltaY = matrix[direction+2][collision+1];	    }	    // calculate the new position and queue a repaint	    posX = posX + deltaX;	    posY = posY + deltaY;	    if (doRepaint) {		canvas.repaint();	    }	    // use the delay to control the speed of the ball	    // if the MIDlet is paused, keep on waiting	    do {		try {		    // if paused, always wait 100 millis,		    // regardless of ball speed		    Thread.sleep(paused?100:delay);		} catch (InterruptedException e) {}	    } while (paused && !stop);	}    }    /**     * Paint the ball.     */    void paint(Graphics g) {	g.setColor(clr);	g.fillArc(posX,posY,ballSize,ballSize,0,360);    }    public void setColor(int clr) {	this.clr = clr;    }    public String toString() {	return super.toString() + " x = " + posX + ", y = " + posY;    }}

⌨️ 快捷键说明

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