<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    夢想飛翔

    自強不息
    posts - 111, comments - 30, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    http://tech.ccidnet.com/art/1077/20050826/319351_1.html
    筆者以前是做J2EE的,一個月前由于興趣所致開始利用業(yè)余時間學(xué)習(xí)J2ME游戲開發(fā)。在網(wǎng)上看了一通教程后,便準備動手一邊學(xué)一邊做一個簡單的rpg游戲。雖然起點比較高,但感覺游戲難度越大,遇到的問題也就越多。

    這樣在問題全部解決后,也就學(xué)的差不多了。另外只有做這種游戲才有學(xué)下去的興趣。以后我會每次把寫成的源碼及思路整理成文章的形式供大家參考,互相學(xué)習(xí)進步。

    下面是游戲中所需要的部分圖片,還有的圖片下次寫到了再上傳:
    hero_left.png:



    hero_right.png:



    hero_up.png:



    hero_down.png:





    整個程序的主體在BraveCanvas類中完成,該類繼承于GameCanvas實現(xiàn)Runnable接口,由BraveMIDlet類啟動他,BraveMIDlet繼承MIDlet實現(xiàn)CommandListener接口。BraveMIDlet類代碼如下:(由于只是一個簡單的rpg,開頭畫面和菜單全部省略了,改為由一個按扭啟動游戲)

     1package brave;
     2
     3import javax.microedition.lcdui.*;
     4import javax.microedition.midlet.*;
     5
     6public class BraveMIDlet extends MIDlet implements CommandListener {
     7    private Display d;
     8    private Command exitCommand;
     9    private Command startCommand;
    10
    11    private BraveCanvas braveCanvas;
    12
    13    public BraveMIDlet() {
    14        d = Display.getDisplay(this);
    15        exitCommand = new Command("退出", Command.EXIT, 1);
    16        startCommand = new Command("開始", Command.SCREEN, 1);
    17    }

    18
    19    public void startApp() {
    20        // 創(chuàng)建BraveCanvas
    21        braveCanvas = new BraveCanvas();
    22        braveCanvas.addCommand(exitCommand);
    23        braveCanvas.addCommand(startCommand);
    24        braveCanvas.setCommandListener(this);
    25        // 裝載BraveCanvas
    26        d.setCurrent(braveCanvas);
    27    }

    28
    29    public void pauseApp() {
    30    }

    31
    32    public void destroyApp(boolean unconditional) {
    33    }

    34
    35    public void commandAction(Command c, Displayable dpa) {
    36
    37        String str_co = c.getLabel();
    38        if (str_co.equals("開始")) {
    39            // 運行BraveCanvas中的線程(啟動游戲)
    40            braveCanvas.startup();
    41        }
     else if (str_co.equals("退出")) {
    42            destroyApp(false);
    43            notifyDestroyed();
    44        }

    45    }

    46}

    47

     1package brave;
     2
     3import javax.microedition.lcdui.game.GameCanvas;
     4import javax.microedition.lcdui.Graphics;
     5import java.io.IOException;
     6
     7public class BraveCanvas extends GameCanvas implements Runnable {
     8    private boolean sign;
     9    private Graphics g;
    10    // 設(shè)置@符號的當前位置
    11    private int x, y;
    12
    13    public BraveCanvas() {
    14        super(true);
    15        // 初始化@位置
    16        x = getWidth() / 2;
    17        y = getHeight() / 2;
    18    }

    19
    20    public void startup() {
    21        this.sign = true;
    22        Thread thread = new Thread(this);
    23        // 啟動線程
    24        thread.start();
    25    }

    26
    27    public void run() {
    28        g = getGraphics();
    29        while (sign) {
    30            try {
    31                // @符號的移動
    32                input(g);
    33                // @符號的顯示
    34                paint(g);
    35                // 這里應(yīng)該有詳細的計算,方便為上,置為15
    36                Thread.sleep(15);
    37            }
     catch (Exception e) {
    38                System.out.println("2:" + e);
    39            }

    40        }

    41    }

    42
    43    public void input(Graphics g) throws IOException {
    44        int keystates = getKeyStates();
    45        switch (keystates) {
    46        case UP_PRESSED:
    47            y = Math.max(0, y - 1);
    48            break;
    49        case DOWN_PRESSED:
    50            y = Math.min(getHeight(), y + 1);
    51            break;
    52        case LEFT_PRESSED:
    53            x = Math.max(0, x - 1);
    54            break;
    55        case RIGHT_PRESSED:
    56            x = Math.min(getWidth(), x + 1);
    57            break;
    58        }

    59    }

    60
    61    public void paint(Graphics g) {
    62        // 設(shè)置畫布的背景色
    63        g.setColor(0x000000);
    64        // 把背景色畫滿畫布
    65        g.fillRect(00, getWidth(), getHeight());
    66        // 設(shè)置畫布的前景色
    67        g.setColor(0xffffff);
    68        // 在畫布上寫上@
    69        g.drawString("@", x, y, Graphics.TOP | Graphics.LEFT);
    70        // 刷新畫布
    71        flushGraphics();
    72    }

    73}

    上面代碼運行后,畫面上會出現(xiàn)一個"@"字符隨著鍵盤的左右而移動。雖然這離rpg游戲相差很遠,但這是一

    個游戲的基本框架。下面我們要做的就是把"@"換成我們的英雄。為了程序清晰,我們還要設(shè)計一個英雄類Hero,該類繼承于Sprite,這個類里面要用到上面的圖片。


     1package brave;
     2
     3import javax.microedition.lcdui.game.Sprite;
     4import javax.microedition.lcdui.Image;
     5import java.io.IOException;
     6
     7public class Hero extends Sprite {
     8    // 設(shè)置英雄的當前位置
     9    private int x, y;
    10    private BraveCanvas braveCanvas;
    11
    12    public Hero(Image image, int frameWidth, int frameHeight) {
    13        // 英雄的初始化
    14        super(image, frameWidth, frameHeight);
    15    }

    16
    17    public void setBraveCanvas(BraveCanvas braveCanvas) {
    18        this.braveCanvas = braveCanvas;
    19    }

    20
    21    public void init(int x, int y) {
    22        // 英雄位置的初始化
    23        this.x = x;
    24        this.y = y;
    25    }

    26
    27    public void afresh() {
    28        // 刷新英雄的位置
    29        setPosition(this.x, this.y);
    30    }

    31
    32    public void moveUp() throws IOException {
    33        // 英雄上移,并改為相應(yīng)的圖片
    34        setImage(Image.createImage("/hero_up.png"), 1726);
    35        nextFrame();
    36        this.y = Math.max(0, y - 1);
    37    }

    38
    39    public void moveDown() throws IOException {
    40        // 英雄下移,并改為相應(yīng)的圖片
    41        setImage(Image.createImage("/hero_down.png"), 1726);
    42        nextFrame();
    43        this.y = Math.min(braveCanvas.getHeight(), y + 1);
    44    }

    45
    46    public void moveLeft() throws IOException {
    47        // 英雄左移,并改為相應(yīng)的圖片
    48        setImage(Image.createImage("/hero_left.png"), 1726);
    49        nextFrame();
    50        this.x = Math.max(0, x - 1);
    51    }

    52
    53    public void moveRight() throws IOException {
    54        // 英雄右移,并改為相應(yīng)的圖片
    55        setImage(Image.createImage("/hero_right.png"), 1726);
    56        nextFrame();
    57        this.x = Math.min(braveCanvas.getWidth(), x + 1);
    58    }

    59
    60}


    然后把BraveCanvas類稍做修改,把"@"換成英雄

     1package brave;
     2
     3import javax.microedition.lcdui.game.GameCanvas;
     4import javax.microedition.lcdui.Graphics;
     5import java.io.IOException;
     6import javax.microedition.lcdui.Image;
     7
     8public class BraveCanvas extends GameCanvas implements Runnable {
     9    private boolean sign;
    10    private Graphics g;
    11    private Hero hero;
    12
    13    public BraveCanvas() {
    14        super(true);
    15    }

    16
    17    public void startup() {
    18        this.sign = true;
    19        try {
    20            Image heroimage = Image.createImage("/hero_up.png");
    21            hero = new Hero(heroimage, 1726);
    22            hero.setBraveCanvas(this);
    23            hero.init(4040);
    24        }
     catch (Exception e) {
    25            e.printStackTrace();
    26        }

    27        Thread thread = new Thread(this);
    28        thread.start();
    29    }

    30
    31    public void run() {
    32        g = getGraphics();
    33        while (sign) {
    34            try {
    35                input(g);
    36                paint(g);
    37                Thread.sleep(15);
    38            }
     catch (Exception e) {
    39                System.out.println("2:" + e);
    40            }

    41        }

    42    }

    43
    44    public void input(Graphics g) throws IOException {
    45        int keystates = getKeyStates();
    46        switch (keystates) {
    47        case UP_PRESSED:
    48            hero.moveUp();
    49            break;
    50        case DOWN_PRESSED:
    51            hero.moveDown();
    52            break;
    53        case LEFT_PRESSED:
    54            hero.moveLeft();
    55            break;
    56        case RIGHT_PRESSED:
    57            hero.moveRight();
    58            break;
    59        }

    60        hero.afresh();
    61    }

    62
    63    public void paint(Graphics g) {
    64        g.setColor(0x000000);
    65        g.fillRect(00, getWidth(), getHeight());
    66        g.setColor(0xffffff);
    67        hero.paint(g);
    68        flushGraphics();
    69    }

    70}


    這樣,我們的英雄就可以在畫面上移動了,不過英雄比較簡單,沒有hp,mp等等,只是一個圖片。而且如果大家感覺英雄的腳步過快,可以在BraveCanvas類中的Hero初始化時設(shè)置:




    1hero.setFrameSequence(new int[]{00110022 });

    主站蜘蛛池模板: 99久久免费国产香蕉麻豆| 黄人成a动漫片免费网站| 亚洲香蕉免费有线视频| 你懂的网址免费国产| 一级做a爱过程免费视频高清 | 成人毛片免费网站| 成年性生交大片免费看| 最新仑乱免费视频| 麻豆精品国产免费观看| 久久99免费视频| 免费观看在线禁片| 老汉精品免费AV在线播放| 最近中文字幕完整版免费高清 | 亚洲成人中文字幕| 亚洲一区综合在线播放| 亚洲高清无在码在线电影不卡| 亚洲视频免费在线观看| 亚洲成人免费电影| 亚洲色自偷自拍另类小说| 国产亚洲人成网站观看| 精品无码一区二区三区亚洲桃色 | 国产jizzjizz免费视频| 亚洲精品国产福利一二区| 成人免费视频小说| 四虎免费久久影院| 亚洲精品视频在线看| 亚洲国产精品无码久久久秋霞2| 激情内射亚洲一区二区三区| 亚洲a级成人片在线观看| 中文字幕亚洲综合久久| 亚洲精品午夜国产va久久| 国产亚洲人成在线播放| 久久99精品免费一区二区| 最近免费字幕中文大全视频| 噼里啪啦电影在线观看免费高清| 日韩一区二区免费视频| 亚洲色大成网站www永久一区| 久久亚洲精品成人av无码网站| 亚洲欧美国产国产一区二区三区| 成人午夜影视全部免费看| 精品四虎免费观看国产高清午夜|