在游戲開發的時候,我們可能會需要制作文字滾屏的效果。比如一行文字從屏幕下部滾動到屏幕的中間,在J2ME中我們可以借助Canvas類以及Timer類來完成類似的效果。
    在J2ME的高級的圖形用戶界面API中并沒有提供類似滾屏的效果,因此我們需要自己通過Canvas類來實現,我們應該在Canvas類的paint()的方法中繪制我們要滾動的文字,基本代碼如下所示:
    PRotected void paint(Graphics arg0)
    {
        int oldColor = arg0.getColor();
        arg0.setColor(255, 255, 255);
        arg0.fillRect(0, 0, width, height);
        arg0.setColor(oldColor);
        arg0.drawString(welcome, left, i, Graphics.LEFT  Graphics.TOP);
    }
當我們初始化一個Canvas的子類的時候,paint()方法將被調用,我們需要它定時得往上滾動,因此我們可以借助Timer和TimerTask類,我們在TimerTask類中通過實現public void run()方法來對文字的y坐標減小一定的數值。當文字到達屏幕的中間的時候停止減少并停止timer。在這里我是實現了一個內部類,當然你也可以實現成匿名內部類。
   private class ScrollTask extends TimerTask
    {
        public void run()
        {
            
            if (i > height / 2)
            {
                i = i - fontHeight;
                repaint();
            } else
            {
                going = false;
                timer.cancel();
            }
        }
    }
我們的WelcomeCanvas類擴展Canvas并實現它的paint()方法,在WelcomeCanvas的構造器中我們把display和下一個Displayable的對象傳給他,并在其中完成一些具體尺寸的計算。
    public WelcomeCanvas(Display display,Displayable disp) {
        super();
        Font font = Font.getDefaultFont();
        left = (width - font.stringWidth(welcome))/2;
        fontHeight = font.getHeight();
        this.display = display;
        this.next = disp;
        ScrollTask st = new ScrollTask();
        timer.schedule(st, 100, 100);
                
    }
當文字滾動到中間后,用戶可以通過按下任意鍵繼續操作。因此我們需要keyPressed()方法,假如是觸摸屏的話你可以用pointerPressed()方法實現。
    public void keyPressed(int keyCode)
    {
        if(!going)
        display.setCurrent(next);
    }
下圖是程序運行的結果,并給出源代碼。其實很多類似的效果都可以通過這樣的方法來實現。
新聞熱點
疑難解答