GDScript 學(xué)習(xí)

https://docs.godotengine.org/zh_CN/latest/getting_started/scripting/gdscript/gdscript_basics.html

獲取對(duì)象

get_node("Button")
//or
$Button

按鈕點(diǎn)擊:

1.可以使用節(jié)點(diǎn)/信號(hào)/行為來進(jìn)行連接彻坛,也最簡單吶
2.可以使用代碼來執(zhí)行行為涉茧,更靈活多變

get_node("Button").connect("pressed", self, "_on_Button_pressed")

加參數(shù)
get_node("Button").connect("pressed", self, "_on_Button_pressed",['test'])


獲取幀數(shù)

func _process(delta):
    print(1/delta)

獲得物理引擎幀數(shù)

func _physics_process(delta):
    print(1/delta)

物理引擎幀數(shù)是固定的,游戲幀數(shù)是非固定的


創(chuàng)建和刪除節(jié)點(diǎn)

s = Sprite.new() # Create a new sprite!
add_child(s) 
//刪除
s.free()
//安全的刪除節(jié)點(diǎn)
s.queue_free()

實(shí)例化場(chǎng)景

加載場(chǎng)景

var scene = load("res://myscene.tscn")

預(yù)加載

var scene = preload("res://myscene.tscn")

創(chuàng)建場(chǎng)景的根結(jié)點(diǎn)

var node = scene.instance()
add_child(node)

代碼打包成類

支持圖標(biāo)功能

class_name ScriptName, "res://path/to/optional/icon.svg"

只有GDScript為每一個(gè)獨(dú)立的腳本創(chuàng)建全局變量


計(jì)時(shí)器

1.可以使用節(jié)點(diǎn)/信號(hào)/行為來進(jìn)行連接永脓,也最簡單吶
2.代碼

get_node("Timer").connect("timeout",self,"_on_Timer_timeout")

Signal 信號(hào) (事件)

創(chuàng)建

# Signal with no arguments
signal data_found
# Signal with two arguments
signal data_found_with_args(a, b)

發(fā)送

emit_signal("data_found", your_data)

接收 (代碼方式

notifier.connect("data_found", handler, "your_handler")

鏈接
1.可以使用節(jié)點(diǎn)/信號(hào)/行為來進(jìn)行連接敌呈,也最簡單吶
2.代碼

get_node("target").connect("custom_signal",self,"_on_TimerTest_custom_signal")

https://docs.godotengine.org/zh_CN/latest/getting_started/scripting/gdscript/gdscript_basics.html?highlight=match#match


內(nèi)置類型

內(nèi)置類型是堆棧分配的贸宏。它們作為值傳遞造寝。這意味著在每次賦值或?qū)①x值作為參數(shù)傳遞給函數(shù)時(shí)都會(huì)創(chuàng)建一個(gè)副本。唯一的例外是 數(shù)組 s 和 字典 吭练,它們是通過引用傳遞的诫龙,所以它們是共享的。(不是像 PoolArrays PoolByteArray 那樣线脚,這些也是作為值傳遞的赐稽,所以在決定使用哪個(gè)時(shí)要考慮這個(gè)!)

`null` 是一個(gè)空數(shù)據(jù)類型,不包含任何信息浑侥,不能分配任何其他值。
`bool` 布爾數(shù)據(jù)類型只能包含 true 或 false晰绎。
`int` 整數(shù)數(shù)據(jù)類型只能包含整數(shù)(包括負(fù)數(shù)和正數(shù))寓落。
`float` 用于包含浮點(diǎn)值(實(shí)數(shù))。
`String` Unicode格式 中的字符序列荞下。字符串可以包含 標(biāo)準(zhǔn)C轉(zhuǎn)義序列 伶选。GDScript支持 格式化字符串即printf功能。

內(nèi)置向量類型

`Vector2d` 2D向量類型包含 x 和 y 字段尖昏,也可以像數(shù)組一樣訪問仰税。
`Rect2d` 二維矩形類型包含兩個(gè)向量字段: position 和 size〕樗撸或者包含一個(gè) end 字段陨簇,該字段是 position+size。
`Vector3d` 3D向量類型包含 x , y 與 z 字段迹淌,也能夠像數(shù)組一樣訪問河绽。
`Transform2D` 用于二維變換的3x2矩陣。
`Plane` 3D平面類型的標(biāo)準(zhǔn)形式包含一個(gè) normal 法向量字段以及一個(gè) d 距離標(biāo)量唉窃。
`Quat` 四元數(shù)是一種用于表示3D旋轉(zhuǎn)的數(shù)據(jù)類型耙饰。它對(duì)于內(nèi)插旋轉(zhuǎn)很有用。
`AABB` 軸向包圍框(或3D框)包含兩個(gè)向量字段: position 和 size纹份」豆颍或者包含一個(gè) end 字段,該字段是 position+size蔓涧。
`Basic` 3×3矩陣被用于3D旋轉(zhuǎn)與縮放件已,其包含3個(gè)向量字段(x, y 和 z) 并且可以像3D向量組那樣訪問。
`Transform` 三維變換包含一個(gè)基字段 basis 和一個(gè)向量字段 origin蠢笋。

引擎內(nèi)置類型

`Color` 顏色數(shù)據(jù)類型包含 r, g, b, 和 a 字段拨齐。它也可以作為 h, s, 和 v 來訪問色相/飽和度/值。
`NodePath` 編譯路徑昨寞,到一個(gè)主要用在場(chǎng)景系統(tǒng)中的節(jié)點(diǎn)瞻惋。它可以很容易地分配給字符串厦滤,或用字符串賦值。
`RID` 資源ID(RID)歼狼。服務(wù)器使用通用的RID來引用不透明數(shù)據(jù)掏导。
`Object` 任何非內(nèi)置類型的基類。

容器內(nèi)置類型

`Array` 任意對(duì)象類型的泛型序列羽峰,包括其他數(shù)組或字典趟咆。數(shù)組可以動(dòng)態(tài)調(diào)整大小。數(shù)組從索引 0 開始建立索引梅屉。從Godot 2.1開始值纱,索引可能是負(fù)的,就像在Python中一樣坯汤,從尾部開始計(jì)數(shù)虐唠。
`Dictionary` 包含唯一關(guān)鍵字引用的值的關(guān)聯(lián)容器。

變量

類型在變量聲明中使用“:”(冒號(hào))符號(hào)在變量名后面指定惰聂,后面是類型疆偿。

var my_vector2: Vector2
var my_node: Node = Sprite.new()

如果在聲明中初始化了變量,則可以推斷類型搓幌,因此可以省略類型名稱:

var my_vector2 :=  Vector2() # 'my_vector2' is of type 'Vector2'
var my_node := Sprite.new() # 'my_node' is of type 'Sprite'

轉(zhuǎn)換

分配給類型化變量的值必須具有兼容的類型杆故。如果需要強(qiáng)制某個(gè)值為某種類型,特別是對(duì)象類型溉愁,則可以使用類型轉(zhuǎn)換操作符 as处铛。
如果該值不是子類型,則強(qiáng)制轉(zhuǎn)換操作將導(dǎo)致“null”值叉钥。

var my_node2D: Node2D
my_node2D = $Sprite as Node2D # Works since Sprite is a subtype of Node2D

var my_node2D: Node2D
my_node2D = $Button # Results in 'null' since a Button is not a subtype of Node2D

對(duì)于內(nèi)置類型罢缸,如果可能,它們將被強(qiáng)制轉(zhuǎn)換投队,否則引擎將引發(fā)錯(cuò)誤枫疆。

var my_int: int
my_int = "123" as int # The string can be converted to int
my_int = Vector2() as int # A Vector2 can't be converted to int, this will cause an error

在與樹交互時(shí),類型轉(zhuǎn)換還有助于擁有更好的類型安全變量:

# will infer the variable to be of type Sprite:
var my_sprite := $Character as Sprite

# will fail if $AnimPlayer is not an AnimationPlayer, even if it has the method 'play()':
($AnimPlayer as AnimationPlayer).play("walk")

常量

常量與變量類似敷鸦,但必須是常量或常量表達(dá)式息楔,并且必須在初始化時(shí)分配。


函數(shù)

可以定義參數(shù)類型扒披,默認(rèn)值以及返回類型

func my_function(int_arg := 42, String_arg := "string") -> int:
    return 0

引用函數(shù)

與Python相反值依,函數(shù)不是GDScript中的第一類對(duì)象。這意味著它們不能存儲(chǔ)在變量中碟案,不能作為參數(shù)傳遞給另一個(gè)函數(shù)愿险,也不能從其他函數(shù)返回。這是出于性能原因价说。
若要在運(yùn)行時(shí)按名稱引用一個(gè)函數(shù)(例如辆亏,將其存儲(chǔ)在一個(gè)變量中风秤,或?qū)⑵渥鳛閰?shù)傳遞給另一個(gè)函數(shù)),必須使用 call 或funcref 幫助器:

# Call a function by name in one step.
my_node.call("my_function", args)

# Store a function reference.
var my_func = funcref(my_node, "my_function")
# Call stored function reference.
my_func.call_func(args)

記住扮叨,像 _init 這樣的默認(rèn)函數(shù)缤弦,以及 _enter_tree , _exit_tree , _process , _physics_process 等大多數(shù)通知都是在所有基類中自動(dòng)調(diào)用的。因此彻磁,當(dāng)以某種方式重載它們時(shí)碍沐,只需要顯式地調(diào)用函數(shù)。


靜態(tài)函數(shù)

函數(shù)可以聲明為靜態(tài)的衷蜓。當(dāng)一個(gè)函數(shù)是靜態(tài)的累提,它不能訪問實(shí)例成員變量或 self 。這主要用于幫助助手函數(shù)庫:

static func sum2(a, b):
    return a + b

條件

var x = [value] if [expression] else [value]
y += 3 if y < 10 else -1

for

與python類似


tool 工具模式

默認(rèn)情況下恍箭,腳本不在編輯器中運(yùn)行刻恭,只能更改導(dǎo)出的屬性。在某些情況下扯夭,確實(shí)希望在編輯器中運(yùn)行腳本(只要它們不執(zhí)行游戲代碼或手動(dòng)避免那樣做)。為此鞍匾,可以用 tool 關(guān)鍵字并將它放在文件的頂部:

func _process(delta):
    if Engine.editor_hint:
        rotation_degrees += 180 * delta

https://docs.godotengine.org/zh_CN/latest/tutorials/misc/running_code_in_the_editor.html?highlight=tool


自定義信號(hào)

signal 信號(hào)函數(shù)名
signal 信號(hào)函數(shù)名(傳遞參數(shù))
https://docs.godotengine.org/zh_CN/latest/getting_started/step_by_step/signals.html?highlight=signal


onready 后置初始化

當(dāng)使用節(jié)點(diǎn)時(shí)交洗,通常希望在變量中保留對(duì)場(chǎng)景部分的引用。由于場(chǎng)景只允許在進(jìn)入活動(dòng)場(chǎng)景樹時(shí)配置橡淑,所以子節(jié)點(diǎn)只能在 Node._ready() 準(zhǔn)備后獲得构拳。

var my_label
func _ready():
    my_label = get_node("MyLabel")

等同于

onready var my_label = get_node("MyLabel")

https://docs.godotengine.org/zh_CN/latest/getting_started/scripting/gdscript/gdscript_basics.html?highlight=onready


無效數(shù)與無窮大

NAN 無效數(shù)
INF 無窮大


setter 和 getter

當(dāng) 變量 的值需要被 外部的 源(即不是來自類中的本地用法)修改時(shí),必須調(diào)用 setter 函數(shù)(上面的 setterfunc )梁棠。 這發(fā)生在值 改變之前 置森。必須用 * setter * 來設(shè)置新值。 反之亦然符糊,當(dāng)訪問 變量 時(shí)凫海,必須用 *getter * 函數(shù)(上面的 getterfunc ) 返回 所需的值。 下面是一個(gè)示例:

var variable = value setget setterfunc, getterfunc

var myvar setget my_var_set, my_var_get

func my_var_set(new_value):
    my_var = new_value

func my_var_get():
    return my_var # Getter must return a value.


setter 或者 getter 函數(shù)都可省略:

# Only a setter.
var my_var = 5 setget myvar_set
# Only a getter (note the comma).
var my_var = 5 setget ,myvar_get

本地 訪問不需要觸發(fā)setter和getter

func _init():
    # Does not trigger setter/getter.
    my_integer = 5
    print(my_integer)

    # Does trigger setter/getter.
    self.my_integer = 5
    print(self.my_integer)

match語法

刪減后的switch
常數(shù)

match x:
    1:
        print("We are number one!")
    2:
        print("Two are better than one!")
    "test":
        print("Oh snap! It's a string!")

變量類型

match typeof(x):
    TYPE_REAL:
        print("float")
    TYPE_STRING:
        print("text")
    TYPE_ARRAY:
        print("array")

通配符模式

match x:
    1:
        print("It's one!")
    2:
        print("It's one times two!")
    _:
        print("It's not 1 or 2. I don't care tbh.")

綁定模式
綁定模式引入了一個(gè)新變量男娄。與通配符模式類似行贪,它匹配所有內(nèi)容,并為該值提供一個(gè)名稱模闲。它在數(shù)組和字典模式中特別有用建瘫。

match x:
    1:
        print("It's one!")
    2:
        print("It's one times two!")
    var new_var:
        print("It's not 1 or 2, it's ", new_var)

數(shù)組模式

match x:
    []:
        print("Empty array")
    [1, 3, "test", null]:
        print("Very specific array")
    [var start, _, "test"]:
        print("First element is ", start, ", and the last is \"test\"")
    [42, ..]:
        print("Open ended array")

字典模式

match x:
    {}:
        print("Empty dict")
    {"name": "Dennis"}:
        print("The name is Dennis")
    {"name": "Dennis", "age": var age}:
        print("Dennis is ", age, " years old.")
    {"name", "age"}:
        print("Has a name and an age, but it's not Dennis :(")
    {"key": "godotisawesome", ..}:
        print("I only checked for one entry and ignored the rest")

多重模式:

match x:
    1, 2, 3:
        print("It's 1 - 3")
    "Sword", "Splash potion", "Fist":
        print("Yep, you've taken damage")

https://docs.godotengine.org/zh_CN/latest/getting_started/scripting/gdscript/gdscript_basics.html?highlight=match#match


繼承

不支持多繼承

extends SomeClass

func _init(args).(parent_args):
   pass

func _init(e=null, m=null).(e):
    # Do something with 'e'.
    message = m

func _init().(5):
    pass

編輯面板對(duì)接變量 export

定義一個(gè)初始值
export var number = 5
需要輸入整數(shù)值
export(int) var number
需要給予指定的類型
export(Texture) var character_face
export(PackedScene) var scene_file
數(shù)組,獲得列表中對(duì)應(yīng)的索引值
export(int, "Warrior", "Magician", "Thief") var character_class
數(shù)組尸折,獲得列表中對(duì)應(yīng)的字符串
export(String, "Rebecca", "Mary", "Leah") var character_name
枚舉

enum NamedEnum {THING_1, THING_2, ANOTHER_THING = -1}
export (NamedEnum) var x

獲得文件路徑 (默認(rèn)res下
export(String, FILE) var f
獲得文件夾路徑 (默認(rèn)res下
export(String, DIR) var f
獲得txt文件路徑 (默認(rèn)res下
export(String, FILE, "*.txt") var f
獲得圖片路徑 (默認(rèn)項(xiàng)目文件夾下
export(String, FILE, GLOBAL, "*.png") var tool_image
獲得文件夾路徑 (默認(rèn)項(xiàng)目文件夾下
export(String, DIR, GLOBAL) var tool_dir

多行文本
export(String, MULTILINE) var text
輸入0~20的整數(shù)
export(int, 20) var i
輸入-10~20的整數(shù)
export(int, -10, 20) var j
輸入-10~20的浮點(diǎn)數(shù)啰脚,步長為0.2
export(float, -10, 20, 0.2) var k
獲得100~1000的以e為底的指數(shù)值,步長為20
export(float, EXP, 100, 1000, 20) var l
獲得浮點(diǎn)數(shù)以EASE運(yùn)動(dòng)函數(shù)為基準(zhǔn)的值??
export(float, EASE) var transition_speed

獲取顏色值
export(Color, RGB) var col
獲取顏色值 (支持透明
export(Color, RGBA) var col

位操作值
export(int, FLAGS) var spell_elements = defValue
export(int, FLAGS, "Fire", "Water", "Earth", "Wind") var spell_elements = 0

獲取數(shù)組

export var a = [1, 2, 3]
export(Array, int) var ints = [1,2,3]

數(shù)組值
export(Array, int, "Red", "Green", "Blue") var enums = [2, 1, 0]
多維數(shù)組
export(Array, Array, float) var two_dimensional = [[1, 2], [3, 4]]
可變數(shù)組

export(Array) var b
export(Array, PackedScene) var scenes
export var vector3s = PoolVector3Array()
export var strings = PoolStringArray()

遺憾的是下面代碼c=b或者c=a实夹,a怎么更改橄浓,都不會(huì)影響編輯器下的c, 變量只可以用常量來初始化數(shù)值
export(int,10,20)var a=0 var b = a+5 export(int,10,20)var c=a

內(nèi)存管理

如果一個(gè)類繼承自 Reference , 則實(shí)例將在不再使用時(shí)被自動(dòng)釋放粒梦。 沒有垃圾收集器,只有引用計(jì)數(shù)贮配。 默認(rèn)情況下谍倦,所有未定義繼承的類都會(huì)擴(kuò)展 Reference 。 如果不希望這樣泪勒,那么類必須手動(dòng)繼承 Object 并且必須調(diào)用 instance.free()昼蛀。 為了避免無法釋放的引用循環(huán),一個(gè) weakref 函數(shù)被用來來創(chuàng)建弱引用圆存。

或者,當(dāng)不使用引用時(shí)夫植,可以使用 is_instance_valid(instance) 來檢查對(duì)象是否已被釋放油讯。


yield 協(xié)同

GDScript通過 yield 內(nèi)置函數(shù)支持 coroutines 详民。調(diào)用 yield 將立即從當(dāng)前函數(shù)返回,返回值是當(dāng)前函數(shù)的凍結(jié)狀態(tài)陌兑。在結(jié)果對(duì)象上調(diào)用 resume 將會(huì)繼續(xù)執(zhí)行,并返回函數(shù)返回的任何內(nèi)容兔综。一旦恢復(fù),狀態(tài)對(duì)象就變得無效软驰。下面是一個(gè)示例:

func my_func():
   print("Hello")
   yield()
   print("world")

func _ready():
    var y = my_func()
    # Function state saved in 'y'.
    print("my dear")
    y.resume()
    # 'y' resumed and is now an invalid state.

打印

Hello
my dear
world
func my_func():
   print("Hello")
   print(yield())
   return "cheers!"

func _ready():
    var y = my_func()
    # Function state saved in 'y'.
    print(y.resume("world"))
    # 'y' resumed and is now an invalid state.
Hello
world
cheers!

使用 yield 的真正強(qiáng)度是在與信號(hào)結(jié)合時(shí)涧窒。 yield 可以接受兩個(gè)參數(shù),一個(gè)物體和一個(gè)信號(hào)锭亏。當(dāng)接收到信號(hào)時(shí)纠吴,執(zhí)行將重新開始贰镣。下面是一些示例:

下一幀執(zhí)行
yield(get_tree(), "idle_frame")

動(dòng)畫播放完畢后執(zhí)行
yield(get_node("AnimationPlayer"), "finished")

等待5秒執(zhí)行
yield(get_tree().create_timer(5.0), "timeout")

協(xié)同程序本身在轉(zhuǎn)換到無效狀態(tài)時(shí)使用 completed 信號(hào),my_func 將只在按鈕被按下后繼續(xù)執(zhí)行碑隆。

func my_func():
    yield(button_func(), "completed")
    print("All buttons were pressed, hurray!")

func button_func():
    yield($Button0, "pressed")
    yield($Button1, "pressed")

Assert 斷言

assert 關(guān)鍵字可以用來檢查調(diào)試構(gòu)建中的條件。這些斷言在非調(diào)試生成中被忽略休玩。

# Check that 'i' is 0.
assert(i == 0)

鴨子類型

如果擊中大巖石的對(duì)象有一個(gè) smash() 方法,它將被調(diào)用拴疤。不需要考慮繼承或多態(tài)性永部。動(dòng)態(tài)類型化語言只關(guān)心具有所需方法或成員的實(shí)例呐矾,而不關(guān)心它繼承什么類型。鴨子類型的定義應(yīng)該使這一點(diǎn)更清楚:
“當(dāng)我看到一只鳥像鴨子一樣走路组橄,像鴨子一樣游泳,像鴨子一樣呱呱叫時(shí)玉工,我就叫它鴨子”
有可能被擊中的對(duì)象沒有smash()函數(shù)淘菩。一些動(dòng)態(tài)類型語言在方法調(diào)用不存在時(shí)簡單地忽略它(如Objective C),但是GDScript更嚴(yán)格狭郑,因此需要檢查函數(shù)是否存在:

func _on_object_hit(object):
    if object.has_method("smash"):
        object.smash()

編程風(fēng)格

https://docs.godotengine.org/zh_CN/latest/getting_started/scripting/gdscript/gdscript_styleguide.html


類的引用

如果已經(jīng)寫了

class_name Rifle

就沒有必要進(jìn)行常量引用了

不需要
const Rifle = preload('res://player/weapons/Rifle.gd')

警告與忽略

https://docs.godotengine.org/zh_CN/latest/getting_started/scripting/gdscript/static_typing.html#warning-system


禁止的寫法

https://docs.godotengine.org/zh_CN/latest/getting_started/scripting/gdscript/static_typing.html#cases-where-you-cant-specify-types


格式化字符串

同py寫法

# Define a format string with placeholder '%s'
var format_string = "We're waiting for %s."

# Using the '%' operator, the placeholder is replaced with the desired value
var actual_string = format_string % "Godot"

print(actual_string)
# Output: "We're waiting for Godot."

另一種寫法

# Define a format string
var format_string = "We're waiting for {str}"

# Using the 'format' method, replace the 'str' placeholder
var actual_string = format_string.format({"str": "Godot"})

print(actual_string)
# Output: "We're waiting for Godot"

多占位符和py寫法不一樣愿阐,后面跟數(shù)組

var format_string = "%s was reluctant to learn %s, but now he enjoys it."
var actual_string = format_string % ["Estragon", "GDScript"]

print(actual_string)
# Output: "Estragon was reluctant to learn GDScript, but now he enjoys it."

數(shù)字動(dòng)態(tài)填充

var format_string = "%*.*f" #%7.3f
# Pad to length of 7, round to 3 decimal places:
print(format_string % [7, 3, 8.8888])
# Output: "  8.889"
# 2 leading spaces

print("%0*d" % [2, 3]) #%02d
#output: "03"

字符串

"Hi, {name} v{version}!".format({"name":"Godette", "version":"3.0"})    
"Hi, {0} v{1}!".format({"0":"Godette", "1":"3.0"})
"Hi, {0} v{version}!".format({"0":"Godette", "version":"3.0"})
"Hi, {name} v{version}!".format([["version","3.0"], ["name","Godette"]])
"Hi, {0} v{1}!".format(["Godette","3.0"])
"Hi, {name} v{0}!".format([3.0, ["name","Godette"]])
"Hi, {} v{}!".format(["Godette", 3.0], "{}")
"Hi, {0} v{1}".format(["Godette", "3.0"], "{_}")
"Hi, 0% v1%".format(["Godette", "3.0"], "_%")
"Hi, %0 v%1".format(["Godette", "3.0"], "%_")

輸出
Hi, Godette v3.0!
混合用法

"Hi, {0} v{version}".format({0:"Godette", "version":"%0.2f" % 3.114})
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末趾疚,一起剝皮案震驚了整個(gè)濱河市糙麦,隨后出現(xiàn)的幾起案子丛肮,更是在濱河造成了極大的恐慌,老刑警劉巖焚廊,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咆瘟,死亡現(xiàn)場(chǎng)離奇詭異诽里,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)灸眼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門焰宣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人盈罐,你說我怎么就攤上這事闸天。” “怎么了湾揽?”我有些...
    開封第一講書人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵库物,是天一觀的道長贷帮。 經(jīng)常有香客問我,道長民晒,這世上最難降的妖魔是什么潜必? 我笑而不...
    開封第一講書人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任沃但,我火速辦了婚禮,結(jié)果婚禮上垂攘,老公的妹妹穿的比我還像新娘淤刃。我一直安慰自己钝凶,他們只是感情好唁影,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開白布掂名。 她就那樣靜靜地躺著,像睡著了一般饺蔑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上猾警,一...
    開封第一講書人閱讀 49,929評(píng)論 1 290
  • 那天发皿,我揣著相機(jī)與錄音,去河邊找鬼惶室。 笑死玄货,一個(gè)胖子當(dāng)著我的面吹牛松捉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播隘世,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼丙者,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起滥沫,我...
    開封第一講書人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤键俱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后编振,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡臀玄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了健无。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡叠穆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出硼被,到底是詐尸還是另有隱情渗磅,我是刑警寧澤嚷硫,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布论巍,位于F島的核電站风响,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鞋怀。R本人自食惡果不足惜持搜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一葫盼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贫导,春花似錦、人聲如沸闺金。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至舔哪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間尸红,已是汗流浹背刹泄。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留特石,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓墩莫,卻偏偏與公主長得像逞敷,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子推捐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容