饒榮慶 -- 您今天UCWEB了嗎?--http://www.ucweb.com

          3G 手機(jī)開發(fā)網(wǎng)

             :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            99 Posts :: 1 Stories :: 219 Comments :: 0 Trackbacks

          公告


          人要吃很多苦才可以長(zhǎng)大!

          踏實(shí)平凡人應(yīng)該遵守的原則!

          與我TM

          gooogledev@gmail.com

          友情鏈接

          我的j2me創(chuàng)意

          Wap瀏覽器的源代碼

          用自己寫的rms引擎寫的電話本

          RSS訂閱此博客  
          用抓蝦訂閱此博客
          用google訂閱此博客
          用bloglines訂閱此博客
              網(wǎng)絡(luò)封神榜 | 饒榮慶

          常用鏈接

          留言簿(8)

          我參與的團(tuán)隊(duì)

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 164787
          • 排名 - 360

          最新評(píng)論

          閱讀排行榜

          實(shí)現(xiàn)游戲中的簡(jiǎn)單打字功能

          http://www.3geye.net/bbs/thread-168-1-1.html
           
          本文講述如何在游戲開發(fā)中實(shí)現(xiàn)類似于打字的功能,其實(shí)原理和前面講述的文字滾屏差別不大,主要還是利用Timer和Canvas提供的函數(shù)。

              我們的目的是把幾個(gè)字按照順序和一定的時(shí)間間隔打印在屏幕上,這就要求我們計(jì)算好文字的寬度和具體打印的位置。例如這樣一個(gè)數(shù)組
              private final String[] content = { "hello ", "world ", "who ", "are ","you ", "?" };
          我使用的辦法是計(jì)算它們的相對(duì)距離,這樣我用一個(gè)int類型的數(shù)組來存儲(chǔ)這些數(shù)值。
              private int[] slen = new int[content.length];
          slen[0]存儲(chǔ)字開始打印的位置,這里我設(shè)置為10,slen[1]則存儲(chǔ)開始位置與hello這個(gè)字的長(zhǎng)度之和作為下個(gè)單詞world的開始位置,依次類推。
              private void initSlen()
              {

                  int temp = 10;

                  for (int i = 0; i < content.length; i++)
                  {
                      slen = temp;
                      temp = temp + font.stringWidth(content);

                  }
              }
          注意這里并沒有考慮屏幕寬度的因素,如果你要顯示多行的話應(yīng)該考慮到屏幕的寬度,調(diào)整你的算法。

              在paint()方法里面我們就按照得到的坐標(biāo)位置進(jìn)行繪畫
              protected void paint(Graphics arg0)
              {
                  if (first)
                  {
                      arg0.setColor(128, 0, 128);
                      arg0.fillRect(0, 0, getWidth(), height);
                      first = false;

                  }
                  arg0.setColor(255, 255, 255);

                  arg0.setFont(font);
                  arg0.drawString(content, slen, height / 2, Graphics.LEFT
                          | Graphics.TOP);
              }
          程序并不復(fù)雜,下面給出源代碼。

          import javax.microedition.lcdui.Display;
          import javax.microedition.midlet.MIDlet;
          import javax.microedition.midlet.MIDletStateChangeException;

          public class TypeMIDlet extends MIDlet
          {

              private Display display;
              private TypeCanvas typeCanvas;

              protected void startApp() throws MIDletStateChangeException
              {

                  display = Display.getDisplay(this);
                  typeCanvas = new TypeCanvas();
                  display.setCurrent(typeCanvas);

              }

              protected void pauseApp()
              {

              }

              protected void destroyApp(boolean arg0) throws MIDletStateChangeException
              {

              }

          }

          import java.util.Timer;
          import java.util.TimerTask;

          import javax.microedition.lcdui.Canvas;
          import javax.microedition.lcdui.Display;
          import javax.microedition.lcdui.Displayable;
          import javax.microedition.lcdui.Font;
          import javax.microedition.lcdui.Graphics;

          public class TypeCanvas extends Canvas
          {
              private Timer timer = new Timer();
              private int i = 0;
              private boolean first = true;
              private int height = getHeight();
              Font font = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD,
                      Font.SIZE_MEDIUM);
              private final String[] content = { "hello ", "world ", "who ", "are ",
                      "you ", "?" };
              private int[] slen = new int[content.length];

              public TypeCanvas()
              {
                  super();
                  initSlen();
                  TypeTask tt = new TypeTask();
                  timer.schedule(tt, 300, 300);

              }

              protected void paint(Graphics arg0)
              {
                  if (first)
                  {
                      arg0.setColor(128, 0, 128);
                      arg0.fillRect(0, 0, getWidth(), height);
                      first = false;

                  }
                  arg0.setColor(255, 255, 255);

                  arg0.setFont(font);
                  arg0.drawString(content, slen, height / 2, Graphics.LEFT
                          | Graphics.TOP);
              }

              private void initSlen()
              {

                  int temp = 10;

                  for (int i = 0; i < content.length; i++)
                  {
                      slen = temp;
                      temp = temp + font.stringWidth(content);

                  }
              }

              private class TypeTask extends TimerTask
              {
                  public void run()
                  {

                      if (i < content.length - 1)
                      {
                          repaint();
                          i++;
                      } else
                      {
                          timer.cancel();
                      }

                  }
              }
          }



          爬蟲工作室 -- 專業(yè)的手機(jī)軟件開發(fā)工作室
          3G視線 -- 專注手機(jī)軟件開發(fā)
          posted on 2007-09-23 21:20 3G工作室 閱讀(585) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 依兰县| 玉环县| 邻水| 中山市| 壶关县| 巴南区| 正定县| 红原县| 新疆| 永济市| 莫力| 吉安市| 那坡县| 尼木县| 九龙城区| 锡林浩特市| 平昌县| 恩平市| 郎溪县| 延安市| 临西县| 乌兰县| 灵台县| 重庆市| 会宁县| 南宁市| 玉林市| 始兴县| 九江市| 馆陶县| 柞水县| 栾川县| 东光县| 南木林县| 谷城县| 龙海市| 遵义县| 承德县| 商丘市| 彭山县| 迭部县|