游戏策划咨讯
做一个游戏并不难,难的是做一个好游戏;完美在于积累!
漂亮的游戏开始画面

介绍一个游戏开始的画面。
先建两个类 MenuScreen.java  SimpleCustomMenuWithBGFont.java用于测试


首先说下SimpleCustomMenuWithBGFont.java


import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
//import java.util.*;


public class SimpleCustomMenuWithBGFont extends MIDlet implements CommandListener {


  Display display;
  Display pauseDisplay;
  boolean isSplash = true;
  MenuScreen menuScreen;


  public SimpleCustomMenuWithBGFont() {
    MenuScreen menuScreen = new MenuScreen();
    display = Display.getDisplay(this);
    display.setCurrent(menuScreen);
  }


  protected void startApp() throws MIDletStateChangeException   {
  }


  protected void pauseApp() {  }
  protected void destroyApp (boolean flag) throws MIDletStateChangeException {}


  public void commandAction (Command cmd, Displayable dis) {


  }
}
这个类很简单,就是作为了测试使用的。


主要来介绍一下MenuScreen.java



import javax.microedition.lcdui.*;


public class MenuScreen extends Canvas implements Runnable {


  // 设置字体
  static final Font lowFont  = Font.getFont (Font.FACE_MONOSPACE, Font.STYLE_PLAIN, Font.SIZE_SMALL);
  static final Font highFont = Font.getFont (Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_MEDIUM);
  static final int NEW_GAME = 0;
    static final int HIGH_SCORE = 1;
    static final int SETTINGS = 2;
    static final int HELP = 3;
    static final int ABOUT = 4;
    static final int MENU_ITEM_COUNT = 5;


  // 设置颜色
  static final int lowColor  = 0x0000FF00;    // Not Highlighted
  static final int highColor = 0x000000FF;    // Highlighted
  static final int highBGColor = 0x00CCCCCC;  // Highlighted Background



  static int width;   //屏幕宽
  static int height;  // 屏幕高


  static int startHeight;  // 菜单开始的高度


  static final int spacing = highFont.getHeight()/2;  // 菜单项间的距离
  // 菜单项
  static final String[] mainMenu = {"New Game","High Score","Settings","Help","About"};
  // 当前高亮显示的索引号
  static int menuIdx;
  Thread thread;
  // 背景图
  Image bgImage;
  //构造
  public MenuScreen() {
    width = getWidth();
    height = getHeight();
    // 计算菜单开始的高度
    startHeight = (highFont.getHeight() * mainMenu.length) + ((mainMenu.length-1) * spacing);
    startHeight = (height - startHeight) / 2;
    // 默认所选为菜单的第一项
    menuIdx = 0;
    try {
      bgImage = Image.createImage("/res/bg.png");
    } catch (Exception e) {}


    thread = new Thread(this);
    thread.start();
  }
  public void run() {
    while(true) {
      repaint();
    }
  }
public void paint(Graphics g) {
//清屏
    g.setColor(0x00000000);
    g.fillRect(0,0,width,height);
// 背景
    g.drawImage(bgImage,(width - bgImage.getWidth()) / 2, (height - bgImage.getHeight())/2,20);
    for (int i=0; i<mainMenu.length; i++) {
      if (i==menuIdx) {
       //g.setColor(highBGColor);
       //g.fillRect(0,startHeight + (i*highFont.getHeight()) + spacing,width,highFont.getHeight());
        g.setFont(highFont);
        g.setColor(highColor);
        g.drawString(mainMenu,
                     (width - highFont.stringWidth(mainMenu)) / 2,
                      startHeight + (i*highFont.getHeight()) + spacing,
                      20
                     );



      } else {
        g.setFont(lowFont);
        g.setColor(lowColor);
        g.drawString(mainMenu,
                     (width - lowFont.stringWidth(mainMenu)   ) / 2,
                     startHeight + (i*highFont.getHeight()) + spacing,
                     20
                    );
      }
    }
  }



  protected void keyPressed (int code) {
    if (getGameAction(code) == Canvas.UP && menuIdx - 1 >= 0) {
      menuIdx--;
    } else if (getGameAction(code) == Canvas.DOWN && menuIdx + 1 < mainMenu.length) {
      menuIdx++;
    }else if (getGameAction(code) == Canvas.FIRE)
    switch(menuIdx) {
         case NEW_GAME:   System.out.println("Start New Game"); break;
         case HIGH_SCORE: System.out.println("Display High Score"); break;
         case SETTINGS:   System.out.println("Display Settings"); break;
         case HELP:       System.out.println("Display Help"); break;
         case ABOUT:      System.out.println("Display About Info."); break;
       }


  }
}


顺便这里介绍一下J2ME中的字体:
字体的属性由:字体类型,风格和字体大小构成,请注意颜色并不是字体的属性。字体
类型由Form类中的静态常量进行定义,可能的取值:
FACE_MONOSPACE: 等宽字体
FACE_PROPORTIONAL: 比例字体,非常宽
FACE_SYSTEM: 系统字体


字体风格由Font 类中的静态常量进行定义,字体风格是可以多选的,可能的取值为:
STYLE_BOLD : 加粗
STYLE_ITALIC :斜体
STYLE_PLAIN :常规
STYLE_UNDERLINED:带下划线字体


字体由Font 类中的静态常量进行定义,可能的取值为:
SIZE_LARGE: 大号字体
SIZE_MEDIUM: 中号字体
SIZE_SMALL: 小号字体


创建字体时并不是通过Font 类的构造方法来创建,而是利用Font类的静态方法
static Font getFont(int face,int style,int size)来创建字体。或者利用
static font getDefauleFont()来创建系统默认字体。
在MIDP v2.0中,为Font类增加了新的一个方法用于创建字体,即 static Font
getFont(int fontSpecifier),参数fontSpecifier的取值范围被定义为Font类
的静态常量,目前只能由俩种取值:
FONT_STATIC_TEXT:静态文本字体,定义了屏幕显示时设备采用的字体
FONT_INPUT_TEXT:输入文体,定义了在用户输入时设备采用的字体
在显示文字时,如果文字过长而超过当前屏幕的宽度,那么多余的部分将无法显示,
所以为了有效地显示文字可以用检测字符或者字符串的宽度的方法,由程序判断每
行输出的字符数,来达到更好的显示效果.

posted on 2005-04-08 19:01 蓝色雪焰 阅读(537) 评论(0)  编辑  收藏 所属分类: 编程技术

只有注册用户登录后才能发表评论。


网站导航: