服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

使用midp2.0开发游戏(2)使用sprite

sprite,精灵,顾名思义,专用来代表游戏中的动画角色,比如飞机,坦克等等。在midp1.0中,我们必须自己写专门的类来实现sprite,幸运的是,midp2.0为sprite提供了强力支持,可以创建静态,动态,不透明和透明的sprite,下面我们准备在上次的gamecanvas基础上添加一个sprite并让它动起来。

sprite的主要构造方法有:

sprite(image):构造一个单幅图案的sprite;

sprite(image, int width, int height):构造一个动画sprite,图片将按照指定大小被分为n个frame,通过setframe(int index)就可以让sprite动起来。我们用了一个有透明背景的png图片创建坦克的sprite:

使用midp2.0开发游戏(2)使用sprite(图一)

注意这个图是放大的jpg格式,你需要用photoshop之类的软件处理成有透明背景的png格式,大小为64x16

我们在eclipse中建立如下工程和目录:

使用midp2.0开发游戏(2)使用sprite(图二)

以下是画出sprite的tankgamecanvas.java

package tank.midp.core;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;

public class tankgamecanvas extends gamecanvas implements runnable {
    // 控制方向:
    private static int index_of_up = 0;
    private static int index_of_down = 1;
    private static int index_of_left = 3;
    private static int index_of_right = 2;

    private boolean isplay; // game loop runs when isplay is true
    private long delay; // to give thread consistency
    private int currentx, currenty; // to hold current position of the 'x'
    private int width; // to hold screen width
    private int height; // to hold screen height

    private sprite spritetank; // our sprite!

    // constructor and initialization
    public tankgamecanvas() {
        super(true);
        width = getwidth();
        height = getheight();
        currentx = width / 2;
        currenty = height / 2;
        delay = 20;
        // init sprite:
        try {
            image image = image.createimage("/res/img/player1.png"); // 注意路径
            spritetank = new sprite(image, 16, 16); // 大小是16x16
        }
        catch(exception e) { e.printstacktrace(); }
    }

    // automatically start thread for game loop
    public void start() {
        isplay = true;
        new thread(this).start();
    }

    public void stop() { isplay = false; }

    // main game loop
    public void run() {
        graphics g = getgraphics();
        while (isplay) {
            input();
            drawscreen(g);
            try {
                thread.sleep(delay);
            }
            catch (interruptedexception ie) {}
        }
    }

    // method to handle user inputs
    private void input() {
        int keystates = getkeystates();
        // left
        if ((keystates & left_pressed) != 0) {
            currentx = math.max(0, currentx - 1);
            spritetank.setframe(index_of_left);
        }
        // right
        if ((keystates & right_pressed) !=0 ) {
            if ( currentx + 5 < width)
                currentx = math.min(width, currentx + 1);
            spritetank.setframe(index_of_right);
        }
        // up
        if ((keystates & up_pressed) != 0) {
            currenty = math.max(0, currenty - 1);
            spritetank.setframe(index_of_up);
        }
        // down
        if ((keystates & down_pressed) !=0) {
            if ( currenty + 10 < height)
                currenty = math.min(height, currenty + 1);
            spritetank.setframe(index_of_down);
        }
    }
    // method to display graphics
    private void drawscreen(graphics g) {
        g.setcolor(0); // black
        g.fillrect(0, 0, getwidth(), getheight());

        // 画一个sprite非常简单:
        spritetank.setposition(currentx, currenty);
        spritetank.paint(g);

        flushgraphics();
    }
}

运行后的画面如下,可以用上下左右控制坦克:

使用midp2.0开发游戏(2)使用sprite(图三)

 

:~

扫描关注微信公众号