<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    游戲策劃咨訊
    做一個(gè)游戲并不難,難的是做一個(gè)好游戲;完美在于積累!

    動(dòng)畫(huà)方面.

    前面的朋友說(shuō)了動(dòng)畫(huà)的制作,一個(gè)動(dòng)畫(huà)是由很多幀組在的.,您說(shuō)的方法把一幀幀的動(dòng)畫(huà)做成一幅幅的圖象,再一幅幅地載入,這樣做的效率不高.應(yīng)該把各幅員的動(dòng)畫(huà)放在一起,做成一幅大的圖,加載一幅大圖比加載多幅小圖效率要高,一幅大圖也比多幅小圖容易管理得多.那么怎樣做呢?


    做法和前面朋友說(shuō)的差不多,關(guān)鍵是這個(gè)方法:
    drawImage(Image img,dx1,dy1,dx2,dy2,sx1,sy1,sx1,sy1,this)
    其中Image img是來(lái)源圖象,
        dx1是目的區(qū)域的===左上===頂點(diǎn)的===X====坐標(biāo);

        dy1是目的區(qū)域的===左上===頂點(diǎn)的===Y====坐標(biāo);

        dx2是目的區(qū)域的===右下===頂點(diǎn)的===X====坐標(biāo);

        dy2是目的區(qū)域的===右下===頂點(diǎn)的===Y====坐標(biāo);

        sx1是來(lái)源區(qū)域的===左上===頂點(diǎn)的===X====坐標(biāo);

        sy1是來(lái)源區(qū)域的===左上===頂點(diǎn)的===Y====坐標(biāo);

        sx2是來(lái)源區(qū)域的===右下===頂點(diǎn)的===X====坐標(biāo);

        sy2是來(lái)源區(qū)域的===右下===頂點(diǎn)的===Y====坐標(biāo).
    ================================================================
    下面是一個(gè)動(dòng)畫(huà)的程序代碼.
    import java.awt.*;
    import java.applet.*;
    public class Seriallmage4 extends Applet implements Runnable
    {
      int SPF;                       //用來(lái)表示線程暫停的時(shí)間
      int sx,sy;
    /******************************************************************
    sx,sy用來(lái)表示來(lái)源區(qū)域的左上頂點(diǎn).因?yàn)槊恳粠覀兌甲龀闪碎L(zhǎng)是80寬87的圖,再把它們放在一起做成一幅大的圖,
    所以來(lái)源區(qū)域的右下頂點(diǎn)的坐標(biāo)等于左上頂點(diǎn)坐標(biāo)加上長(zhǎng)和高.
    式子為:sx+80;sy+87
    ******************************************************************/                     
      Image Animation;              //來(lái)源圖象
      MediaTracker MT;              //圖像追蹤器,用來(lái)檢查圖像是否完全加載
      Thread newThread;             //新的線程.
      Image OffScreen;              //后臺(tái)圖像;
      Graphics drawOffScreen;       //繪制后臺(tái)圖像的實(shí)體(實(shí)例).
    //======================init()函數(shù)===========================
      public void init()
      {
         SPF=100;                   //線程暫停的時(shí)間是100豪秒,
         MT=new MediaTracker(this); //實(shí)體化圖像追蹤器.
         Animation=getImage(getDocumentBase(),"lunisEx.gif");//加載圖像.
    //======================//追蹤圖像=============================
         MT.addImage(Animation,0);  
         try
         {
           showStatus("圖象加載中....");   //在狀態(tài)欄中顯示信息
           MT.waitForAll();                //等待加載
         }
         catch(InterruptedException E){}
    //============================================================
         OffScreen=createImage(300,300);  //建立后臺(tái)畫(huà)面的實(shí)體
         drawOffScreen=OffScreen.getGraphics();  //取得后臺(tái)畫(huà)面的繪制類(lèi)
      }
    //===========================================================
      public void start()                //start函數(shù)
      {
         newThread=new Thread(this);     //建立線程
         newThread.start();              //啟動(dòng)線程
      }
      public void stop()                 //stop函數(shù)
      {
         newThread=null;                 //線程設(shè)為null
      }
    //==========================================================
      public void paint(Graphics g)
      {
         drawOffScreen.setColor(Color.green);    //設(shè)置后臺(tái)畫(huà)面的背景色,
         drawOffScreen.fillRect(0,0,300,300);    //畫(huà)一次背景,作用是清除后臺(tái)畫(huà)面,如果背景是一幅畫(huà)
    //則要用這幅圖來(lái)畫(huà).
         drawOffScreen.drawImage(Animation,20,20,250,250,sx,sy,sx+80,sy+87,this);//在后臺(tái)畫(huà)面繪制
    //的圖像,
         g.drawImage(OffScreen,0,0,300,300,this);//把后臺(tái)畫(huà)面畫(huà)到前臺(tái)畫(huà)面
      }
      public void update(Graphics g)
      {
         paint(g);                              
      }
    //====================新動(dòng)畫(huà)循環(huán)在此========================50
       public void run()                       
       {
          while(newThread !=null)               //如果線程不等于null
          {
            repaint();                         // 重畫(huà)一次.
            try
            {
               Thread.sleep(SPF);              //讓線程暫停
               sx+=80;                         //畫(huà)了一次后,改變來(lái)源區(qū)域,使其到下一幀.
               if(sx==800)                     //我的圖像是一幅800*170的,有兩行,每行十幀,如果sx走到了
    //800就說(shuō)明播放完第一行了,
               {
                  sy+=85;                      //播放完第一行后,改變來(lái)源區(qū)域的左上頂點(diǎn)使其跑到第二行.
                  sx=0;
                  if(sy==170)                  //如果播放完第二行后,又讓它回到第一行,
                  {
                     sy=0;
                  }
               }
            }
            catch(InterruptedException E){}
          }
        }

    }
    動(dòng)畫(huà)每秒播放多少幀好呢?
    電影的是每秒24幀,這樣的速度不僅能產(chǎn)生視覺(jué)停留,而且讓人感覺(jué)到畫(huà)面非常流暢.那么是不是我們做游戲也要用這個(gè)速度呢?答案是否定的,實(shí)際上每秒播放10幀就足已產(chǎn)生視覺(jué)停留,如果設(shè)置高了會(huì)消耗更多的資源.至命的是,有一些手機(jī)連每秒10帖都做不到.

    posted on 2005-02-17 18:07 藍(lán)色雪焰 閱讀(283) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 編程技術(shù)
     
    主站蜘蛛池模板: 国产亚洲精品美女久久久久| 乱淫片免费影院观看| 国产青草视频免费观看97| 一日本道a高清免费播放| 亚洲免费在线视频| 手机看片久久国产免费| 免费91麻豆精品国产自产在线观看 | 在线播放免费人成视频网站| 亚洲av无码一区二区乱子伦as| 99视频在线精品免费观看6| 美女视频黄.免费网址| 亚洲成a人片在线观看中文!!!| 手机看片久久国产免费| 91老湿机福利免费体验| 99在线观看视频免费| 亚洲爆乳无码精品AAA片蜜桃| 亚洲国产精品无码专区在线观看| 欧美最猛性xxxxx免费| 国产麻豆一精品一AV一免费| 亚洲国产欧洲综合997久久| 精品无码一区二区三区亚洲桃色| 久久久青草青青亚洲国产免观| 久久精品蜜芽亚洲国产AV| 中文字幕免费在线播放| 亚洲成_人网站图片| 亚洲国产精彩中文乱码AV| 国产美女无遮挡免费视频 | 一级一级一片免费高清| 亚洲国产成a人v在线观看| 亚洲AV天天做在线观看| 亚洲精品线路一在线观看| 在线观看特色大片免费视频| 久久国产乱子伦精品免费不卡| 国产精品亚洲专区无码唯爱网| 亚洲资源在线视频| 亚洲精品午夜无码专区| 亚洲高清视频一视频二视频三| 成人无遮挡裸免费视频在线观看 | 无码人妻久久一区二区三区免费丨| 国产成年无码久久久免费| 一道本在线免费视频|