讓變化成為計劃的一部分

          歡迎大家探討本Blog涉及的所有軟件課題。我的Google Talk ID:zhengyun(at)gmail.com。

          我最希望軟件帶給用戶的感受是:美好的體驗、舒適感、簡約、干凈...

          posts - 32, comments - 8, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          請參考java.util.TimerTask.

          TimerTask is something like Timer in VisualBasic. You can sepcify a time period in milliseconds

          for your requirement"一幅LOGO顯示完以后,幾秒種自動顯示下一幅LOGO".
          Here is an sample code.

          public void testTimer() {
          MyTimerTask myTimerTask 
          = new MyTimerTask();
          Timer timer 
          = new Timer();
          timer.schedule(myTimerTask, 
          500010000); //wait for 5 seconds and then call the function every 

          10 seconds
          }


          class MyTimerTask extends TimerTask {
          public void run() {
          //This method will be called every 10 Seconds

          Image im 
          = Image.createImage(imageData, 0, imageData.length);
          if(im == null)
          System.out.println(
          "NULL IMAGE");
          System.out.println(
          "The Size of the Byte Array is:" +imageData);
          if(frm.size() > 0)
          for(int i = 0; i < frm.size(); i++)
          frm.delete(i);
          frm.append(im);
          disp.setCurrent(frm);

          }

          }


           

          另外,對于你所說的是不是應(yīng)該叫做SplashScreen,那么國外曾經(jīng)有人給出這么一個例子,雖然不是周期性地顯示一張又一張的圖片,而是利用TimerTask周期性地repaint畫布,畫出一種Splash Screen的感覺,你可以參考:

          import java.util.*;

          import javax.microedition.lcdui.*;

          public class WaitCanvas
          extends Canvas {
          private int mCount, mMaximum;
          private int mInterval;

          private int mWidth, mHeight, mX, mY, mRadius;
          private String mMessage;

          public WaitCanvas() {
          mCount 
          = 0;
          mMaximum 
          = 36;
          mInterval 
          = 100;

          mWidth 
          = getWidth();
          mHeight 
          = getHeight();

          // Calculate the radius.
          int halfWidth = (mWidth - mRadius) / 2;
          int halfHeight = (mHeight - mRadius) / 2;
          mRadius 
          = Math.min(halfWidth, halfHeight);

          // Calculate the location.
          mX = halfWidth - mRadius / 2;
          mY 
          = halfHeight - mRadius / 2;

          // Create a Timer to update the display.
          TimerTask task = new TimerTask() {
          public void run() {
          mCount 
          = (mCount + 1% mMaximum;
          repaint();
          }

          }
          ;
          Timer timer 
          = new Timer();
          timer.schedule(task, 
          0, mInterval);
          }


          public void setMessage(String s) {
          mMessage 
          = s;
          repaint();
          }


          public void paint(Graphics g) {
          int theta = -(mCount * 180 / mMaximum);


          // Clear the whole screen.
          g.setColor(255255255);
          g.fillRect(
          00, mWidth, mHeight);

          // Now draw the pinwheel.
          g.setColor(000);

          g.drawArc(mX, mY, mRadius, mRadius, 
          0360);

          g.fillArc(mX, mY, mRadius, mRadius, theta 
          + 2020);
          //g.fillArc(mX, mY, mRadius, mRadius, theta + 60, 60);
          //g.fillArc(mX, mY, mRadius, mRadius, theta + 90, 90);
          //g.fillArc(mX, mY, mRadius, mRadius, theta + 120, 120);

          // Draw the message, if there is a message.
          if (mMessage != null)
          g.drawString(mMessage, mWidth 
          / 2, mHeight,
          Graphics.BOTTOM 
          | Graphics.HCENTER);
          }

          }



          上面那個是利用TimerTask自動定時填充圖形來展示Splash Screen的,那么下面這個就是顯示圖片來Splash Screen了:


           

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

          public class Splash extends Canvas {

          private Display display;
          private Displayable next;
          private Timer timer=new Timer();

          public Splash (Display display,Displayable next) {
          this.display=display;
          this.next=next;
          display.setCurrent(
          this);
          }


          protected void showNotify () {
          timer.schedule( 
          new TimerTask () public void run() {
          displayNext(); }
          }
          ,8000);
          }


          protected void hideNotify() {
          timer.cancel();
          }


          protected void keyPressed (int keycode) {
          displayNext();
          }


          protected void pointerPressed (int x, int y) {
          displayNext();
          }


          private void displayNext() {
          display.setCurrent(next);
          }
           

          protected void paint (Graphics g) {
          int height=this.getHeight();
          int width=this.getWidth();

          // fill background as white
          g.setColor(0xFFFFFF);
          g.fillRect(
          0,0,width,height);

          Image logo
          =null;
          try {
          logo
          =Image.createImage("/images/logo.png");
          }
           catch (Exception ignore) {}

          g.drawImage(logo,width
          /2,height/2,g.HCENTER|g.VCENTER);
          }


          }
           

          here
          's the calling method in your midlet(it passes the Display and current Displayable):

          /**
          * This shows the splash
          */


          private void showSplash () {
          new Splash (display,MenuList); 
          }



          還有一種辦法是利用currentTimeMillis。
          無非就是利用System.currentTimeMillis()+2000先行計算出什么時間該顯示
          后一幅圖片了,如果靠while循環(huán)不斷檢測發(fā)現(xiàn)時間到了,就換那張圖片。
          private boolean showImage;


          void someMethod()
          {
          long time = System.currentTimeMillis()+2000;

          showImage 
          = true;
          while(System.currentTimeMillis()<time)
          {
          repaint();
          serviceRepaints();
          }

          showImage 
          = false;
          }


          public void paint()
          {

          if(showImage)
          g.drawImage(img,offsetX,MAX_Y
          /2,g.LEFT|g.VCENTER);
          }

          efei說:
          “你要做的無非就是一個延時,過一定時間就換一幅圖片。至于怎么來判斷這個延時,方法多種多樣,用線程,用TimerTask,用System.currentTimeMillis(),基本上都一樣

          個人比較傾向于使用線程作為固定的時鐘脈沖來驅(qū)動游戲。

          對于System.currentTimeMillis(),我只能告訴你兩點,一是它的作用是取得當(dāng)前時間,二呢,用這個方法如果只是簡單比較時間,那么如果中斷游戲,過一段時間再恢復(fù),就會存在問題。

          主站蜘蛛池模板: 嵊泗县| 仁寿县| 肇庆市| 子长县| 兴山县| 鄯善县| 芦山县| 镇原县| 绥中县| 庆元县| 全南县| 长岛县| 泰来县| 大埔区| 永登县| 革吉县| 离岛区| 哈密市| 郧西县| 永济市| 禄劝| 怀柔区| 加查县| 栾川县| 二连浩特市| 融水| 宜昌市| 陇南市| 淅川县| 焉耆| 秭归县| 宝鸡市| 彩票| 牡丹江市| 通海县| 阳城县| 新巴尔虎右旗| 元阳县| 台中市| 巴青县| 福贡县|