3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 6579|回复: 1
打印 上一主题 下一主题

[原创] 【魔兽地图编辑器】【VJass教程】debug预处理符与地图调试

[复制链接]

179

主题

795

帖子

2410

积分

版主

大家叫我奶茶0.0

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

贡献度
374
金元
9139
积分
2410
精华
0
注册时间
2012-3-17
QQ
跳转到指定楼层
主题
发表于 2013-9-1 02:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在暴雪的Jass里,有个不起眼的关键字:debug。多年来一直没有多少人关注它,因为它仅仅是空有其
名而没有任何实际用处。不少人推测可能是暴雪内部使用的,而在发行的魔兽中,这个关键字已经没有
任何效果了。一个语言的关键字就那么几个,放着不用是浪费。因此,vJass的作者决定把这个尘封了多
年的关键字重新启用,赋予它新的意义




vJass的编译器在处理代码之前有个预处理的过程,这个过程仅仅是作一些文本替换工作,如同C/C++的
预处理器一样。debug关键字是预处理符,它在预处理的过程中,控制文本的生成与否。
debug预处理符的语法很简单,如下所示:
<可以在任意一行vJass之前加上debug关键字,例如:<debug预处理符的处理机制是:当编译器处于debug模式时(NewGen的JassHelper菜单里第2项),
预处理时将简单去掉debug关键字,保留其后的语句;当编译器处于release模式时,预处理时会将以
debug开头的行全部移除。可见,debug预处理符的作用是:引入一些只在debug模式下起作用,而在
release模式下无效的语句,主要用于地图的调试。




这是一个简单的例子(假设flag是某操作是否成功的标志)
<这个例子在debug模式下,会被编译成:<在release模式下,会被编译成<可以看到,debug模式下,debug关键字被去除了,这一行语句发挥了作用;而在release模式下,整行
都被注释掉了,失去了作用,因此,这个程序在debug模式下出错时,会打印出出错信息,而在release
模式下出错时,将什么都不会显示。








魔兽地图的调试没有什么特别方便的工具,虽然NewGen自带了调试器,但是传统的“打印式调试”仍
然是主要调试手段。魔兽的打印式调试一般是借助暴雪提供的BJ函数BJDebugMsg(内部使用
DisplayTimedTextToPlayer函数实现)向屏幕上输出调试信息,比如某某变量的值啊等等的。打印式调试
是经典而又有效的调试方法。但在魔兽中使用的时候,大量调试语句的清除是一个问题,因为在地图发
行时,调试语句是要清除的,不能给玩家看太多的调试信息,否则因为大量无用信息充斥屏幕,容易让
玩家失去兴致。大部分地图作者选择手工慢慢清除调试语句,费时费力又容易出错。debug预处理符正
好可以帮上忙。把调试语句前面加上debug预处理符,在调试模式下可以输出调试信息。地图完成之后
发布时,切换到release模式,所有的调试语句都会被自动去除。








回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2026-5-19 02:17 , Processed in 0.028485 second(s), 15 queries , Memcached On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表