大家好,我是javascript的新手,之前完全沒有學過
有看過網路資料,但是關於應用方面有些問題想請教
對於我先前的無知發問說聲抱歉
我重新整理了一下問題,但我也不能確定我這樣問的對不對
如果有不對的地方請告訴我
我有一個js的程式能debug遊戲npc的動作資料
每個動作都有一個代號
然後該程式附帶可以自行製作類似 WOW 的 DBM 的東西 (警告/通知)
可以利用debug的資料,在讀到對應編號時,可以利用function的內容來表示
然而我想製作出一個
我的問題
好比 NPC 在動作時會喊 "開始"
接著每2秒會數一數字,從 "1" 數到 "10"
無論數字到哪裡,直到 NPC 喊"停",就結束動作。
我原本編寫的條件是,當NPC喊到數字時,通知我下一個數字
但是就算喊了停止,還是依然會通知我下一個數字
因為我所編寫的function己經符合條件 "開始" & "數字"
所以我想請教,是不是有方法增加一個緩衝時間(1500ms)來判斷是否該執行這個function
我該如何編寫條件
遊戲是依靠
https://github.com/Kaseaa/library
https://github.com/Kaseaa/tera-guide
所以遊戲裡面是讀的到 1 2 ....10
所以我只要編寫對應zone的文件編號.js
//combot attack start
function front_attack_on(){
attack = true;
}
//combot attack end
function front_attack_off(){
attack = false;
}
//判定下個攻擊是否為combot
function nextattack(handlers){
if(attack){
handlers['text']({
"sub_type":"message",
"message":"back"
});
}else if(!attack){
handlers['text']({
"sub_type":"message",
"message":"front"
});
}
}
//延遲1500ms判定執行
//ps:如果用這樣寫 CMD會顯示 js cannot read property 'text' of undefined
function nextone(handlers){
setTimeout(nextattack(),1500);
}
module.exports = {
"s-126-107-2107": [
{
"type": "func",
"func": nextone //CMD報錯 js cannot read property 'text' of undefined
}], //用function nextattack,就沒問題
};
我是希望能在loge到"s-126-107-2107"時,慢1500ms,去執行function nextattack
因為那時候就能確定是front attack on 還是 front attack off
11/21 更新:我的問題解決了 謝謝各位的指教
我不曉得 javascript 有沒有分種類,所以我以為所有的javascript都是一樣的
這裡面有包含PROXY & NODE ,不曉得有沒有分別
let abntimer;
//combot attack start
function front_attack_on(){
attack = true;
}
//combot attack end
function front_attack_off(){
attack = false;
}
//延遲1500ms
function nextone(handlers){
abntimeout = setTimeout(()=>{
if(attack){
handlers['text']({
"sub_type":"message",
"message":"back"
});}else if(!attack){
handlers['text']({
"sub_type":"message",
"message":"front"
});
}},1200);}
module.exports = {
"s-126-107-2107": [
{
"type": "func",
"func": nextone
}],
};
我猜你需要的是Timer ?
你還是拜古先生比較快...
請問古先生是哪位
古哥, 江湖人稱 Google大神
所以說如果想在1秒內,如果有出現不符合執行function內的條件
可以取消function
是用timer嗎
我找過古先生了,我找不到想要的答案或是我看不懂 >"<
試寫了個測試:
http://jsfiddle.net/fillano/9qngwLa7/53/
這是透過getter/setter來監控狀態。
可以調整最後一行來配合你的條件:
當他是:
setTimeout(function() {status.st2 = 'B'}, 200);
會跑出結果:
1003
A
1004
B
當他是:
setTimeout(function() {status.st2 = 'B'}, 1200);
會跑出結果:
1003
A
1004
1005
B
如果跟你想像的條件不太一樣,你可以調整程式看看。