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

📄 sprite.java

📁 现在大部分手机都不支持WTK2.0
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
// generated by de.enough.doc2java.Doc2Java (www.enough.de) on Sat Dec 06 15:06:44 CET 2003//only include this file for midp1-devices://#condition polish.midp1 || (polish.usePolishGameApi == true) || polish.blackberry/* * Copyright (c) 2004-2005 Robert Virkus / Enough Software * * This file is part of J2ME Polish. * * J2ME Polish is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. *  * J2ME Polish is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. *  * You should have received a copy of the GNU General Public License * along with J2ME Polish; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA *  * Commercial licenses are also available, please * refer to the accompanying LICENSE.txt or visit * http://www.j2mepolish.org for details. */package de.enough.polish.ui.game;import javax.microedition.lcdui.Graphics;import javax.microedition.lcdui.Image;//#ifdef polish.api.siemens-color-game-api	//# import com.siemens.mp.color_game.TiledLayer;//#endif//#ifdef polish.api.nokia-ui	import com.nokia.mid.ui.DirectGraphics;	import com.nokia.mid.ui.DirectUtils;//#endif/** * A Sprite is a basic visual element that can be rendered with one of * several frames stored in an Image; different frames can be shown to * animate the Sprite.  Several transforms such as flipping and rotation * can also be applied to a Sprite to further vary its appearance.  As with * all Layer subclasses, a Sprite's location can be changed and it can also * be made visible or invisible. * <h3>Sprite Frames</h3> * The raw frames used to render a Sprite are provided in a single Image * object, which may be mutable or immutable.  If more than one frame is used, * the Image is broken up into a series of equally-sized frames of a specified * width and height.  As shown in the figure below, the same set of frames may * be stored in several different arrangements depending on what is the most * convenient for the game developer. * <br> * <center><img src="doc-files/frames.gif" width=777 height=402 * ALT="Sprite Frames"></center> * <br> * <p> * Each frame is assigned a unique index number.  The frame located in the * upper-left corner of the Image is assigned an index of 0.  The remaining * frames are then numbered consecutively in row-major order (indices are * assigned across the first row, then the second row, and so on).  The method * <A HREF="../../../../javax/microedition/lcdui/game/Sprite.html#getRawFrameCount()"><CODE>getRawFrameCount()</CODE></A> returns the total number of raw frames. * <h3>Frame Sequence</h3> * A Sprite's frame sequence defines an ordered list of frames to be displayed. * The default frame sequence mirrors the list of available frames, so * there is a direct mapping between the sequence index and the corresponding * frame index.  This also means that the length of the default frame sequence * is equal to the number of raw frames.  For example, if a Sprite has 4 * frames, its default frame sequence is {0, 1, 2, 3}. * <center><img src="doc-files/defaultSequence.gif" width=182 height=269 * ALT="Default Frame Sequence"></center> * The developer must manually switch the current frame in the frame sequence. * This may be accomplished by calling <A HREF="../../../../javax/microedition/lcdui/game/Sprite.html#setFrame(int)"><CODE>setFrame(int)</CODE></A>, * <A HREF="../../../../javax/microedition/lcdui/game/Sprite.html#prevFrame()"><CODE>prevFrame()</CODE></A>, or <A HREF="../../../../javax/microedition/lcdui/game/Sprite.html#nextFrame()"><CODE>nextFrame()</CODE></A>.  Note that these methods * always operate on the sequence index, they do not operate on frame indices; * however, if the default frame sequence is used, then the sequence indices * and the frame indices are interchangeable. * If desired, an arbitrary frame sequence may be defined for a Sprite. * The frame sequence must contain at least one element, and each element must * reference a valid frame index.  By defining a new frame sequence, the * developer can conveniently display the Sprite's frames in any order * desired; frames may be repeated, omitted, shown in reverse order, etc. * For example, the diagram below shows how a special frame sequence might be * used to animate a mosquito.  The frame sequence is designed so that the * mosquito flaps its wings three times and then pauses for a moment before * the cycle is repeated. * <center><img src="doc-files/specialSequence.gif" width=346 height=510 * ALT="Special Frame Sequence"></center> * By calling <A HREF="../../../../javax/microedition/lcdui/game/Sprite.html#nextFrame()"><CODE>nextFrame()</CODE></A> each time the display is updated, the * resulting animation would like this: * <br> * <center><img src="doc-files/sequenceDemo.gif" width=96 height=36></center> * <h3>Reference Pixel</h3> * Being a subclass of Layer, Sprite inherits various methods for setting and * retrieving its location such as <A HREF="../../../../javax/microedition/lcdui/game/Layer.html#setPosition(int, int)"><CODE>setPosition(x,y)</CODE></A>, * <A HREF="../../../../javax/microedition/lcdui/game/Layer.html#getX()"><CODE>getX()</CODE></A>, and <A HREF="../../../../javax/microedition/lcdui/game/Layer.html#getY()"><CODE>getY()</CODE></A>.  These methods all define * position in terms of the upper-left corner of the Sprite's visual bounds; * however, in some cases, it is more convenient to define the Sprite's position * in terms of an arbitrary pixel within its frame, especially if transforms * are applied to the Sprite. * Therefore, Sprite includes the concept of a <em>reference pixel</em>. * The reference pixel is defined by specifying its location in the * Sprite's untransformed frame using * <A HREF="../../../../javax/microedition/lcdui/game/Sprite.html#defineReferencePixel(int, int)"><CODE>defineReferencePixel(x,y)</CODE></A>. * By default, the reference pixel is defined to be the pixel at (0,0) * in the frame.  If desired, the reference pixel may be defined outside * of the frame's bounds. * <p> * In this example, the reference pixel is defined to be the pixel that * the monkey appears to be hanging from: * <p> * <center><img src="doc-files/refpixel.gif" width=304 height=199 * ALT="Defining The Reference Pixel"></center> * <p> * <A HREF="../../../../javax/microedition/lcdui/game/Sprite.html#getRefPixelX()"><CODE>getRefPixelX()</CODE></A> and <A HREF="../../../../javax/microedition/lcdui/game/Sprite.html#getRefPixelY()"><CODE>getRefPixelY()</CODE></A> * can be used to query the location of the reference pixel in the painter's * coordinate system.  The developer can also use * <A HREF="../../../../javax/microedition/lcdui/game/Sprite.html#setRefPixelPosition(int, int)"><CODE>setRefPixelPosition(x,y)</CODE></A> to position the Sprite * so that reference pixel appears at a specific location in the painter's * coordinate system.  These methods automatically account for any transforms * applied to the Sprite. * <p> * In this example, the reference pixel's position is set to a point at the end * of a tree branch; the Sprite's location changes so that the reference pixel * appears at this point and the monkey appears to be hanging from the branch: * <p> * <center><img src="doc-files/setrefposition.gif" width=332 height=350 * ALT="Setting The Reference Pixel Position"></center> * <p> * <a name="transforms"></a> * <h3>Sprite Transforms</h3> * Various transforms can be applied to a Sprite.  The available transforms * include rotations in multiples of 90 degrees, and mirrored (about * the vertical axis) versions of each of the rotations.  A Sprite's transform * is set by calling <A HREF="../../../../javax/microedition/lcdui/game/Sprite.html#setTransform(int)"><CODE>setTransform(transform)</CODE></A>. * <p> * <center><img src="doc-files/transforms.gif" width=355 height=575 * ALT="Transforms"></center> * <br> * When a transform is applied, the Sprite is automatically repositioned * such that the  reference pixel appears stationary in the painter's * coordinate system.  Thus, the reference pixel effectively becomes the * center of the transform operation.  Since the reference pixel does not * move, the values returned by <A HREF="../../../../javax/microedition/lcdui/game/Sprite.html#getRefPixelX()"><CODE>getRefPixelX()</CODE></A> and * <A HREF="../../../../javax/microedition/lcdui/game/Sprite.html#getRefPixelY()"><CODE>getRefPixelY()</CODE></A> remain the same; however, the values returned by * <A HREF="../../../../javax/microedition/lcdui/game/Layer.html#getX()"><CODE>getX()</CODE></A> and <A HREF="../../../../javax/microedition/lcdui/game/Layer.html#getY()"><CODE>getY()</CODE></A> may change to reflect the * movement of the Sprite's upper-left corner. * <p> * Referring to the monkey example once again, the position of the * reference pixel remains at (48, 22) when a 90 degree rotation * is applied, thereby making it appear as if the monkey is swinging * from the branch: * <p> * <center><img src="doc-files/transcenter.gif" width=333 height=350 * ALT="Transform Center"></center> * <p> * <h3>Sprite Drawing</h3> * Sprites can be drawn at any time using the <A HREF="../../../../javax/microedition/lcdui/game/Sprite.html#paint(javax.microedition.lcdui.Graphics)"><CODE>paint(Graphics)</CODE></A> method. * The Sprite will be drawn on the Graphics object according to the current * state information maintained by the Sprite (i.e. position, frame, * visibility).  Erasing the Sprite is always the responsibility of code * outside the Sprite class.<p> * <p> * Sprites can be implemented using whatever techniques a manufacturers * wishes to use (e.g hardware acceleration may be used for all Sprites, for * certain sizes of Sprites, or not at all). * <p> * For some platforms, certain Sprite sizes may be more efficient than others; * manufacturers may choose to provide developers with information about * device-specific characteristics such as these. * <p>  *  * @author Robert Virkus (original implementation) * @author Thomas Boyer (optimizations) */public class Sprite//#ifdef polish.api.siemens-color-game-api	//# extends com.siemens.mp.color_game.Sprite//#else	extends Layer//#endif{	/**	 * No transform is applied to the Sprite.	 * This constant has a value of <code>0</code>.</DL>	 * 	 */	public static final int TRANS_NONE = 0;	/**	 * Causes the Sprite to appear rotated clockwise by 90 degrees.	 * This constant has a value of <code>5</code>.</DL>	 * 	 */	public static final int TRANS_ROT90 = 5;	/**	 * Causes the Sprite to appear rotated clockwise by 180 degrees.	 * This constant has a value of <code>3</code>.</DL>	 * 	 */	public static final int TRANS_ROT180 = 3;	/**	 * Causes the Sprite to appear rotated clockwise by 270 degrees.	 * This constant has a value of <code>6</code>.</DL>	 * 	 */	public static final int TRANS_ROT270 = 6;	/**	 * Causes the Sprite to appear reflected about its vertical	 * center.	 * This constant has a value of <code>2</code>.</DL>	 * 	 */	public static final int TRANS_MIRROR = 2;	/**	 * Causes the Sprite to appear reflected about its vertical	 * center and then rotated clockwise by 90 degrees.	 * This constant has a value of <code>7</code>.</DL>	 * 	 */	public static final int TRANS_MIRROR_ROT90 = 7;	/**	 * Causes the Sprite to appear reflected about its vertical	 * center and then rotated clockwise by 180 degrees.	 * This constant has a value of <code>1</code>.</DL>	 * 	 */	public static final int TRANS_MIRROR_ROT180 = 1;	/**	 * Causes the Sprite to appear reflected about its vertical	 * center and then rotated clockwise by 270 degrees.	 * This constant has a value of <code>4</code>.</DL>	 * 	 * 	 */	public static final int TRANS_MIRROR_ROT270 = 4;			private Image image;	private int refPixelX;	private int refPixelY;	private int frameSequenceIndex;	private int[] frameSequence;	private int transform;	//#ifdef polish.api.nokia-ui		private static final int[] NOKIA_TRANSFORM_LOOKUP = {			0,			DirectGraphics.FLIP_VERTICAL,			DirectGraphics.FLIP_HORIZONTAL,			DirectGraphics.ROTATE_180,			DirectGraphics.ROTATE_90 | DirectGraphics.FLIP_VERTICAL,			DirectGraphics.ROTATE_270,			DirectGraphics.ROTATE_90,			DirectGraphics.ROTATE_90 | DirectGraphics.FLIP_HORIZONTAL		};		private int nokiaTransform;		private Image nokiaFrame;		private Image[] nokiaFrames;	//#endif	private int collisionX;	private int collisionY;	private int collisionWidth;	private int collisionHeight;	private int transformedCollisionX;	private int transformedCollisionY;	private int transformedCollisionWidth;	private int transformedCollisionHeight;	private int frameHeight;	private int frameWidth;	private int rawFrameCount;	private boolean isSingleFrame;	private int transformedRefX;	private int transformedRefY;	private int numberOfColumns;	private int column;	private int row;		//#ifdef polish.api.siemens-color-game-api		//# protected int xPosition;		//# protected int yPosition;		//# protected int width;		//# protected int height;		//# protected boolean isVisible = true;	//#endif	/**	 * Creates a new non-animated Sprite using the provided Image.	 * This constructor is functionally equivalent to calling	 * <code>new Sprite(image, image.getWidth(), image.getHeight())</code>	 * <p>	 * By default, the Sprite is visible and its upper-left	 * corner is positioned at (0,0) in the painter's coordinate system.	 * <br>	 * 	 * @param image the Image to use as the single frame for the Sprite	 * @throws NullPointerException if img is null	 */	public Sprite( Image image)	{		//#ifdef polish.api.siemens-color-game-api			//# super( image );		//#else			setImage( image, image.getWidth(), image.getHeight() );		//#endif	}

⌨️ 快捷键说明

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