<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

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

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

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



    hero_right.png:



    hero_up.png:



    hero_down.png:





    整個程序的主體在BraveCanvas類中完成,該類繼承于GameCanvas實現Runnable接口,由BraveMIDlet類啟動他,BraveMIDlet繼承MIDlet實現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        // 創建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    // 設置@符號的當前位置
    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                // 這里應該有詳細的計算,方便為上,置為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        // 設置畫布的背景色
    63        g.setColor(0x000000);
    64        // 把背景色畫滿畫布
    65        g.fillRect(00, getWidth(), getHeight());
    66        // 設置畫布的前景色
    67        g.setColor(0xffffff);
    68        // 在畫布上寫上@
    69        g.drawString("@", x, y, Graphics.TOP | Graphics.LEFT);
    70        // 刷新畫布
    71        flushGraphics();
    72    }

    73}

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

    個游戲的基本框架。下面我們要做的就是把"@"換成我們的英雄。為了程序清晰,我們還要設計一個英雄類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    // 設置英雄的當前位置
     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        // 英雄上移,并改為相應的圖片
    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        // 英雄下移,并改為相應的圖片
    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        // 英雄左移,并改為相應的圖片
    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        // 英雄右移,并改為相應的圖片
    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初始化時設置:




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

    主站蜘蛛池模板: 亚洲综合成人婷婷五月网址| 4虎永免费最新永久免费地址| 亚洲精品91在线| 亚洲日本韩国在线| 成人免费无码大片a毛片软件| 在线成人精品国产区免费| 亚洲AV无码一区二区三区网址| 黄色免费在线网站| 理论片在线观看免费| 亚洲中文字幕乱码AV波多JI| 亚洲色av性色在线观无码| 亚洲区小说区图片区QVOD| 亚洲欧洲日产国码高潮αv| 日本免费v片一二三区| 国产va精品免费观看| 91免费人成网站在线观看18| 国产又黄又爽又大的免费视频| 老司机午夜精品视频在线观看免费| 中中文字幕亚洲无线码| 亚洲精品第一国产综合精品| 亚洲国产精品无码久久久不卡| 国产成人99久久亚洲综合精品 | 亚洲VA中文字幕不卡无码| 国产乱子伦精品免费女| 国产精品免费小视频| 在线播放免费人成视频网站| 一级看片免费视频| 美国毛片亚洲社区在线观看| 一本色道久久88亚洲精品综合 | 久久亚洲AV成人无码软件| 亚洲AV无码精品无码麻豆| 亚洲中文字幕无码中文字在线| av无码东京热亚洲男人的天堂| 国产99精品一区二区三区免费| 国产亚洲精品91| 特级毛片aaaa级毛片免费| 免费福利资源站在线视频| 成人在线免费视频| WWW免费视频在线观看播放| 免费在线黄色电影| 99久久免费观看|