亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

游戲框架之心得體會(2)

2019-11-18 16:17:40
字體:
來源:轉載
供稿:網友

        游戲框架之心得體會(2)
       上次寫到的合金代表框架,所有的框架內容都集中在1個類中。
也就是說大眾的游戲(商業)的大都是這樣的寫法,為了節省空間!
        今天要介紹的另一個框架體系是以Funmobile公司的代碼為代表的,各個功能版塊分別個為一個類,另外強烈推薦
       這種代碼的另一個優點是混合了高級UI和低級UI,個人認為游戲對菜單界面的美觀程度要求不大。而且這種寫發很利于
應用代碼的書寫!

 MSN alfylove@hotmail.com


下面還是老習慣 先看我截取的代碼

游戲都是那幾個部分

        開始游戲
        關于
        游戲幫助
        最高分
        游戲設置
        游戲菜單

//主菜單 以下所有類都滿足默認構造函數和按鍵控制
public class NokiaUI_menu extends List
    implements CommandListener{
  NokiaUI_menu(RollerMIDlet pMidlet, RollerLogic pLogic)
    {
        super("Menu", 3); }
  public void commandAction (Command pCommand, Displayable pDisplay)
    {}                           }
   
 //最高分  
public class NokiaUI_hiscore extends Form
    implements CommandListener{}
 //游戲幫助
  public class NokiaUI_help extends Form
    implements CommandListener {}
 //游戲關于
     public class NokiaUI_about extends Form
    implements CommandListener{}
 //游戲設置
 public class NokiaUI_setting extends Form
    implements CommandListener{}
  //游戲暫停 實際是游戲中菜單
 public class NokiaUI_pause extends List
    implements CommandListener{}
   
   
  RollerMIDlet.java 
 
  /*在生命控制程序中所有的類都在此集合,實例化。
  這種方法相當便利了各個類的調用*/
 
 
public class RollerMIDlet extends MIDlet

 
 
public RollerMIDlet()
    {
        mLogic = new RollerLogic(this);
        mNokia = new NokiaUI_menu(this, mLogic);
        mSetting = new NokiaUI_setting(this, mLogic);
        mHiScore = new NokiaUI_hiscore(this, mLogic);
        mHelp = new NokiaUI_help(this);
        mAbout = new NokiaUI_about(this);
        mPause = new NokiaUI_pause(this, mLogic);
    }


    PRotected void startApp()
        throws MIDletStateChangeException
    {
        if(mLogic != null)
        {
            Display.getDisplay(this).setCurrent(mLogic);
            mLogic.start();
        }
    }

    protected void pauseApp()
    {
        if(mLogic != null)
            mLogic.stop();
    }

    protected void destroyApp(boolean p0)
    {
        if(mLogic != null)
            mLogic.stop();
    }

    void StartGame()
    {
        if(mLogic != null)
            mLogic.NewGame();
    }

    void QuitGame()
    {
        destroyApp(false);
        notifyDestroyed();
    }

//轉控分支 

   public void ToNokiaUI()
    {
        if(mNokia != null)
            Display.getDisplay(this).setCurrent(mNokia);
    }

    public void ToNokiaUI_Setting()
    {
        if(mSetting != null)
            Display.getDisplay(this).setCurrent(mSetting);
    }

    public void ToNokiaUI_HiScore()
    {
        mHiScore = null;
        mHiScore = new NokiaUI_hiscore(this, mLogic);
        if(mHiScore != null)
            Display.getDisplay(this).setCurrent(mHiScore);
    }

    public void ToNokiaUI_Help()
    {
        if(mHelp != null)
            Display.getDisplay(this).setCurrent(mHelp);
    }

    public void ToNokiaUI_About()
    {
        if(mAbout != null)
            Display.getDisplay(this).setCurrent(mAbout);
    }


    public void ToNokiaUI_Pause()
    {
        if(mPause != null)
            Display.getDisplay(this).setCurrent(mPause);
    }

    public void ReturnUI()
    {
        if(mLogic != null)
            Display.getDisplay(this).setCurrent(mLogic);
    }

    private RollerLogic mLogic;
    private NokiaUI_menu mNokia;
    private NokiaUI_setting mSetting;
    private NokiaUI_hiscore mHiScore;
    private NokiaUI_help mHelp;
    private NokiaUI_about mAbout;
    private NokiaUI_pause mPause;
}

RollerLogic.java


//中控部分
//游戲的驅動所在,線程控制生命循環。


public class RollerLogic extends FullCanvas
    implements Runnable
{

    RollerLogic(RollerMIDlet pMidlet)
    {
        lThread = null;
        maxsprite = 5;
        sprite = new Image[maxsprite];
        lMidlet = pMidlet;
        lWidth = getWidth();
        lHeight = getHeight();
        lCanvas = new RollerCanvas(this);
        Stage = 0;
        m_bSoundOn = true;
        m_bVibrationOn = true;
    }

    public synchronized void start()
    {
        if(lThread == null)
        {
            lThread = new Thread(this);
            lThread.start();
        }
    }

    public synchronized void stop()
    {
        lThread = null;
    }

    public void run()
    {
        Thread pThreadTemp = Thread.currentThread();
        do
        {
            if(pThreadTemp != lThread)
                break;
            long lTimeStart = System.currentTimeMillis();
            System.out.println("run");
            repaint(0, 0, lWidth, lHeight);
            serviceRepaints();
            long lTimeTaken = System.currentTimeMillis() - lTimeStart;
            if(lTimeTaken < (long)60)
                try
                {
                    synchronized(this)
                    {
                        Thread.sleep((long)60 - lTimeTaken);
                    }
                }
                catch(InterruptedException e)
                {
                    System.out.println("error=".concat(String.valueOf(String.valueOf(e))));
                }
        } while(true);
    }


    public void paint(Graphics g)
    {
        lCanvas.paint(g);
        System.out.println("paint");
    }

    public void keyPressed(int iKeyCode)
    {
        int _tmp = Stage;
        lCanvas.keyPressed(iKeyCode);
    }

    public void keyReleased(int iKeyCode)
    {
        lCanvas.keyReleased(iKeyCode);
    }

    static int rand_no(int iRange)
    {
        int r = rand.nextInt() % iRange;
        if(r < 0)
            r = -r;
        return r;
    }

    public void NewGame()
    {
        start();
        lCanvas.InitStage(1);
    }

    public void UI_Newgame()
    {
        NewGame();
    }

    public void UI_Title()
    {
        start();
        lCanvas.reset();
    }

    public void UI_Game()
    {
        start();
    }

    public void menu()
    {
        lMidlet.ToNokiaUI();
        stop();
    }

    public void pause_menu()
    {
        lMidlet.ToNokiaUI_Pause();
        stop();
    }

    public int getCanvas()
    {
        return lCanvas.showtitle;
    }

    public void ExitGame()
    {
        lMidlet.QuitGame();
    }

    private void Execute()
    {
        int _tmp = Stage;
    }

    public static int Stage;
    public static final int Stage_Loading = 0;
    public static final int Stage_Logo = 10;
    public static final int Stage_Play = 50;
    private static final int up = -1;
    private static final int down = -2;
    private static final int left = -3;
    private static final int right = -4;
    private static final int center = -5;
    private static final int left_key = -6;
    private static final int right_key = -7;
    private static final int num_up = 50;
    private static final int num_down = 56;
    private static final int num_left = 52;
    private static final int num_right = 54;
    private static final Random rand = new Random(System.currentTimeMillis());
    private Thread lThread;
    private RollerMIDlet lMidlet;
    private RollerCanvas lCanvas;
    private GameRecord lRecord;
    public GameEffect m_pEffect;
    private static final int NO_SAVEDATA = 4;
    private static final int LENGTH_SAVEDATA = 40;
    public static int lWidth;
    public static int lHeight;
    private static String RecordValue;
    public boolean m_bSoundOn;
    public boolean m_bVibrationOn;
    public int m_iTopScore;
    int showsplash;
    int maxsprite;
    Image sprite[];


}

從截取代碼來看 ,這個游戲的框架更為清晰,更便于修改。

       總結就是
      
各個單元分別是1個單獨的類!

每個類都擁有自己的初始化內容和按鍵控制

由一個主類控制(RollerLogic),此類也是游戲循環的動力。

顯示部分交給Midlet(RollerMIDlet)。

 

這種方法可以方便的把低級UI和高級UI結合使用,雖然用不到1張圖中,但交替使用效果也不錯。
唯一的不足是類太多,占用了不必要的空間。

(出處:http://www.49028c.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品综合不卡av| 日韩av网址在线| 亚洲精品suv精品一区二区| 国产欧美日韩免费看aⅴ视频| 57pao成人国产永久免费| 欧美疯狂做受xxxx高潮| 国产精品偷伦视频免费观看国产| 国产精国产精品| 欧美日韩国产精品一区二区不卡中文| 日韩欧美中文免费| 国产精品丝袜白浆摸在线| 一区二区三欧美| 久久久成人精品视频| 国产精品最新在线观看| 狠狠色狠色综合曰曰| 影音先锋日韩有码| 欧美亚洲另类视频| 亚洲成人免费网站| 欧美亚洲激情在线| 亚洲欧美国产一区二区三区| 国产精品成人播放| 欧美大片欧美激情性色a∨久久| 日韩va亚洲va欧洲va国产| 亚洲美女在线看| 日韩在线视频网站| 欧美精品情趣视频| 日韩精品在线第一页| 亚洲在线免费看| 久久综合久久88| 91亚洲精品久久久久久久久久久久| 亚洲日本中文字幕| 欧美精品videosex牲欧美| 欧美一级片免费在线| 亚洲新中文字幕| 亚洲最大av网| 中文字幕欧美国内| 在线看国产精品| 国产精品白嫩初高中害羞小美女| 亚洲精品一二区| 欧美激情亚洲自拍| 日韩精品在线视频观看| 欧美一级在线亚洲天堂| 国产精品第七影院| 精品日韩视频在线观看| 久久激情五月丁香伊人| 国产在线观看一区二区三区| 一区二区在线免费视频| 国产精品午夜视频| 欧美极品少妇与黑人| 久久天天躁狠狠躁夜夜爽蜜月| 日韩在线精品视频| 国产精品香蕉av| 成人www视频在线观看| 日韩精品在线电影| 国产精品视频免费观看www| 国产精品99久久99久久久二8| 精品国产拍在线观看| 亚洲成色999久久网站| 91在线|亚洲| 一区二区成人av| 热久久这里只有精品| 久久国产色av| 欧美一级淫片videoshd| 夜夜嗨av色综合久久久综合网| 欧美日韩一区二区在线播放| 亚洲第一页自拍| 黑人巨大精品欧美一区二区三区| 欧美一级片免费在线| 高清日韩电视剧大全免费播放在线观看| 国产日韩欧美日韩大片| 亚洲国产欧美一区二区三区同亚洲| 欧美日韩亚洲成人| 影音先锋欧美在线资源| 欧美日韩福利电影| 96精品久久久久中文字幕| 亚洲人高潮女人毛茸茸| 亚洲自拍偷拍第一页| 日韩成人久久久| 国产999在线观看| 亚洲欧美日韩一区二区在线| 亚洲欧美三级在线| 亚洲美腿欧美激情另类| 国产精品极品美女粉嫩高清在线| 日韩免费黄色av| 日韩成人中文字幕| 亚洲人成绝费网站色www| 精品女同一区二区三区在线播放| 三级精品视频久久久久| 色哟哟网站入口亚洲精品| 国产精品欧美一区二区| 亚洲第一网站免费视频| 久久久91精品国产一区不卡| 久久影视电视剧免费网站清宫辞电视| 中文字幕日韩欧美| 亚洲成色777777女色窝| 疯狂做受xxxx欧美肥白少妇| 国产精品激情自拍| 欧美激情国内偷拍| 亚洲天堂精品在线| 精品一区二区三区三区| 国产91免费观看| 亚洲欧美综合v| 精品二区三区线观看| 国产成人精品一区二区在线| 国产精品入口夜色视频大尺度| 日韩动漫免费观看电视剧高清| 97超级碰在线看视频免费在线看| 日韩精品日韩在线观看| 欧美视频在线看| 欧美激情a∨在线视频播放| 精品视频久久久久久| 日本在线精品视频| 97视频在线看| 久久综合久久88| 亚洲色图欧美制服丝袜另类第一页| 亚洲风情亚aⅴ在线发布| 欧美激情视频在线免费观看 欧美视频免费一| 欧美激情精品久久久久久变态| 欧美伦理91i| 91精品国产精品| 欧美一级淫片aaaaaaa视频| 国产成人精品在线视频| 欧美日韩国产中文字幕| 国产有码一区二区| 伊人av综合网| 久久影院免费观看| 亚洲第一免费播放区| 国产91在线高潮白浆在线观看| 久久精品国产久精国产一老狼| 国产精品久久久久aaaa九色| 亚洲xxxx18| 91av在线免费观看视频| 亚洲理论片在线观看| 久久91超碰青草是什么| 亚洲第一中文字幕| 日韩在线观看网址| 国内精品久久久久影院 日本资源| 亚洲精品国产综合区久久久久久久| 九九热精品视频| 亚洲精品成人久久电影| 国产精品男人的天堂| 国产欧美精品一区二区三区介绍| 亚洲国产精品成人精品| 日韩美女在线观看| 精品视频久久久| 日韩美女激情视频| 国产97人人超碰caoprom| 亚洲激情 国产| 亚洲人成绝费网站色www| 91av中文字幕| 国产精品久久91| 国产www精品| 欧美成人精品一区| 91禁外国网站| 91久久久久久久久久久久久| 日韩美女视频免费看| 国产亚洲精品久久久| 视频直播国产精品| 日韩精品免费综合视频在线播放| 欧美激情视频一区二区三区不卡| 国产热re99久久6国产精品| 日本精品久久电影| 青青草原成人在线视频| 欧美日韩一区二区精品|