怎么制作脚本

游戏脚本是用来创建游戏引擎的,最重要的是缺少什么?脚本。
例如,游戏引擎是计算机,脚本是计算机软件。
既然脚本如此重要,那么如何实现呢?下面我就谈谈我的看法。
首先,了解消息循环。
一款好的游戏离不开好的消息循环。
这是游戏实现的重要组成部分。
现在我来说说我的游戏《命运传奇》。
首先,我定义了一个全局变量externalGameState;游戏中定义了许多现有的游戏状态,例如#defineGAME_STATE_CUSTOM0//这意味着玩家可以在战斗中控制游戏#defineGAME_STATE_TALKING1等。
好的,下面是WinMain中while(1)循环中的updateScreen()函数,原型为voidUpdateScreen(){delaySwitch(GameState){caseGAME_STATE_CUSTOM:创建地图,创建所有精灵,创建天气(如果有)如果当玩家选择一个敌人(例如,DrawFlag=DrawEnemyState),它将被显示。
显示敌人速度限制和敌人位置break;caseGAME_STATE_TALKING:GameDialogProc();break;caseGAME_STATE_SCRIPTCONTROLLING:ScriptControlProc();break;...//这里处理其他消息}在屏幕上显示缓冲区表面图像编写一个单独的函数。
这样每次游戏状态发生变化时就不会出现未处理的状态了。
在处理键盘消息时,我也使用writedependent函数。
比如处理Enter键的时候,我用KeyReturnProc()来控制,那句switch(gamestate)也是少不了的。
回答简单是。
例如,当elf运行时,Enter键是没有用的。
这是因为我没有处理elf运行状态的键盘消息。
在战斗场景中按下回车键时,如果选择框中有小精灵,就会处理相应的东西。
例如,如果选择了一个敌人,这样设置DrawFlag=DrawEnemyState,屏幕更新时就会绘制敌人的移动范围和位置。
知道了?好了,如果你了解了消息循环的原理,下面的事情就很容易理解了。
我们来谈谈脚本控件。
要实现这一点,需要在updateScreen()函数中拦截一条“脚本控制”消息,并调用相应的处理函数:ScriptControlProc();那么如何获取“脚本控制”消息呢?我做了这样的妥协:新游戏->调用脚本“战斗结束”->调用脚本“前往下一个位置”->调用脚本那么,只有在这些情况下才会调用beginScriptControl();该函数执行三个功能:1.首先读取舞台(场景)角色的数据(每个舞台都是一个单独的舞台)2.打开脚本文件(注意使用全局文件指针)(虽然我没有直接在源程序中打开,但原理是一样的)3、设置游戏状态为“ScriptControl”,这样ScriptControlProc()就为下一次调用UpdateScreen()即可;(如何?你知道消息循环的作用吗?)ScriptControlProc()函数其实很简单:读取脚本文件中的参数读取到文件末尾脚本文件需要一个函数LoadParam(FILE*fp)乔解释了剧本做;这个函数负责解释脚本中的东西:无论是函数调用还是函数参数,然后找到相应的函数来执行。
脚本中的一段代码是MovePlayerTo(1,1,1);这意味着将第一个玩家移动到1,该怎么做呢?我按照以下步骤操作:1.保存当前游戏状态2.将当前游戏状态设置为“移动精灵”。
引擎找到“MoveElf”函数后,在updateScreen()中调用函数MoveRoleProc()。
移动完成后,MoveRoleProc()调用这个函数读取上一局的状态怎么样?你又回去看剧本了吗?请记住,当移动字符时,指向脚本文件的指针不会改变,因此当返回到读取脚本的函数时,它不会再次读取而是继续读取!对于其他脚本指令(例如LoadDialog)也是如此!当文件即将结束时,不要忘记告诉引擎停止。
这时候我们就需要在脚本中更新游戏状态。
好的,首先到这里,如果有什么不明白的地方,请联系我。