深度剖析Python 脚本问题

开发 后端
大部分的游戏编辑都直接写入游戏代码,例如计算公式、游戏流程等,但随着游戏产业的不断发展,游戏开发本身也变得越来越复杂,加上了Python 脚本的元素。

在开发游戏时主要使用的Python 脚本主要有两种方式,一种方式是主程序使用一门高级语言,比如C++进行编写,然后对其嵌入一个脚本解释器,在运行时动态执行一些脚本函数。

游戏企划需要更多的时间来对游戏进行调整,如果游戏逻辑还写在代码中,则企划对游戏的每次修改都要通过程序进行,而且还需要重新编译以及重启程序,这样工作效率就大大降低了。

在游戏中使用脚本,就正好能解决上述问题,小到一些计算公式,大到游戏的控制流程都可以通过脚本完成,而且目前的脚本系统大多是解释执行的,因此都可以支持运行时动态修改,这样一来可以立即看到修改结果,非常方便。

如何使用脚本在游戏中使用脚本主要有两种方式。一种方式是主程序使用一门高级语言,比如C++进行编写,然后对其嵌入一个脚本解释器,在运行时动态执行一些脚本函数;

另一种方式则是整个程序全部使用Python 脚本编写,例如一些泥巴游戏就是直接用LPC脚本编写的。本文主要研究嵌入式脚本使用方法,因为目前大部分的脚本都不能提供如VC++那样方便的调试环境。

如果程序全部用脚本编写,当脚本多达几万行甚至十几万行的时候,调试会成为一件非常痛苦的事。而且嵌入式使用时可以将一些非常耗时的代码用C++编写,以保持较好的运行效率。

程序从C++的main( )函数开始启动,然后进入主循环,在一些C++函数中会直接调用脚本函数,在脚本函数的运行过程中,又可能调用C++的扩展函数。C++扩展函数的主要功能有两个:一是用来增加脚本无法直接编写的功能,二是用来替换脚本中运行速度过慢的函数。#t#

上述过程的关键点就在于C++和脚本如何相互调用函数,以及如何传递参数与结果。一般的解决方法是在程序启动时利用脚本的API向脚本注册C++的扩展函数。

将函数指针传递给脚本系统以便将来调用,调用脚本函数则使用脚本系统的API将调用参数压进栈,取得运行结果也要通过API进行。

Python 脚本简介目前有许多第三方脚本语言可供直接使用,例如Tcl、Lua等等,本文要介绍的是Python 脚本Python已经有超过十年的历史,是一种解释性的、面向对象的脚本语言。Python的解释器在大部分的操作系统上都可以运行,如Windows、Linux、Solaris、Mac 等。

详细的语法说明请参考Python安装包自带的文档,这里我只介绍一些常用的关键字与注意事项。Python没有C++中的 { 和 } ,它使用缩进来代替。变量不需要单独声明,但不能引用未经赋值的变量。

Python中引入了模块的概念,类似C++中Library的概念。模块可以包含函数、变量、类。一个脚本文件就是一个模块,模块在使用前需要导入,Python中没有switch,使用if判断代替:

  1. if ( num==1 ):  
  2.     print "1"  
  3. elif ( num==2 ):  
  4.     print "2"  
  5. else:  
  6.     print "unknown"  
  7.   while 是Python的一个循环语句。在while循环内可以使用continue跳到下个循环,使用break可以跳出整个循环:  
  8. cnt = 5 
  9. while ( cnt > 0 ):  
  10.     print cnt  
  11.     cnt -1 
  12.   for 循环:  
  13. list = ["test1", "test2", "test3"]  
  14. for str in list: 
责任编辑:chenqingxiang 来源: 清华大学出版社
相关推荐

2010-02-24 14:04:32

Python脚本语言

2010-02-23 10:32:20

Python 脚本

2010-02-23 10:05:52

Python历史

2010-03-01 16:48:02

Python模块

2010-02-05 18:00:18

Android源代码

2010-02-06 15:32:30

Android架构

2010-02-02 15:25:35

Python语法

2010-02-03 16:56:24

Python包

2010-03-01 14:50:06

Python 工具

2010-03-01 18:33:30

2010-01-08 14:06:49

JSON 形式

2010-05-24 16:58:44

SVN安装

2010-02-26 10:38:29

Python语言

2010-02-03 09:35:20

Python函数编程

2010-02-02 13:22:06

Python面向对象

2010-02-03 11:26:28

2010-02-24 16:33:28

Python功能

2010-02-26 17:44:40

Python测试框架

2010-02-22 13:53:22

Python 中文乱码

2010-01-27 15:50:23

C++复杂性
点赞
收藏

51CTO技术栈公众号