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:
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
免费国产黄网站在线观看视频
|
亚洲乱妇熟女爽到高潮的片
|
精品乱子伦一区二区三区高清免费播放
|
无码的免费不卡毛片视频
|
99re免费在线视频
|
亚洲日韩精品一区二区三区无码
|
亚洲最大的视频网站
|
免费国产在线视频
|
亚洲天堂视频在线观看
|
99久久精品免费视频
|
亚洲色欲或者高潮影院
|
国产精品永久免费10000
|
亚洲成a人片在线观
|
在线观看永久免费
|
亚洲香蕉在线观看
|
麻豆国产人免费人成免费视频
|
亚洲中文字幕AV在天堂
|
女人18毛片水最多免费观看
|
青草久久精品亚洲综合专区
|
亚洲成a人片在线不卡一二三区
|
女人毛片a级大学毛片免费
|
337p日本欧洲亚洲大胆人人
|
亚洲色偷拍区另类无码专区
|
亚洲免费视频一区二区三区
|
亚洲AV日韩AV永久无码久久
|
香蕉视频在线观看免费
|
亚洲色婷婷一区二区三区
|
久久成人a毛片免费观看网站
|
亚洲狠狠ady亚洲精品大秀
|
成年丰满熟妇午夜免费视频
|
久久精品国产亚洲av水果派
|
18国产精品白浆在线观看免费
|
亚洲成av人片在线天堂无
|
亚洲AV无码专区在线播放中文
|
最近2018中文字幕免费视频
|
中文字幕一精品亚洲无线一区
|
日韩免费人妻AV无码专区蜜桃
|
亚洲日本国产综合高清
|
精品亚洲视频在线观看
|
24小时日本韩国高清免费
|
精品国产_亚洲人成在线
|