2.2. Sprite
Sprite是指具有描画位置与大小的对象。Sprite的特征有以下三点。 1.把SpriteImage分配、移动到任意位置 2.设定SpriteImage中的优先顺序 3.进行SpriteImage同类的碰撞判定
比如,在Canvas类中,根据描画顺序对画面进行描画,其中重复的部分,需要对描画的处理顺序进行正确的编程,很繁琐。在这种情况下,如果利用Sprite优先顺序,就不用担心描画顺序,很方便。而且,Sprite的碰撞判定,对于经常发生碰撞判定处理的shooting game等应用程序,非常有效。
为了利用Sprite,在NEC扩展API中准备了以下两类。 ? Sprite ? SpriteMap
Sprite类中有以下方法。 方法 boolean isVisible() Void setImage(javax.microedition.lcdui.Image image) void setLocation(int x, int y) void setVisible(boolean b)
SpriteMap 类使用Sprite对象,因此能够进行Sprite对象的同类碰撞判定和设定Sprite对象的描画优先顺序。SpriteMap中有以下方法。
int getCollisionFlag(int index) int getCount() Sprite getSprite(int index) 取得由自变量index指定的Sprite碰撞判定flag。 返回保持的Sprite数。 返回由自变量index指定的索引Sprite。 设定Sprite的可视/非可视信息。 设定Sprite查看位置。 作用 取得Sprite的可视/非可视信息。 设定Sprite使用画面。 Sprite[] getSprites() boolean isCollision(int index1, int index2) void setCollisionAll() void setCollisionOf(int index) void setPriority(int index, int prior)
返回Sprite排列。 取得由自变量index1和index2指定的Sprite碰撞判定结果。 进行全体Sprite的相互碰撞判定。 进行由自变量index指定的Sprite碰撞判定。 设定Sprite优先顺序。 Sprite查看利用上述NxGraphics类的方法drawSpriteSet。利用drawSpriteSet方法,能够在画面上查看在SpriteSet注册的Sprite。但是,visible被false指定的Sprite却不能在画面上查看。
ng.drawSpriteSet(spriteSet);
下面是Sprite中两球发生碰撞的演示程序的source code。 该演示中,使球运动发生碰撞,则相撞的球就会消失。 import javax.microedition.lcdui.Display; import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException; /**
* 进行Sprite test的演示程序 */
public class SpriteSample extends MIDlet {
Display display; SpriteCanvas canvas; /**
* 构造函数 */
public SpriteSample(){ }
display = Display.getDisplay(this); canvas = new SpriteCanvas();
}
/**
* 打开程序 */
protected void startApp() throws MIDletStateChangeException { }
protected void pauseApp() { }
protected void destroyApp(boolean arg0) throws MIDletStateChangeException { }
display.setCurrent(canvas);
import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.Image;
import com.nec.graphics.NxGraphics; import com.nec.graphics.Sprite; import com.nec.graphics.SpriteSet; /**
* Sprite test用canvas * 球发生碰撞后消失 */
public class SpriteCanvas extends Canvas{
private final String IMAGE_PATH = \
private Image img = null; private Sprite ball1 = null; private Sprite ball2 = null; private int ball2X = 100; private int ball2Y = 100; private SpriteSet spriteSet;
/**
* 构造函数 */
public SpriteCanvas(){ } /**
* 描画方法 */
protected void paint(Graphics g) {
//清除画面 //读取画面 try { }
//Sprite的初始化
spriteSet = new SpriteSet(2); ball1 = spriteSet.getSprite(0); ball2 = spriteSet.getSprite(1);
if(img != null){ }
//球1的初始化 ball1.setImage(img); ball1.setLocation(0,0); ball1.setVisible(true);
//球2的初始化 ball2.setImage(img);
ball2.setLocation(ball2X,ball2Y); ball2.setVisible(true);
img = Image.createImage(IMAGE_PATH); e.printStackTrace(); } catch (Exception e) {
相关推荐: