热门职位程序员 美工 市场 策划

怎样在游戏中实现脚本控制
2009年01月22日 15:00:52   【发表评论/查看评论

作者:Kylinx(吴振华)

    一个游戏引擎做好了,最重要的是缺什么?脚本。打个比方,游戏引擎是一部电脑,则脚本就是电脑的软件。既然脚本这么重要,那该怎样实现呢?下面我就来说说我的做法。

首先理解一下消息循环

    一个好的游戏离不开好的消息循环。它是游戏实现很重要的一部分。下面我就来说说我的游戏《宿命传说》的做法。

    首先,我定义了一个全局变量extern int GameState;
    在游戏中定义了许多当前的游戏状态例如

#define GAME_STATE_CUSTOM 0 //这代表在战斗中玩家可以控制游戏
#define GAME_STATE_TALKING 1

等等。

    好了,下面在WinMain里面的while(1)循环中有个UpdateScreen()函数

原型为
void UpdateScreen()
{
    延时
    switch(GameState)
    {
        case GAME_STATE_CUSTOM:
            画出地图
            画出所有精灵
            画出天气(如果有的话)
            如果玩家选中了敌人的话(打个比方DrawFlag=DrawEnemyState)就显示敌人的移动范围和敌人状态
        break;
        case GAME_STATE_TALKING:
            GameDialogProc();
        break;
        case GAME_STATE_SCRIPTCONTROLLING:
            ScriptControlProc();
        break;
        ….//其他的消息在这里处理
    }
    将缓冲表面的图象显示到屏幕;
}

    每个游戏状态都需要一个独立的函数来写。这样在每次切换游戏状态时都不会出现无法处理的情况。在处理键盘消息的时候我也用一个个独立的函数来写,如处理回车键我用了 KeyReturnProc()来控制。在这个函数里同样也少不了switch(GameState)这一句,为什么?答案很简单,比如说在精灵行走时回车键就没有用,这是我没有处理精灵行走这个状态的键盘消息。而在战斗场景里按下回车键,如果有精灵在选择框里的话,就会处理相应的东西。
    例如选择了敌人则使DrawFlag=DrawEnemyState;这样在更新屏幕时就会画出敌人的移动范围和状态。
    明白了吗?好了,如果你明白了消息循环的原理,下面的东西就很容易理解了。



【编辑:布谷布谷】

 

热门招聘

最新应聘信息

相关新闻
  • 什么是游戏脚本策划 (22)

  • 游戏脚本的实现 (22)

  • 游戏中的脚本语言 (22)

  • Lua游戏脚本语言入门 (22)
  •  

    © 2001-2009 www.17173.com All Rights Reserved.
    建议意见:玩家留言区 商务合作:客户留言区
    广告专线:0591-87878497 客服电话:0591-87826743 关于我们 设为首页 玩家客服
    1940882