【四十,我該面對更年期了嗎?】
半夜兩點多起床,不自覺就醒了,然後就睡不著。翻開床頭書好幾篇,滑了手機好幾次,直到窗簾透出一點光,遠方的天光穿進了房間,天亮了,我到底該睡還是不該睡?心底一個聲音:「周末,對自己好一點,睡吧!」
四十歲,單身,剛過七夕情人節的第二天。或許太久沒有運動,老是覺得疲憊跟厭倦,昨天做完直播說書之後就倒在床上,很快就不醒人事。這幾個月都有同樣的狀況,總覺得明明沒做什麼工作,卻異常的感到躁鬱,我習慣把工作清單列在一張紙上,看著一堆未完事項,卻提不起力氣完成它。
剛看完《俗女養成記2》第二集,看陳嘉玲就好像照鏡子,一個四十歲的女生準備面臨身體跟心靈重大轉折,瞬間打開網頁,輸入關鍵字《更年期》,心想「現在的我不會就…更年期了嗎!」心情瞬間盪到谷底。
網頁資料顯示,更年期莫約45歲到55歲之間,女生會出現生理週期不規律、夜間盜汗、皮膚發紅、性慾變低、骨質疏鬆、情緒暴躁等等。而所謂的早更,顧名思義就是更年期提早來,大約一百人中有一個人會有這些症狀發生。綜觀以上各點,最後的結論我不屬於早更人,畢竟裡面我只有情緒暴躁這一點完成。
只是,心中吹起了秋風,落葉灑落在內心的湖水。我知道再過幾年就要面對,從一個小女人,變成「沒有月經」的女人,突然間腦海轉起跑馬燈,從國中初經到四十,我到底經歷了什麼?從害怕、討厭、習慣到即將面對它就要消失了。
朋友直接回:「你就要面對生不出孩子的事實。」
我翻白眼說:「我知道!」
我從三十六歲就放棄為了生孩子去結婚這事,只是面對即將而來的更年期,最大的恐懼就是要認清「自己不再年輕」。
三十是初老,四十是俗女。三十後,已經無法唱歌到三更半夜到天明,四十後,無法熬夜看連續劇到隔天中午。我把大部分無關緊要的朋友名單都刪的差不多,因為明白過了一定的年紀,時間會變很慢,變很少。變得你只能專注一兩件事情,變得只能追一兩部連續劇,變得只想看同類型的小說,變得不想再嘗試完全不感興趣的事。
刪除法,不只用在人身上。我開始丟衣服、丟家具、丟舊書、丟棄讓你覺得困惑不安的事物,寧可躺在床上放空,也不願意把時間與空間給一個三觀不合的人。
養生法,不只是食物而已。我開始多喝水,戒糖,斷醣,報名瑜珈課程、運動課程,心想肌肉不要流失的這麼快。
放空法,不只是躺平兩字。我相信任何直覺,想哭就哭,想笑就笑,今天不想做什麼,那就什麼都別做,反正多做,日子也不會好過。
做完更年期功課之後,我鬆了一口氣,我告訴自己:「害怕它,不如接受它。反正人橫豎都要死,失戀、失業、失去自我都經歷過了,你不會害怕失去月經的。」
✈ 日本 北海道 美唄市
-
生活中,選擇留下合適舒服的人
博客來:https://reurl.cc/4yEqzV
誠品:https://reurl.cc/qm79mN
金石堂:https://reurl.cc/mq8Wn9
失戀 週期 在 Facebook 的精選貼文
失戀後找戀,卻再創虐戀?談愛情裡的三個自我檢核
#愛情的迴路
在本文一開始,我們就碰到了「你一定會遇到更好的人」、「對方不懂你是他的損失」很熟悉的提問,訴說著我們每段戀情彼此之間充滿著無限的相似程度,但對象又好像跟上一任不太一樣,明明已經從上上一任中反省過了,卻還是碰到同樣的問題,最終的結果還是換來同樣的安慰(「你一定會遇到更好的人」、「對方不懂你是他的損失」),宣告著原來我又掉到一樣的迴圈。
人們常說愛情有她的生命週期,從熱戀到衰退,難道我們只能從這樣的事實中,說服自己衰退是不可避免的,用一種看似豁達的態度掩蓋一點一滴錐心之痛?從一個個小小的迴圈逐漸養成一個完整的迴圈。
#迴路一、愛是只要我被看見就值得
某個文化總是塑造著我們自己的自我,在成長的過程之中慢慢的也認不清楚自己,「重男輕女」的亞洲文化或者可以用一種更淺白的感受「不被認同的感受」表示,這一現象讓「我們」不得不以力爭上游的方式獲得價值感,「我們」總是讓自己在這段感情之中做得更多,不斷挖掘對方最細微的需求,用一種比「威利在哪裡」更吃「眼力」的方式活在愛情的謎圖之中,只在和「威利(另一半)」對到眼的時候,「我們」才會感受到自己存在。「我們」把自己當作是花火,竭力的燃燒自己只為了被另一半看見,「我們」把挖掘對方的回應當作是愛情的全部。等到我們蓄力完成後,再次地把自己射向星空。一直一直……。
#迴路二、愛是強烈地佔有與控制
「我們」似乎無法拒絕一種想法,「如果我沒做好__事情,他就會__,這樣的想法總是自動地跑出來,這樣的想法,儘管是帶著負面的影響但是從這樣的想法之中卻得到某種充實感,例如「我覺得我被愛」。是有一種理想的形象一直處在「我們」心中像是自己的父親或者老師這樣的形象,不論這樣的形象是成為自己的目標,像是「我要成為這樣的人」。還是這個形象意味著接受對方的做法,像是「他才是正確的」。不管哪一種「我們」已經在心中建立起小舞台,排練了各種情境,這樣的腳本總是固定的,也許是悲劇,但悲劇主角一定是自己,也無法停止讓美麗的自己不成為主角。「我們」一直是美麗的。這舞台和主角這兩個元素不曾在腦海中消失。
#迴路三、愛是無止境的付出與照顧
第三個迴路,可能跟第二的迴路有點相似,像是在「我要成為這樣的人」這個部分,但是在迴路三中,可能早已經是這樣的人,一個獨立自主的人,而不是即將要成為獨立的人。不難想像,「我們」把自己照顧得很好,好到能夠去照顧對方,而不需要對方的照顧,尤其是在日常生活上照顧「我們」。「我們」很像一名船長,,指揮著「水手」,對抗整個驚險的狂風暴雨,等到風雨漸緩抵達目的地後,卻忘了雙腳接觸陸地時的平衡感。回頭想想或許天翻地覆的船上生活才是適合自己的。
#愛情的三種迴路
讓我們在感情生活當中建立起一個紀錄點,每當闖關失敗後,我們又回到了同一個紀錄點,可能已比之前聰明一點的方式再度闖關,如果還是破不了關那該怎麼辦?在感情生活當中,我們應該好好檢視自己,或許在失戀的當下是再適合不過的時機點,讓我們暫緩回到同一個紀錄點,學會從心理學的角度重新開始我們的感情生活,了解在心理學上「自我」、「他人」、「關係」的探討中如何界定「我」是怎樣子。「改變戀愛DNA」。
————
本文節錄自《為什麼我們愛得如此不安?:從過度依賴到承諾恐懼,心理師為你解答30種愛情裡的糾結與困擾》
作者:吳姵瑩諮商心理師
了解更多:https://www.books.com.tw/products/0010813589
————
實體課程推薦
愛情這種病:https://www.iiispace.com/loveism/
————
我是愛心理平台,集結愛與心理學的平台,探索心裡認識自己的最佳平台。
喜歡我們的貼文,請幫加入追蹤按愛心,然後分享出去唷❤️
#虐戀 #失戀 #找戀 #父親母親 #重男輕女 #原生家庭 #吳姵瑩諮商心理師 #楊瑞玉諮商心理師 #王雅涵諮商心理師 #林佳慧實習心理師 #Psychology
失戀 週期 在 阿旭寫字公司 Facebook 的最佳解答
深夜在房間讀工作的信件,放空的時候在臉書上看看老朋友們的狀態,突然又看到幾年前解除關係的朋友。從他公開的各則貼文看來,他跟著另一伴搬進了俯瞰城市的高樓新居,每天專心在做自己喜歡的事情,甚至從中獲得了一些成就,日子低調靜好幸福。
我們相識的早、喜歡的晚。等我們確認彼此的喜歡後,隱藏多年的愛戀一次迸發,有了肌膚之親。不過他後來坦白自己不是單身,僅是對當時的感情存疑。我將他推開,從此不再見他。我無法成為隱形的戀人更加拒絕傷害另一個人的各種可能性。(要渣他去渣)
多年以後,偶爾翻到他的臉書,我都會看著他的貼文想著「真是太好了,好幸福啊,如果當時他選擇我,日子就註定會辛苦的。」不過,想完之後仍會被寂寞伸出的觸手碰得全身起雞皮疙瘩。
忘了在哪一個場合一位女孩向我傾訴戀愛煩惱,我回覆她的問題後,她問「你怎麼可以把感情的事情看得這麼淡?是因為置身事外嗎?」
我已經忘記當時怎麼回答了,但除了真的是置身事外,我其實經歷了許多次完整的戀愛週期——從曖昧、熱戀到感情歸於平淡最後失戀的過程。
因為了解愛情的模樣大抵相同,所以在心境的轉移上可以提早預言她的感受,告訴她「愛情是兩個人在彼此的岸上搭橋,一個人不愛了就是拆橋,妳再怎麼想過去,他便再怎麼後退」勸慰她放手就是原諒自己。
我覺得自己不是看淡,而是某種程度上對感情的理解。當「失戀離別」在身後緊追不捨,我們即使知道眼前就是一道名為「傷心欲死」的懸崖,也要毫不猶豫選擇跳下去才可能被未來或者新戀情拯救。
不論過去的戀人是主打歌或B面第一首,希望讀到這篇文章的你可以在某一天很高興地發現,與他相遇時,知道自己已經是陌生人了。你這一生,也就好了。
圖片來自電影 #女朋友男朋友 #GFBF
#阿旭寫字公司 #寫字 #手寫
失戀 週期 在 4大阻礙一定要克服才能成功– 失戀診療室LoveDoc - YouTube 的推薦與評價
... 前任#愛情時光機#分手# 失戀 #耐心#吸引力#挽回策略#成功復合#前任復合. ... 洞悉《逃不开的经济 周期 》经济盛衰轮回的秘密| 学习理解 周期 系统如何顺 ... ... <看更多>
失戀 週期 在 芯语- 一个正常人失恋之后,理论上需要28天就能走出这段 ... 的推薦與評價
从身体机能来看,人的情绪变化周期一般在28天左右, 这也就意味着无论是大悲还是大喜的情绪,过了28天的时间节点,身体机能会推着你走出这样 ... ... <看更多>
失戀 週期 在 [轉載] [蟑螂賀失戀] 中階LPC第1~7章- 看板mud_sanc 的推薦與評價
作者 [email protected] (打混的蟑螂史巴克), 看板 Mud
標題 [蟑螂賀失戀 ?] 中階 LPC - 第一章
時間 中山醫學院BBS站 (Wed Jul 22 21:43:06 1998)
───────────────────────────────────────
中階 LPC
Descartes of Borg
Novermber 1993
第一章: 簡介
1.1 基礎 LPC
閱讀此課本的人應該讀過基礎 LPC 課本或是夠熟悉 mud 世界的程式寫作.
不只是能建造房間和撰寫區域內有關的物件而已, 也該清楚自己寫出來的程式在
執行的時候到底在做什麼. 如果你覺得你的程度還不到, 就回去看完基礎 LPC
再來看中階 LPC 課本. 如果你達到要求, 你會發現你在此讀到的東西對你比較
有意義.
1.2 中階 LPC 課本的目標
此份介紹性的課本是為了對 LPC 一無所知的人, 讓他們有能力在任何 LPMud
寫出好的遊戲世界. 對 LPC 和建設 LPMud 來說, 自然要比建造房間、護甲、
怪物、武器來得艱深. 當你進入更複雜的概念, 例如公會; 或想更深入你的遊戲
世界, 你會發現基礎 LPC 詳細說明的概念裡面沒有這些東西. 中階 LPC 的設
計是把你從簡單的世界建造過程, 帶到完全了解 LPC 作為 LPMud 世界建造者
的知識. 撰寫 mudlib 本身的工作留到後面再講. 讀完這份課本, 並實際撰寫一
些實驗性的程式碼之後, 你們讀者應該能寫出合乎任何設計或想法的遊戲物件,
只要這樣我的目的就達到了.
1.3 概觀
到底多了什麼東西 ? 呃, 你們大部份都知道 LPC 支援映射 (mapping) 和陣
列 (array), 也曾問過我基礎 LPC 為什麼沒有詳細說明它們. 我覺得那些概念
超出我在基礎 LPC 課本裡面嘗試講述的範圍, 而比較適合放在這份課本裡. 不
過, 新工具都棒極了, 而重要的是, 你可以用新工具做啥. 基礎 LPC 課本的目
標是讓你能建造夠格的 LPMud 區域, 不需要映射 (mapping) 和陣列 (array)
就可以辦到. 這份課本的目標是讓你能在你的區域中實現任何點子, 這樣就需要
映射和陣列的知識.
LPMud 中, 任何你想寫的點子都可能實現. 令人驚訝的是, LPC 語言非常適合實
現這些目標. 你無法寫出你的點子的原因是: 你對 LPC 的知識、不合的 mudlib
、你的 Mud 主題、mud 管理的政策. 這份課本沒辦法把你工作的 mudlib 變得
更好, 也無法改變你的 Mud 主題或 mud 的管理政策. 千萬別認為 LPC 沒辦
法做到你想做的事. 如果你的點子不容於 mud 主題或是管理政策, 那就是你的
點子無法在你現在的 mud 實現. 如果 mudlib 不合, 告訴負責 mudlib 的人,
在 mudlib 層面上可以做哪些事來增進它. 你會很驚訝, mudlib 中實際上有很
多你不知道的東西. 更重要的是, 讀過此課本後, 你應該能讀懂你 mud 的
mudlib 程式碼, 了解每一行程式在做啥. 你目前應該還沒有能力自己寫出這種
程式碼, 但是至少你可以了解 mudlib 層次在做什麼.
這份課本開始時, 討論 LPMud driver 到底在做些什麼. 這份課本的一個好處是
, 裡面所講的東西跟 driver 和 mudlib 無關 (除了 Dworkin Game Driver).
對於遊戲 driver 的章節不會深入實際的 driver 程式架構, 而是所有遊戲
driver 跑 mud 基本上所要做的事.
接著, 我討論每個人都想多了解一些的題目 ---- 陣列 (array) 和映射
(mapping). 要了解映射這種資料型態, 大概是最簡單也是最困難的事. 大致上
, 映射算是一種複雜的陣列, 要討論映射之前, 你應該先了解陣列. 一旦你了解
它們, 映射實際上要比陣列好用得多. 無論快慢, 用你最多的的時間來學習這一
章, 因為本章大概是這份課本裡頭最困難, 也是最有用的一章.
之後, 有一小章討論 LPC pre-compiler, 在你的程式碼送給 compiler 之前,
你可以用它來編排你的程式碼. 雖然我在這裡介紹得很可怕, 這章恐怕是這份課
本中最簡單的一章. 所以我把它擺在介紹映射和陣列的那一章之後.
接著重新介紹字串 (string) , 更詳細地教你如何處理字串, 像是分斷字串這種
高級的命令處理技巧. 只要你很了解陣列, 這章應該很簡單.
再下一章是這本課本第二重要的部分. 如果你想超越中階的水準、深入 mudlib
程式碼, 這可能是最重要的部分. 這章深入介紹 LPC 繼承 (inheritance) 的複
雜觀念. 既然這份課本的目標並不是教你設計 mudlib 的程式, 這章不會詳細討
論物件導向程式設計. 了解本章, 會讓你體會一些物件導向程式設計的內涵, 也
讓你能夠僭越 (overriding) 其他函式以寫出更複雜的物件, 並定義出你自己的
角色基礎職業.
最後, 課本以簡略地討論程式碼除錯作結. 這不是很重要的一章, 但是這樣也表
示此章不只是補充你目前所學的知識而已.
1.4 此課本沒有的東西
對某些人來說, 此份課本最大的、也是政策性的遺漏就是「投影」(shadow). 我
從來沒有看過使用投影是最好或最有效率的例子. 不過, 這樣也不代表投影一無
是處. 我在這份課本裡不介紹投影的理由是, 學習 LPC 的人, 最好在碰上投影
以前, 先從此課本學得一些觀念, 並花上時間去熟悉這些觀念. 這樣一來, 我覺
得學習 LPC 的人會有能力決定是否要使用投影. 我會在以後的課本裡討論投影.
如果你經常使用很多的投影, 請別認為上面這段文字是針對你的批評. 我也曾經
看過投影有很多優秀的用途. 不過, 投影並不是一個完成工作的好方法, 所以投
影並不適合這份中階課本的目標.
我也刪掉了討論系統安全和物件導向程式設計的部份. 這兩者很明顯都是討論
mudlib 方面的題目. 不過很多人大概會反對我不討論物件導向程式設計的作法.
我決定把這個課題留到以後再說, 因為大多數區域設計者是為了創作而撰寫程式
碼, 而不是為了資訊理論. 在中階和基礎的課本裡, 我決定只在實際 LPC 程式
設計上可以直接應用的地方討論物件導向程式設計的理論. 對於想撰寫一個龐大
mudlib 的 LPC 老手而言, 理論可能要實用得多. 不過以這份課本的目標來說
, 討論物件導向程式設計只是個讓人打瞌睡的題目. 我計劃在下一份課本裡多討
論這個理論.
1.5 總結
LPC 不難學習. 雖然比不上其他大部分電腦語言所常做的工作, 令人驚異的是它
非常強大, 在建造 MUD 這種遊戲的工作上, 也沒其他語言比得上它. 對初學者
來說, 它讓你易於學習, 甚至在你還不知道在做什麼的時候, 就能寫出有用的物
件. 對中階的人來說, 它讓你的任何點子變成文字化的虛擬實境. 對高階的人來
說, 它的物件導向特點, 可以讓你建造一個 internet 上最受喜愛的遊戲. 你唯
一所受到的限制, 是你了解多少東西. 而進一步學習並不需要資訊學位.
Copyright (c) George Reese 1993
譯者: Spock @ FF 98.Jul.19.
第二章: LPMud driver
2.1 回顧基本的 driver/mudlib 間的互動
在基礎 LPC 課本裡, 你學到很多 mudlib 工作的方式, 尤其是關於你為了建造
區域所撰寫的物件. 而 mudlib 和 driver 間的互動討論得並不多. 不過, 你應
該知道 driver 做了以下的事:
1) 當一個物件第一次被載入記憶體, 原始模式 mud 的 driver 會呼叫
create(), 而精簡模式 mud 會呼叫 reset(). 創作的人使ꔠcreate() 或
reset() 給予物件初始值.
2) 每到遊戲管理者設定的週期, driver 呼叫 reset() 函式. 這樣讓物件能
重新產生怪物之類的東西. 請注意, 在精簡模式的 mud 中, 同一個函式不
但用於重新設定房間, 也用於設定初始值.
3) 任何時候, 一個活物件 (living object) 遇到另一個物件時, driver 呼
叫新遇到物件的 init() 函式. 這樣可以讓新遇到的物件透過 add_action()
外部函式 (efun) 給予活物件可以執行的命令, 同樣也可以執行其他的動作,
而這些動作是一個活物件碰到此一物件時所該發生的事.
4) driver 定義了一套稱為外部函式的函式, 在遊戲中所有的物件都可以使用
它們. 舉例來說, 常用的外部函式有: this_player(), this_object(),
write(), say(), 以此類推.
2.2 driver 週期 (cycle)
driver 是執行遊戲的 C 程式. 它的基本功能是接受外界的連線, 讓人能登錄
(login) 、解譯定義 LPC 物件和它們在遊戲中作用的 LPC 程式碼、接受使用
者的輸入並呼叫適當的 LPC 函式以配合事件發生. 它最簡單的要素就是, 它是
一個永不終止迴圈 (loop).
一旦遊戲啟動, 並且正確地執行功能 (以後會在高階 LPC 課本中討論啟動程序)
, driver 就進入一個迴圈. 除非合法呼叫 shutdown() 外部函式, 或碰上臭蟲
讓 driver 崩壞 (crash), 此迴圈不會終止. 一開始, driver 控制任何新進的
連線, 並把連線交給登錄物件 (login). 之後, driver 把所有使用者輸入的命
令放入一個命令表 (table of commands), 此時已是 driver 的最後一個週期.
在組合命令表之後, 所有從 driver 最後一個週期排定要送給連線的訊息, 就送
給使用者. 此時, driver 依序執行命令表中的命令, 並執行每個物件放在命令
表中的各套命令. driver 在週期結束時, 呼叫每一個有 heart_beat() 函式的
物件, 執行其中的 heart_beat() 函式. 最後, 執行所有等待的延遲呼叫
(call out). 本章不討論連線控制, 本章焦點放在 driver 如何控制使用者命令
、心跳 (heartbeat)、延遲呼叫.먊
2.3 使用者命令
如同 1.2 中所提, driver 在每個週期中, 把每一個使用者要執行的命令儲存
在命令表裡. 命令表裡頭有執行此命令的活物件名稱、給予活物件此一命令的物
件、要執行此命令時所執行的函式. driver 把輸入命令的物件當作是給予命令
者. 大多數的時候, 這就是 this_player() 所傳回的給予命令者.
driver 由有延遲命令的活物件表的頭端開始, 接著執行命令, 呼叫這些活物件
輸入的命令相關的函式, 並傳入給予命令者給函式的任何參數. 當 driver 由新
的活物件所給的命令開始時, 給予命令者變數就改為新的活物件, 這樣在命令開
始依序執行函式時, this_player() 外部函式才能傳回給予命令的物件.
來看看一個玩家的命令暫存區範例. 在一個叫做 Bozo 的玩家執行最後一個命令
時, 他輸入 "north" 和 "tell descartes 下次重新開機是什麼時候 ?".
"north" 命令與 Bozo 所在房間裡的 "Do_Move()" 函式相關 ("north" 命令由
此房間的 set_exits() 外部函式自動設定). "tell" 命令並沒有特別列在玩家
所可以使用的命令中, 而在玩家物件中有一個叫做 "cmd_hook()" 的函式, 比對
玩家可能輸入的命令.
當 driver 處理到 Bozo, 給予命令者的變數就設定為 Bozo 這個物件. 然後,
看到 Bozo 輸入 "north", 也看到與 "north" 相關的函式, 則 driver 呼叫
Bozo's_room->Do_Move(0) (Bozo 所在房間的 Do_Move() 函式). 因為 Bozo
只輸入 "north" 命令, 沒有加上參數, 所以用參數 0 傳入此函式. 此房間
平常會呼叫一些它需要的函式, 此時 this_player() 外部函式所傳回的物件
就是 Bozo. 最後, 此房間物件會呼叫 Bozo 中的 move_player(), 之後呼叫
move_object() 外部函式. 這個外部函式負責改變一個物件的環境.
當一個物件的環境改變時, 會刪除前一個環境中其他物件和前一個環境中對它
加上的可用命令. 刪除之後, driver 呼叫新環境和新環境中每一個物件的
init() 外部函式. 每一次呼叫 init() 時, Bozo 物件仍然是給予命令者.
所以此次移動所有的 add_action() 外部函式會加在 Bozo 身上. 完成所有的
呼叫後, 控制權從 move_object() 交給 Bozo 的 move_player() 區域函式
.. move_player() 將控制權交回給舊房間的 Do_Move(), Do_Move() 傳回 1
給 driver, 以表示此命令的動作完成. 如果 Do_move() 因為某些原因傳回
0, 則 driver 會對 Bozo 顯示 "什麼?" (或是你的 driver 所預設的錯誤命
令訊息).
一旦第一個命令傳回 1, driver 就繼續處理 Bozo 的第二個命令, 過程就跟
第一個一樣. 請注意, driver 把 "tell descartes 什麼時候重新開機 ?"
的 "descartes 什麼時候重新開機 ?" 當作參數傳給跟 tell 相關的函式. 這
個函式決定要如何處理這個參數. 這個命令之後傳回 1 或 0, driver 再繼
續處理下一個有延遲命令的活物件, 然後以同樣的步驟處理全部有延遲命令的
活物件, 執行它們的命令.
2.4 set_heart_beat() 和 call_out() 外部函式
一旦有延遲命令的物件其全部的命令執行完成後, driver 就繼續呼叫所有
driver 列為有心跳之物件中的 heart_beat() 函式. 只要一個物件以非零參數
呼叫 set_heart_beat() 外部函式 (視你的 driver 而定, 非零的數字也許很重
要, 但是在大多的情況下為整數 1 ), set_heart_beat() 外部函式把呼叫
set_heart_beat() 的物件加在有心跳物件的列表上. 如果你以 0 為參數呼叫
它, 它就把此物件從有心跳物件的表上刪除.
心跳在 mudlib 裡最常見的用途是治療玩家和怪物、執行戰鬥. 一旦 driver 處
理完命令列表, 它就開始看心跳列表, 呼叫表上每一個物件的 heart_beat().
所以舉例來說, 對玩家而言, driver 會呼叫玩家裡面的 heart_beat() 以執行
以下功能:
1) 讓玩家變老
2) 依照治療速率治療玩家.
3) 檢查四周是否有任何被人獵殺、正在獵殺人、或正在攻擊人的物件
4) 如果第三點成立, 開始攻擊.
5) 其他需要每秒鐘自動發生的事.
請注意, 有心跳的物件越多, mud 每個週期需要處理的時間也就越久. 有心跳的
物件已知是 mud 貪求 CPU 時間最主要的因素.
call_out() 外部函式用於執行不需要像心跳一樣常常發生、或只發生一次的計
時函式呼叫. 延遲呼叫 (call out) 讓你指定呼叫一個物件中的某個函式. 一般
延遲呼叫的公式為:
call_out( func, time, args );
第三個指定參數的參數並非必要. 第一個參數是一個字串, 代表被呼叫的函式名
稱. 第二個參數是經過幾秒之後才呼叫函式.
實際上來說, 當一個物件呼叫 call_out() 時, 它就被加到一個延遲呼叫的物件
表中, 此表中記有延遲呼叫的總延遲時間, 和欲呼叫的函式名稱. driver 的每
一個週期, 就會進行倒數, 直到呼叫函式的時間. 時間一到, driver 把此物件
從延遲呼叫表上刪除, 並執行呼叫延遲呼叫函式, 傳入原本延遲呼叫函式所指定
的參數.
如果你想在一個延遲呼叫執行前將其刪除, 你需要用 remove_call_out() 外部
函式, 傳入延遲呼叫的函式名稱. driver 會刪除下一次延遲呼叫的這個函式.
這表示如果同一個函式有一個以上的延遲呼叫, 就會出現模擬兩可的情況.
要讓一個延遲呼叫循環執行, 你必須在你延遲呼叫的函式中再使用 call_out()
外部函式, 因為 driver 執行完延遲呼叫後, 會自動把函式從延遲呼叫表中刪除.
舉例:
void foo() { call_out("hello", 10); }
void hello() { call_out("hello", 10); }
在 foo() 第一次被呼叫後, 每 10 秒呼叫 hello() 一次. 在此有幾件事要注
意. 第一, 你必須要小心, 確定你的延遲呼叫不會造成任何不正確的遞迴方式.
第二, 比較 set_heart_beat() 和 call_out() 所做的事有何不同.
set_heart_beat():
a) 將 this_object() 加在心跳物件列表中
b) 每一次 driver 週期呼叫 this_object() 中的 heart_beat() 函式
call_out():
a) 將 this_object() 、this_object() 中的函式名稱、延遲時間、一組參數,
加在延遲呼叫函式的列表上
b) 指定名稱的函式只呼叫一次, 在延遲一段指定的時間後, 執行此次呼叫
你可以看到, 延遲呼叫的 (a) 部分有很龐大的記憶總量 (memory overhead),
而心跳的 (b) 部分則有更龐大的 CPU 總量, 假設延遲呼叫的延遲時間要比一
次 driver 週期來得長.
很明顯, 你不會執行延遲一秒的延遲呼叫, 否則你會拖垮兩者. 同樣, 你也不希
望應該使用比一秒鐘長的延遲呼叫週期來達成的功能出現在心跳中. 我個人聽過
一種論點, 認為你應該多使用延遲呼叫. 我最常聽到的是, 單一呼叫或比十秒長
的週期最好使用延遲呼叫. 十秒以內的週期性呼叫, 你最好使用心跳. 我並不知
道這種說法是否正確, 但是我也不認為遵照這種作法會造成任何損害.
2.5 總結
基於更深入了解 LPC, 和了解 driver 和 mudlib 間的互動. 你現在應該知道
driver 執行函式的順序, 並了解有關 this_player()、add_action()、
move_object() 外部函式和 init() 區域函式更多的細節. 另外, 根據以往你
從基礎 LPC 課本學得的知識, 本章以 driver 如何控制延遲呼叫和心跳來介
紹它們. 你現在應該對延遲呼叫和心跳有基本的認識, 並可以在你的程式碼中
實驗一下.
Copyright (c) George Reese 1993
譯者: Spock @ FF 98.Jul.22.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.170.228.153
... <看更多>