iT邦幫忙

0

javascript 時間內達成條件 function 的設定

大家好,我是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
	}],
};
看更多先前的討論...收起先前的討論...
浩瀚星空 iT邦研究生 3 級 ‧ 2018-11-19 18:12:51 檢舉
等等我一下,我需要拜神請示一下才行。
sb032835 iT邦新手 5 級 ‧ 2018-11-19 18:36:31 檢舉
終於完成新手任務...
大哥我是真心求教~~~~
sb032835 iT邦新手 5 級 ‧ 2018-11-19 21:08:08 檢舉
@浩瀚星空
我可以這樣寫嗎
function open_on(){
open = true;
}

function open_off(){
open = false;
}

function front_attack(handlers){
if(open){
handlers['text']({
"sub_type":"message",
"message":"1105"
});
} else
if(!open){
handlers['text']({
"sub_type":"message",
"message":"1104"
});
}
setTimeout(()=>{
count = 0
}, 2000);
}

如果這照這樣,當我讀取 1104 二秒內沒有出現!open,就會跳1105 對嗎
sb032835 iT邦新手 5 級 ‧ 2018-11-20 07:50:27 檢舉
@浩瀚星空
我更改了內容在上面文章裡面,如果可以請你幫我看看
浩瀚星空 iT邦研究生 3 級 ‧ 2018-11-20 09:14:49 檢舉
基本上我會用這樣拜神的說法是。
我只有看到function。但基本運作的程式碼。還有變數的宣告用法。我都沒看到。

我也搞不太清楚你說的a跟b。
然後你的 setimeout 又打錯。正確是 setTimeout才對。
而且你呼叫的又是open()。但我又沒看到open的程式碼

我不問神,你覺得我該怎麼回答你呢?
sb032835 iT邦新手 5 級 ‧ 2018-11-20 22:31:40 檢舉
@浩瀚星空
非常抱歉,我是js的新手,其實可以說是完全不懂
一些js或是其它語法的專業名詞我也不明白該怎麼表示以及稱呼

對於專業的你們看著這種描述,感覺像有講似乎沒講一樣
非常抱歉
wingkawa iT邦新手 4 級 ‧ 2018-11-21 09:21:53 檢舉
還是看不太懂你的問題,你需要把想做的事情先釐清,搞不好自己就解開了。
首先把程式碼更新到你的問題中,用三個`包起來,像這樣:
```javascript
// 一堆 code
```


然後盡量在每一行前面,加上註解告訴我們,和告訴你自己,這行程式碼是幹嘛用的,像這樣:
```
// 記下NPC開始動作了沒
var open = false;
// NPC說"開始",呼叫這個 function ,將 open 設成 true
functon open_on() {
open = true;
// 或是還有其他事要做,總之盡量寫清楚
// 在 console show一下 open 是不是變成 true 了
console.log(open);
}
// 下略
// ...
// ...
```

2 個回答

0
小魚
iT邦高手 1 級 ‧ 2018-11-19 19:12:46

我猜你需要的是Timer ?
你還是拜古先生比較快...

看更多先前的回應...收起先前的回應...
sb032835 iT邦新手 5 級 ‧ 2018-11-19 19:36:46 檢舉

請問古先生是哪位

小魚 iT邦高手 1 級 ‧ 2018-11-19 19:41:47 檢舉

古哥, 江湖人稱 Google大神

sb032835 iT邦新手 5 級 ‧ 2018-11-19 19:56:32 檢舉

所以說如果想在1秒內,如果有出現不符合執行function內的條件
可以取消function
是用timer嗎

我找過古先生了,我找不到想要的答案或是我看不懂 >"<

sb032835 iT邦新手 5 級 ‧ 2018-11-19 20:05:05 檢舉

原本是想用 setTimeout
可是就算設了1秒,但是在當下讀取資料時,也只會推遲1秒後執行
並不會因為加入了條件而去改變原本function的內容

小魚 iT邦高手 1 級 ‧ 2018-11-20 07:52:59 檢舉

其實越來越聽不懂你的需求,
答案是要你自己想的,
古哥只會告訴你語法.

不會改變function內容沒差吧,
你不是只要過了一秒,
判斷B有沒有回來,
(可能用你那個open變數判斷吧)
然後決定要不要顯示1005就好了嗎?

sb032835 iT邦新手 5 級 ‧ 2018-11-20 22:32:54 檢舉

是的,非常抱歉
我在上面的留言才知道,我說的問題讓人不懂
這是我問題,造成困擾非常抱歉
我會改進

0
fillano
iT邦超人 1 級 ‧ 2018-11-20 16:43:23

試寫了個測試:

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

如果跟你想像的條件不太一樣,你可以調整程式看看。

sb032835 iT邦新手 5 級 ‧ 2018-11-20 23:02:39 檢舉

謝謝你

sb032835 iT邦新手 5 級 ‧ 2018-11-20 23:07:03 檢舉

應該是我的問題表達的方式不對讓大家摸不著頭緒

我要發表回答

立即登入回答