Phrancol's blog
To be surprised,to wonder,is to begin to understand.
BlogJava
首頁
聯系
聚合
管理
隨筆 - 1 文章 - 37 trackbacks - 0
<
2025年7月
>
日
一
二
三
四
五
六
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
留言簿
(16)
給我留言
查看公開留言
查看私人留言
隨筆分類
反匯編(1)
隨筆檔案
2008年5月 (1)
文章分類
Eclipse(2)
iOS(1)
Mir3gAnyWhere(1)
OSGI(16)
反匯編(5)
文章檔案
2011年11月 (1)
2009年11月 (2)
2009年8月 (1)
2009年7月 (2)
2009年5月 (2)
2009年4月 (3)
2009年3月 (1)
2008年11月 (1)
2008年10月 (1)
2008年7月 (1)
2008年6月 (6)
2008年5月 (1)
2008年4月 (5)
2007年11月 (1)
2007年10月 (1)
2007年9月 (4)
2007年8月 (2)
test
搜索
最新評論
1.?re: 精武館——在線棋牌游戲平臺[未登錄]
好
--五味子
2.?re: 精武館——在線棋牌游戲平臺[未登錄]
很好玩
--五味子
3.?re: [原]一個例子理解AccessController.doPrivileged()
謝謝分享,我第一遍沒看懂,后來去其他地方看了有關權限檢查的的文章以后才看懂,建議解釋一下調用棧,和權限檢查(取調用棧中權限的交集)。
--Flexin
4.?re: [原]MIR3G二次加解密反匯編分析(四)——還原
@Mir3
好久沒有研究這個...
--phrancol
5.?re: [原]MIR3G二次加解密反匯編分析(四)——還原
ll4bb903 這其實是srand 函數
--Mir3
[原]角色AI動作調度器
人物角色有多種動作:上馬,下馬,走,跑,物理攻擊,魔法攻擊,施放魔法,交易 .....等等
每個動作間隔為600毫秒,任務有可能會執行失敗。
/** */
/**
* 角色動作調度器
*
@author
Donf Yang
*/
public
final
class
ActionDispatcher
{
/** */
/**
* 上一次動作的執行時間
*/
private
static
long
previousActionTime
=
0
;
/** */
/**
* 每次動作執行時間間隔
*/
public
static
final
int
ACTION_INTERVAL
=
600
;
/** */
/**
* 上一個ActionMission,不受調度器控制,當currentActionMission不可執行時,調度該Mission [未實現]
*/
private
static
ActionMission previousActionMission
=
null
;
/** */
/**
* 下一個ActionMission,不受調度器控制,當continueDispatch時,優先調度
*/
private
static
ActionMission nextActionMission
=
null
;
private
static
ActionMission currentActionMission
=
null
;
private
static
final
String ISDISPATCHLOCKME
=
"
IL
"
;
private
static
final
String ACTIONLOCKME
=
"
AL
"
;
private
static
Logger log
=
LoggerFactory.getLogger(ActionDispatcher.
class
);
private
static
boolean
isActionExecuting
=
false
;
/** */
/**
* dispatch之前,先判斷是否可以被調度isDispatchable(); 如果不能被調度,調用setNextActionMission();
*
*
@param
action
*
@throws
Exception
*/
public
static
void
dispatch(ActionMission action)
throws
Exception
{
if
(
!
isDispatchable())
{
return
;
}
try
{
setDispatching(
true
);
currentActionMission
=
action;
/**/
/*
* 如果Action時間為0,說明該動作沒有執行
*/
long
_l
=
action.doMission();
if
(_l
==
0
)
{
setDispatching(
false
);
}
}
catch
(Exception e)
{
setDispatching(
false
);
throw
e;
}
}
/** */
/**
* GameProcess接受到服務器返回的動作執行成功指令
*/
public
static
void
actionGood()
{
currentActionMission.returnActionGood();
try
{
continueDispatch();
}
catch
(Exception e)
{
setDispatching(
false
);
e.printStackTrace();
}
}
/** */
/**
* GameProcess接受到服務器返回的動作執行失敗指令
*/
public
static
void
actionFail()
{
currentActionMission.returnActionFail();
try
{
continueDispatch();
}
catch
(Exception e)
{
setDispatching(
false
);
e.printStackTrace();
}
}
private
static
void
continueDispatch()
throws
Exception
{
synchronized
(ACTIONLOCKME)
{
if
(nextActionMission
!=
null
)
{
currentActionMission
=
nextActionMission;
nextActionMission
=
null
;
}
}
try
{
if
(currentActionMission.isContinueExecutable())
{
setDispatching(
true
);
/**/
/*
* 如果Action時間為0,說明該動作沒有執行
*/
long
_l
=
currentActionMission.continueDoMission();
if
(_l
==
0
)
{
setDispatching(
false
);
}
}
else
{
setDispatching(
false
);
}
}
catch
(Exception e)
{
setDispatching(
false
);
throw
e;
}
}
/** */
/**
* 設置當前是否有Mission正在被執行的狀態
*
@param
dispatching
*/
private
static
void
setDispatching(
boolean
dispatching)
{
synchronized
(ISDISPATCHLOCKME)
{
isActionExecuting
=
dispatching;
}
}
/** */
/**
* Mission是否可以被馬上執行,由當前是否有Mission正在被執行決定
*
@return
*/
public
static
boolean
isDispatchable()
{
synchronized
(ISDISPATCHLOCKME)
{
return
!
isActionExecuting;
}
}
public
static
void
setNextActionMission(ActionMission actionMission)
{
synchronized
(ACTIONLOCKME)
{
nextActionMission
=
actionMission;
}
}
public
static
void
setPreviousActionMission(ActionMission actionMission)
{
synchronized
(ACTIONLOCKME)
{
previousActionMission
=
actionMission;
}
}
/** */
/**
* 設置調度時間,600毫秒
*
@return
*/
public
static
long
dispatchActionTime()
{
long
_l
=
ActionDispatcher.generateCurrentActionTime();
if
(_l
-
previousActionTime
<
ActionDispatcher.ACTION_INTERVAL)
{
try
{
Thread.sleep((ActionDispatcher.ACTION_INTERVAL
-
(_l
-
previousActionTime)));
}
catch
(Exception e)
{
e.printStackTrace();
}
previousActionTime
=
ActionDispatcher.generateCurrentActionTime();
}
else
{
previousActionTime
=
_l;
}
return
previousActionTime;
}
/** */
/**
* 為Action生成當前時間
*
@return
*/
public
static
long
generateCurrentActionTime()
{
Calendar now
=
Calendar.getInstance();
return
now.get(Calendar.HOUR_OF_DAY)
*
3600000
+
now.get(Calendar.MINUTE)
*
60000
+
now.get(Calendar.SECOND)
*
1000
+
now.get(Calendar.MILLISECOND);
}
}
/** */
/**
* ActionMission,可調度的動作任務,該任務可以是一個簡單的移動,也可以包含N層任務的AI流程
*
@author
Donf Yang
*/
public
interface
ActionMission
{
/** */
/**
* 首次執行Mission
*
@return
返回Action執行時的當前時間,如果為0,說明沒有被執行
*
@throws
Exception
*/
public
long
doMission()
throws
Exception;
/** */
/**
* 繼續執行Mission
*
@return
返回Action執行時的當前時間,如果為0,說明沒有被執行
*
@throws
Exception
*/
public
long
continueDoMission()
throws
Exception;
/** */
/**
* 服務器返回動作執行成功,該方法不能有過多的動作邏輯
*/
public
void
returnActionGood();
/** */
/**
* 服務器返回動作執行失敗,該方法不能有過多的動作邏輯
*/
public
void
returnActionFail();
/** */
/**
* 是否需要(可以)繼續執行
*
@return
*/
public
boolean
isContinueExecutable();
}
動作的回調接口
/** */
/**
*
* ControllableAction回調接口 <br />
* 1. 停止當前動作<br />
* 2. 當動作完成時,得到通知
*
*
@author
Donf Yang
* @2008-7-8 下午09:31:44
*/
public
interface
ActionObserver
{
public
void
onControllableActionFinished(ControllableAction action);
}
/** */
/**
*
* 所有可控制的動作接口需要繼承該接口,用于回調 <br />
*
*
@author
Donf Yang
* @2008-7-8 下午09:32:31
*/
public
interface
ControllableAction
{
public
void
stopAction();
}
posted on 2008-07-06 18:05
Phrancol Yang
閱讀(486)
評論(0)
編輯
收藏
所屬分類:
Mir3gAnyWhere
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
Copyright ©2025 Phrancol Yang Powered by:
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
www一区二区www免费
|
国产成人亚洲综合无
|
久久久久久久岛国免费播放
|
国产亚洲一卡2卡3卡4卡新区
|
免费人成视频在线观看不卡
|
亚洲日韩精品无码专区加勒比
|
嫖丰满老熟妇AAAA片免费看
|
亚洲一线产区二线产区精华
|
青春禁区视频在线观看直播免费
|
永久免费无码日韩视频
|
亚洲国产一成久久精品国产成人综合
|
四虎影视久久久免费观看
|
久久影视综合亚洲
|
日本在线看片免费
|
亚洲国产理论片在线播放
|
成人免费在线视频
|
国产亚洲Av综合人人澡精品
|
国产亚洲精品美女久久久久
|
亚洲人成在线电影
|
很黄很黄的网站免费的
|
亚洲最大的成网4438
|
69成人免费视频
|
亚洲AV无码片一区二区三区
|
亚洲国产精品成人AV无码久久综合影院
|
久久亚洲精品国产亚洲老地址
|
日本免费v片一二三区
|
一级毛片在线完整免费观看
|
亚洲成亚洲乱码一二三四区软件
|
久久午夜无码免费
|
伊人久久五月丁香综合中文亚洲
|
好吊妞在线成人免费
|
日亚毛片免费乱码不卡一区
|
亚洲VA成无码人在线观看天堂
|
免费下载成人电影
|
成人a毛片视频免费看
|
精品日韩亚洲AV无码一区二区三区
|
亚洲AⅤ永久无码精品AA
|
免费国产成人α片
|
亚洲av日韩综合一区二区三区
|
亚洲宅男精品一区在线观看
|
亚洲精品成人在线
|