成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺析J2ME Snake腳本引擎用法

開發 前端
J2ME Snake腳本可以實現游戲邏輯,在不修改主游戲引擎并且花費時間去編譯的前提下,改變了腳本也就改變游戲的玩法和趣味性。

本文向大家描述一下J2ME Snake腳本引擎,主要包括高級代碼編寫,低級代碼編寫和腳本虛擬機(SVM)等內容,相信本文介紹一定會讓你有所收獲。

J2ME Snake腳本引擎簡介

一、J2ME Snake腳本引擎高級代碼編寫:

1,語法類似于C。

2,支持函數定義,函數調用,數組,表達式,循環,分支。

3,弱類型(lua也是),內建類型有string,int,float,boolean
如定義變量varx;可以給x賦的值有x="你好Snake";x=32;x=32.23;x=true;

4,內建35個運算符,適用于所有的表達式,如位運算>>邏輯運算&&賦值運算|=等等,運算符優先級簡化為4級,由高到低為單目運算>算數運算>關系運算>邏輯運算,如果你寫代碼是不確定運算符的優先級保險起見加上括號就不會有錯。

5,支持轉義字符輸入。

6,支持注釋,如行注釋符//及塊注釋符/**/

二、J2ME Snake腳本引擎低級代碼編寫:

1,語法類似于8086匯編,但要比它簡單的多,有33種虛擬指令可供選擇,并且可以定義方法演示一個完整的加法函數及函數調用(分號是行注釋符): 

  1. myAdd()  
  2. {  
  3. paramy;函數參數y  
  4. paramx;函數參數x  
  5. Addx,y;將y的值與x相加并賦給x  
  6. Mov_RetVal,x;將x值賦給寄存器(只有一個寄存器即_RetVal)  
  7. Ret;方法返回符(可以省略)  
  8. }  
  9. _Main()  
  10. {  
  11. varx;定義局部變量x  
  12. vary;定義局部變量y  
  13. varz;定義局部變量  
  14. Movx,2;將2賦給x  
  15. Movy,3;將3賦給y  
  16. Pushx;將x壓棧,調用方法需要將參數壓棧  
  17. Pushy;將y壓棧  
  18. CallmyAdd;調用方法  
  19. Movz,_RetVal;將寄存器的值賦給z  
  20. }  

 判斷和分支的低級代碼我就不給出了,想了解的話可以先寫高代碼,再用編譯器編譯成低級代碼(在編譯器中輸入參數-A)再參照低級代碼來研究

話說回來,為什么要設計低級代碼呢,干脆直接寫高級代碼多方便,之所以這樣設計是由于編譯器編譯跳轉分支那部分都非常的精簡,運行速度非常的快,但是編譯表達式就比較繁瑣,雖然在3個星期前我壓根不知道什么叫編譯原理,但是通過寫腳本的詞法分析,語法分析,匯編等程序我才發現它的難度和復雜度超出想象好幾倍,當前***的編譯器如C++編譯器是用狀態機進行語法分析,在表達式的編譯上做足了優化,可是我才是個初學者,為了加快研發速度我使用了半狀態機半遞歸下降的方式進行編譯,所以在效率上沒有做太多優化,所以如果您想寫復雜表達式求值并需要快速運行的代碼,還是建議用低級代碼編寫,***可以和高級代碼進行合并,用匯編器匯編成二進制。#p#

三、J2ME Snake腳本引擎之腳本虛擬機(SVM)

1,虛擬機的執行是基于字節碼的,只有一個寄存器_RetVal用來存放返回值,運行時堆棧是用來進行函數調用的大小默認是512K,可以自己更改比如在低級代碼上頭部加入關鍵字SetStackSize1024虛擬機會根據設置來修改堆棧大小

2,和主游戲引擎通信是基于方法調用,需要自己寫方法庫類,這個類需要繼承Lib.class,在自己的方法庫中實現方法,考慮到效率,沒有通信是沒有用到對象,并且也不是基于RTTI機制,所以使用時務必要注意2點,這兩點寫在測試包里,可以去看一下。

3,錯誤處理也是考慮到效率沒有基于java的異常,而是只打印錯印并且虛擬機會正常運行,可是一旦打印出錯誤,需要做的就是停下運行的程序檢查腳本有沒有,或者是虛擬機的核心執行單元有沒有BUG如果不這樣做,那么后面的腳本數據已經成臟數據,會對游戲邏輯造成潛在的危險。

4,多線程:J2ME Snake腳本引擎能加載多個腳本并發執行,并且每個線程有個優先級,優先級高的腳本能分到更多的時間片,SVM來管理這些線程的運行,并且主游戲引擎能方便的操作腳本虛擬機加載,暫停,停止,恢復這些腳本線程。(0.8版提供多線程功能)

5,運行方式:主游戲引擎在while循環中,每次調用虛擬機的runScript(inttime)方法,通過傳入時間片來決定虛擬機在這個循環周期運行多長時間,所以腳本里就可以寫這樣的循環while(true)也就是腳本有自己的邏輯死循環,但是它不會干擾主引擎的邏輯死循環,因為在傳入的時間片運行完時,腳本引擎會自動跳出來讓主引擎繼續運行下一個循環,而這些對編程人員都是透明的。

【編輯推薦】

  1. 術語匯編 J2ME 3D技術簡介
  2. 深入了解J2ME Polish+Eclipse配置過程
  3. 探究J2ME中cookie庫的管理
  4. 深入了解J2ME網絡程序設計
  5. 解析Linux下如何用eclipse搭建J2ME開發環境


 

責任編輯:佚名 來源: blog.163.com
相關推薦

2010-10-09 15:00:22

SnakeJ2ME

2010-09-29 08:57:04

J2ME前景

2010-09-30 13:48:10

J2ME游戲引擎

2010-09-29 13:23:12

J2MEPIM

2011-09-01 16:45:15

J2MELua

2011-08-29 15:10:19

JAVALua 腳本

2009-10-19 13:59:39

J2ME編程開發平臺

2010-09-29 15:35:04

Item類J2ME

2010-09-29 09:19:39

J2ME開發工具

2010-09-30 13:28:55

J2ME圖形

2009-06-23 11:30:16

RMSJ2ME

2009-03-22 09:38:03

Android移植J2ME

2010-09-30 09:56:26

J2ME Polish

2009-06-08 21:34:09

J2EEJ2SEJ2ME

2010-09-29 13:50:31

J2MEJ2SE

2009-07-09 16:06:10

JDK J2EE J2

2010-09-28 16:05:36

J2ME技術J2MEWTK

2010-09-29 10:41:18

J2MEJVM

2010-09-29 13:09:48

OTAJ2ME程序

2010-09-29 13:37:20

J2MEPIM
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天堂av资源 | 国产精品视频999 | 亚洲精品色| 一区二区成人 | 国产高清久久久 | 一区二区三区欧美 | 日韩中文字幕 | 精品伊人 | 亚洲精品日韩一区二区电影 | 午夜欧美 | 一级特黄在线 | 欧美影院 | 日韩中文在线观看 | 九九热在线视频免费观看 | 黄在线| 国产午夜精品久久久久免费视高清 | 欧美综合一区 | 女同久久另类99精品国产 | 亚洲色视频 | 成人h动漫亚洲一区二区 | 99精品国产一区二区三区 | 国产成人一区二区 | 2018天天干天天操 | 99国产精品久久久久老师 | 成人亚洲精品久久久久软件 | 韩日一区二区三区 | 欧美一区二区在线播放 | 在线黄色影院 | 亚洲综合久久久 | 亚洲 欧美 另类 综合 偷拍 | 国产精品麻 | 亚洲伊人久久综合 | 三级黄色片在线观看 | 亚洲天堂久久新 | 91免费看片 | 91在线电影 | 免费一区| 欧美日韩精品在线免费观看 | 亚洲成人午夜电影 | 国产一区二区三区色淫影院 | 在线免费观看视频黄 |