Phrancol's blog
To be surprised,to wonder,is to begin to understand.
BlogJava
首頁
聯(lián)系
聚合
管理
隨筆 - 1 文章 - 37 trackbacks - 0
<
2025年5月
>
日
一
二
三
四
五
六
27
28
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
留言簿
(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()
謝謝分享,我第一遍沒看懂,后來去其他地方看了有關(guān)權(quán)限檢查的的文章以后才看懂,建議解釋一下調(diào)用棧,和權(quán)限檢查(取調(diào)用棧中權(quán)限的交集)。
--Flexin
4.?re: [原]MIR3G二次加解密反匯編分析(四)——還原
@Mir3
好久沒有研究這個...
--phrancol
5.?re: [原]MIR3G二次加解密反匯編分析(四)——還原
ll4bb903 這其實是srand 函數(shù)
--Mir3
[原]角色AI動作調(diào)度器
人物角色有多種動作:上馬,下馬,走,跑,物理攻擊,魔法攻擊,施放魔法,交易 .....等等
每個動作間隔為600毫秒,任務有可能會執(zhí)行失敗。
/** */
/**
* 角色動作調(diào)度器
*
@author
Donf Yang
*/
public
final
class
ActionDispatcher
{
/** */
/**
* 上一次動作的執(zhí)行時間
*/
private
static
long
previousActionTime
=
0
;
/** */
/**
* 每次動作執(zhí)行時間間隔
*/
public
static
final
int
ACTION_INTERVAL
=
600
;
/** */
/**
* 上一個ActionMission,不受調(diào)度器控制,當currentActionMission不可執(zhí)行時,調(diào)度該Mission [未實現(xiàn)]
*/
private
static
ActionMission previousActionMission
=
null
;
/** */
/**
* 下一個ActionMission,不受調(diào)度器控制,當continueDispatch時,優(yōu)先調(diào)度
*/
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之前,先判斷是否可以被調(diào)度isDispatchable(); 如果不能被調(diào)度,調(diào)用setNextActionMission();
*
*
@param
action
*
@throws
Exception
*/
public
static
void
dispatch(ActionMission action)
throws
Exception
{
if
(
!
isDispatchable())
{
return
;
}
try
{
setDispatching(
true
);
currentActionMission
=
action;
/**/
/*
* 如果Action時間為0,說明該動作沒有執(zhí)行
*/
long
_l
=
action.doMission();
if
(_l
==
0
)
{
setDispatching(
false
);
}
}
catch
(Exception e)
{
setDispatching(
false
);
throw
e;
}
}
/** */
/**
* GameProcess接受到服務器返回的動作執(zhí)行成功指令
*/
public
static
void
actionGood()
{
currentActionMission.returnActionGood();
try
{
continueDispatch();
}
catch
(Exception e)
{
setDispatching(
false
);
e.printStackTrace();
}
}
/** */
/**
* GameProcess接受到服務器返回的動作執(zhí)行失敗指令
*/
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,說明該動作沒有執(zhí)行
*/
long
_l
=
currentActionMission.continueDoMission();
if
(_l
==
0
)
{
setDispatching(
false
);
}
}
else
{
setDispatching(
false
);
}
}
catch
(Exception e)
{
setDispatching(
false
);
throw
e;
}
}
/** */
/**
* 設置當前是否有Mission正在被執(zhí)行的狀態(tài)
*
@param
dispatching
*/
private
static
void
setDispatching(
boolean
dispatching)
{
synchronized
(ISDISPATCHLOCKME)
{
isActionExecuting
=
dispatching;
}
}
/** */
/**
* Mission是否可以被馬上執(zhí)行,由當前是否有Mission正在被執(zhí)行決定
*
@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;
}
}
/** */
/**
* 設置調(diào)度時間,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,可調(diào)度的動作任務,該任務可以是一個簡單的移動,也可以包含N層任務的AI流程
*
@author
Donf Yang
*/
public
interface
ActionMission
{
/** */
/**
* 首次執(zhí)行Mission
*
@return
返回Action執(zhí)行時的當前時間,如果為0,說明沒有被執(zhí)行
*
@throws
Exception
*/
public
long
doMission()
throws
Exception;
/** */
/**
* 繼續(xù)執(zhí)行Mission
*
@return
返回Action執(zhí)行時的當前時間,如果為0,說明沒有被執(zhí)行
*
@throws
Exception
*/
public
long
continueDoMission()
throws
Exception;
/** */
/**
* 服務器返回動作執(zhí)行成功,該方法不能有過多的動作邏輯
*/
public
void
returnActionGood();
/** */
/**
* 服務器返回動作執(zhí)行失敗,該方法不能有過多的動作邏輯
*/
public
void
returnActionFail();
/** */
/**
* 是否需要(可以)繼續(xù)執(zhí)行
*
@return
*/
public
boolean
isContinueExecutable();
}
動作的回調(diào)接口
/** */
/**
*
* ControllableAction回調(diào)接口 <br />
* 1. 停止當前動作<br />
* 2. 當動作完成時,得到通知
*
*
@author
Donf Yang
* @2008-7-8 下午09:31:44
*/
public
interface
ActionObserver
{
public
void
onControllableActionFinished(ControllableAction action);
}
/** */
/**
*
* 所有可控制的動作接口需要繼承該接口,用于回調(diào) <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
閱讀(481)
評論(0)
編輯
收藏
所屬分類:
Mir3gAnyWhere
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
網(wǎng)站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
Copyright ©2025 Phrancol Yang Powered by:
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
亚洲一本之道高清乱码
|
亚洲第一黄片大全
|
免费三级毛片电影片
|
100部毛片免费全部播放完整
|
a级毛片毛片免费观看久潮
|
国产在线播放线91免费
|
在线视频网址免费播放
|
91成人免费观看网站
|
亚洲第一网站免费视频
|
亚洲成年人免费网站
|
噼里啪啦免费观看高清动漫4
|
妻子5免费完整高清电视
|
女人18特级一级毛片免费视频
|
好爽…又高潮了毛片免费看
|
日韩免费高清视频
|
亚洲国产精品一区二区第四页
|
亚洲国产精品无码久久久久久曰
|
亚洲综合AV在线在线播放
|
无码国产精品久久一区免费
|
嫩草影院免费观看
|
无码国产亚洲日韩国精品视频一区二区三区
|
中文字幕亚洲码在线
|
亚洲高清乱码午夜电影网
|
偷自拍亚洲视频在线观看
|
在线视频网址免费播放
|
日韩免费无码视频一区二区三区
|
24小时日本电影免费看
|
成人无遮挡裸免费视频在线观看
|
国产无遮挡又黄又爽免费视频
|
亚洲午夜福利精品无码
|
日韩免费高清视频网站
|
亚洲天堂中文字幕在线
|
亚洲AV无码久久精品狠狠爱浪潮
|
亚洲色欲或者高潮影院
|
亚洲精品无码专区久久
|
羞羞视频免费网站在线看
|
一级毛片在线免费看
|
成年女人免费碰碰视频
|
国产a v无码专区亚洲av
|
亚洲一区二区成人
|
亚洲精品乱码久久久久久V
|