场景设计怎么写( 二 )


每一个房间的 create() 只有当 reset 时才会被呼叫到,而 init() 则是在 B 物件进入到 A 物件时都会呼叫到 A物件的 init()。看到这,你应该可以看出差别了,我们希望当一个物件(此处较多是玩家)进到一个房间时,能够经由某个动作启动这个房间的机关的话,自然是利用 init() 来编写 。
一般的使用方式,是在 init() 中利用 add_action() 来呼叫你写的函式,其格式为: add_action("function type", "action"); function type 即是被呼叫的函式名 action 是启动的动作 而你就可以将被 action 启动后要发生的事,都写在被呼叫的函式里面 。理论上来说,利用这个方式我们可以做到任何事,当然,能不能达成就看写程式的功力了 。
下面举个简单的例子: void init() { add_action("do_pick", "pick"); } int do_pick(string arg) { object me; me = this_player(); if ( !arg || ( arg != "flower" ) ) return notify_fail("你要摘什麽?\n"); else if ( random((int)me->query("kar")) message_vision("$N将花摘了下来,但一不小心被刺了一下 。\n", me); else message_vision("$N摘下一朵美丽的血红色鲜花 。
\n", me); return 1; } 当玩家利用 pick 这个指令时就会呼叫到 do_pick() 这个 function,而启动了这个房间的机关 。这里特别提到一点,一个简单的 room 我们为了使记忆体的使用量降到最低,会在 create() 最后加上一行 replace_program(ROOM);。
这是因为在房间的标准物件中有定义了如 init() 等其他的函式,而一个简单的房间根本没有用到,所以我们用。
2. 学场景设计,该怎样做 你是说的3D MAX的场景设计还是MAYA呢?
我就是干这个的 。
场景设计就像上面那个哥们说的那样,是要有高超手绘水准的,不知道你是不是像我一样大学学的动画专业,还是参加的民间培训班 。
场景设计分为手绘部分和软件处理部分,我两种软件(3D MAYA)都使用过,如果你是说怎么做一个场景设计的全过程,我可无法为你作答,这个过程是不固定,而且很复杂的 。
不过我可以给你提供一些建议
首先,场景设计一定要根据你的事前收回草稿,进行加工改造
其次呢,你需要在渲染上尽量使各种质感的材料显得和谐 。
还有,场景设计除了最基本的透视和空间规则,还要注意你的物体排列与分配,实在美术上经常讲的2/1的分割线,才能自然 。
就这么多吧 。
3. 如何设计场景 房间是构成这整个世界的要素之一,在此我们提供了一个房间的标准物件来让所有的房间继承 。
而如同其他的物件一般,你需要写一个 create() 来设定房间中的叙述、出口、物品、生物等等 。这里,我喜欢说你用 create() 这个函式来赋予这个房间的属性 。
一般来说,要建造一个简单的房间,你只要赋予它基本的属性即可 。当然,我们不认为一个区域中几十个房间没有任何的机关或秘密,是个会吸引玩家一游的好地方 。
下面,提到了一些建造房间所需要留意的事项,也会配合一些例子来说明 。一、基本篇 一个基本的房间,要有 short <短叙述> 、long <长叙述>、exits <出口> 1. 当你在写一个房间的 long <长叙述>时,其格式为: set("long", @LONG 房间的叙述 。
. LONG ); 其中 @LONG 和 LONG 是互相对应的,你可以用任何字接在 @ 后面,但是前后两个字一定要一样,这样系统才能判别,而房间的叙述写完时,一定要换行后再接第二个 LONG,且同一行不能再有其他任何的字元,不然系统无法判定叙述是否该结束了,会造成编译时的错误 。
而为求区域看起来外观上整齐、统一,房间的长叙述中每一行的长度必须一样,而一行的长度建议为 29 到 32 个中文字,约占萤幕的三分之二 。并且一个房间的叙述最好不要低於三行,区域各个房间的叙述重复性降到越低越好,这样你的区域看起来才不会太过阳春 。