作者laechan (小太保)
看板mud_sanc
标题[wizs] 让 input_to 一段时间後丧失功用
时间Wed May 25 14:56:26 2011
通常是 LIPS 系统在用的,比方说对话到一半,跳出
「三个选项」让你选,而且还计时,你必须在时间内
回答不然时间到了选项框就消失=你不做任何选择。
┌────Time Out────┐
│
巴黎华击团,出动! │
↑ 胜利的姿势,决定! │
│ 决胜的内裤,来吧! │
└────Time Start───┘
它的做法是,先撰写一个 input_to 用的物件。
input_to.c
=============================================
int choice_one(object ppl,object origin_ob)
{
string str;
write(@LONG
┌────────────┐
│ 1.巴黎华击团,出动! │
│ 2.胜利的姿势,决定! │
│ 3.决胜的内裤,来吧! │
└────────────┘
请在10秒内选择:
LONG
);
input_to("made_choice",0,ppl,origin_ob,str);
return 1;
}
int made_choice(string str,object ppl,object origin_ob)
{
int n=atoi(str);
if(n>0 && n<4)
{
ppl->set_temp("made_choice",n); // 玩家有做选择
origin_ob->destroy_ob(ppl,this_object());
return 1;
}
else
choice_one(ppl);
return 1;
}
==========================================
然後在让玩家要做出选择时这麽做...
.
.
.
ob=clone_object(__DIR__+"input_to.c"); // 先呼叫出该物件
call_out("destroy_ob",10,ppl,ob); // 设定一个 10 秒的 call_out
ob->choice_one(ppl,this_object()); // 让 ppl 触发 ob 里头的 input_to
return 1;
}
int destroy_ob(object ppl,object ob)
{
if(ob)
{
destruct(ob); // 这时候玩家就会从 input_to 状态解除
if(!ppl->query_temp("made_choice")) // 代表玩家没有做出选择
执行没有做出选择的结果;
else
执行有做出选择的结果;
ppl->delete_temp("made_choice"); // 然後统一删除这个标记
}
return 1;
}
一、玩家在时限内做出选择
这时马上呼叫 origin_ob 的 destroy_ob 函数,则
ob 马上被消灭、同时立刻执行选择结果。
而之後等 10 秒的时间也到时,origin_ob 自己呼叫
了 destroy_ob 函数时,if(ob) 才做的事情,因为
此时 ob 已消失自然就不用再做一次。
二、玩家等时限到了
这时玩家停留在 ob 的 choice_one 函数的 input_to
区段,但是 origin_ob 於 10 秒後呼叫了 destroy_ob
,而 destroy_ob 判断到 ob 存在,这时就 destruct
它,同时执行了玩家没有做出选择的判断。
LIPS 的应用,还包括了原本应该在 10 秒内做出判断,但
是玩家若「犹豫了五秒以上」时,就把其中几个选项变更为
别种选择。
这是应用在「我们必须判定玩家的确有"深思"这个问题应该
选什麽、而不是一问就马上回答」这一方面,若玩家马上回
答,就不会出现别的选择。
例如一开始看到的画面是..
┌────Time Out────┐
│
先救老妈 │
│ 先救老婆 │
│ │ <= 暗示了可能有第三个选项
└─←──Time Start───┘
五秒过後跑出新的画面..
┌────Time Out────┐
│
先救老妈 │
↑ 先救老婆 │
│ 两个都救 │ <= 暗示了可能有第三个选项
└────Time Start───┘
有兴趣的人可以玩玩看。这时要增设的判断就是玩家在
五秒内回答的答案「不能有 3 这个选项」,选 3 必须
是在 5 秒後才行,也就是要多一个时间判断。
Belldandys.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
※ 编辑: laechan 来自: 115.80.177.58 (05/25 15:03)