国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

使用MIDP2.0開發(fā)游戲(2)使用Sprite

2019-11-17 06:27:34
字體:
供稿:網(wǎng)友

SPRite,精靈,顧名思義,專用來代表游戲中的動(dòng)畫角色,比如飛機(jī),坦克等等。在MIDP1.0中,我們必須自己寫專門的類來實(shí)現(xiàn)Sprite,幸運(yùn)的是,MIDP2.0為Sprite提供了強(qiáng)力支持,可以創(chuàng)建靜態(tài),動(dòng)態(tài),不透明和透明的Sprite,下面我們預(yù)備在上次的GameCanvas基礎(chǔ)上添加一個(gè)Sprite并讓它動(dòng)起來。

Sprite的主要構(gòu)造方法有:

Sprite(Image):構(gòu)造一個(gè)單幅圖案的Sprite;

Sprite(Image, int width, int height):構(gòu)造一個(gè)動(dòng)畫Sprite,圖片將按照指定大小被分為N個(gè)Frame,通過setFrame(int index)就可以讓Sprite動(dòng)起來。我們用了一個(gè)有透明背景的png圖片創(chuàng)建坦克的Sprite:

使用MIDP2.0開發(fā)游戲(2)使用Sprite(圖一)

(注重這個(gè)圖是放大的JPG格式,你需要用photoshop之類的軟件處理成有透明背景的png格式,大小為64x16)

我們?cè)贓clipse中建立如下工程和目錄:

使用MIDP2.0開發(fā)游戲(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());

        // 畫一個(gè)Sprite非常簡單:
        spriteTank.setPosition(currentX, currentY);
        spriteTank.paint(g);

        flushGraphics();
    }
}



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 河源市| 文安县| 正宁县| 获嘉县| 临泉县| 大竹县| 泗阳县| 河曲县| 吉安县| 镇坪县| 西乡县| 定襄县| 万年县| 玛多县| 玉门市| 巴塘县| 沙洋县| 宁波市| 湛江市| 黎川县| 屏山县| 潜山县| 错那县| 衡水市| 莱阳市| 天门市| 当涂县| 封开县| 阳山县| 宜城市| 池州市| 松桃| 大同县| 岑溪市| 玉山县| 普宁市| 台江县| 澳门| 清涧县| 太康县| 固安县|