|
|
发表于 2007-2-1 16:21:00
|
显示全部楼层
Re:迷茫了,是否要使用数据驱动.
全数据驱动框架。然后给数据结构分层,然后从上到下驱动时,提供手动驱动接口,和完全自动驱动接口。好处多多。
半数据驱动节省不了多少时间的。如果以后做其他游戏,搞不好就因为数据驱动问题,然后重复很多很多工作。
我以前在坛子上贴过底层驱动框架。现在我贴一下高层数据驱动。直接和游戏数模挂钩。
因为正在改数据驱动的结构,现在我已将肖像库的取消了,将肖像和底层模型捆绑在一起。这样比较体现OO思想。
因为还在做ARPG的流程框架,所以这些高层数据很少,只有必须的数据。像力量,敏捷,等等,很多属性没有给。
这个脚本全是常量,传值,基本上没有程序。所以不存在能不能看懂的问题。供参考。望对你引擎有帮助。
//
uses ChrBaseData;
{
角色驱动样板
角色驱动样板是在角色的MDL动画层以上的,直接面向游戏的角色驱动,该驱动为标准样板。
使用方法,先Ctrl+V过来,然后改改名字。可参考ARPG的Demo,来具体了解角色驱动样板
功用:初始化角色的数模,技能,特长,肖像,
如果角色是NPC,还要指定NPC的对话数据,既QA数据源
如果角色是中立,或则敌方,在角色驱动样板中还应指定AI驱动的模块
}
//*****************************************************************************************************
//变量
//*****************************************************************************************************
var
//TriggerTarget中的类接口
_Obj:TDummyCube;
{
//如果在核心规则的世界编辑环境中驱动(利用核心规则驱动),TargetSource为当前OX目录
_StreamList:TRULEStreamList;
//如果是使用核心规则的,LoadModelFromStream,那么TargetSource则是空
//如果是手动装载角色驱动样板,如:在游戏运行中,用脚本动态的创建角色,那么手动指定TriggerSource
//TriggerSource为不固定的,在使用角色样板的时候,应和游戏的上层协商好标准
}
_StreamList:TRULEStreamList;
//*****************************************************************************************************
//常量
//*****************************************************************************************************
const
//角色模型
C_MDL_Model='BlackDragon.MDL';
//最大生命
C_ChrMaxLife=80;
//当前生命
C_ChrLife=80;
//最大魔法
C_ChrMaxMana=30;
//当前魔法
C_ChrMana=30;
//移动速度(公式: 每秒的移动速度)
C_ChrMoveSpeed=300;
//转弯时的移动速率(公式: 速率 * 移动速度)
C_ChrRollMoveRadio=0.7;
//转弯速率(公式: 速率 * 360)
C_ChrRollRadio=0.7;
//命令延迟(当发出命令给该角色时,角色的发呆时间,单位:秒)
C_ChrCommandDeltaTime=0.1;
//*****************************************************************************************************
{
如果角色是NPC,则会触发该事件,否则可忽略
TriggerObject是玩家
}
procedure NPCEvent(EventItem: TRULEBaseEventItem; TriggerObject: TOBJECT; EventInformation: string);
var
Player:TDummyCube;
begin
Player:=TDummyCube(TriggerObject);
end;
{
AI事件,装入角色总是会触发该事件
AI引擎在该事件中初始化
TriggerObject是玩家
}
procedure AIEvent(EventItem: TRULEBaseEventItem; TriggerObject: TOBJECT; EventInformation: string);
var
Player:TDummyCube;
begin
Player:=TDummyCube(TriggerObject);
end;
begin
//**************************************************************
//TriggerTarget是世界引擎分配给当前模型的接口
//**************************************************************
if not (TriggerTarget is TDummyCube) then Exit;
_Obj:=TDummyCube(TriggerTarget);
//**************************************************************
//如果在核心规则的世界编辑环境中驱动(利用核心规则驱动),TargetSource为当前OX目录
//如果是使用核心规则的,LoadModelFromStream,那么TargetSource则是空
//如果是手动装载角色驱动样板,如:在游戏运行中,用脚本动态的创建角色,那么手动指定TriggerSource
//TriggerSource为不固定的,在使用角色样板的时候,应和游戏的上层协商好标准
//**************************************************************
if not (TriggerSource is TRULEStreamList) then Exit;
_StreamList:=TRULEStreamList(TriggerSource);
//**************************************************************
//装入模型,MDL方式
//**************************************************************
if not ExecuteObjectDataScriptFromStreamList_Fast(_StreamList, C_MDL_Model, C_MDL_Model, TriggerTarget) then Exit;
//**************************************************************
//NPC接口
//**************************************************************
GetNPCEventEngine(_Obj).Add.OnEvent:=@NPCEvent;
//**************************************************************
//AI接口
//**************************************************************
GetAIEventEngine(_Obj).Add.OnEvent:=@AIEvent;
//**************************************************************
//最大生命
//**************************************************************
SetChrMaxLife(_Obj, C_ChrMaxLife);
//**************************************************************
//当前生命
//**************************************************************
SetChrLife(_Obj, C_ChrLife);
//**************************************************************
//最大魔法
//**************************************************************
SetChrMaxMana(_Obj, C_ChrMaxMana);
//**************************************************************
//当前魔法
//**************************************************************
SetChrMana(_Obj, C_ChrMana);
//**************************************************************
//移动速度
//**************************************************************
SetChrMoveSpeed(_Obj, C_ChrMoveSpeed);
//**************************************************************
//转弯移动速率
//**************************************************************
SetChrRollMoveRadio(_Obj, C_ChrRollMoveRadio);
//**************************************************************
//转弯速率
//**************************************************************
SetChrRollRadio(_Obj, C_ChrRollRadio);
//**************************************************************
//命令延迟
//**************************************************************
SetChrCommandDeltaTime(_Obj, C_ChrCommandDeltaTime);
//**************************************************************
//激活驻留
//**************************************************************
EnabledResident;
end.
|
|