大屏幕和折疊屏: 讓您的 Android 游戲登上更大的舞臺(tái)

作者 / Ben Gable, Partner Developer Advocate

讓我們繼續(xù)《讓您的應(yīng)用適配更多屏幕》中的話(huà)題扼倘,不過(guò)今天會(huì)更專(zhuān)注于游戲的范疇坟比。在不久前的 GDC?上,我們很高興能和大家分享多樣化的設(shè)備為游戲體驗(yàn)帶來(lái)的可能性酥泞。這些年我們親歷了諸多移動(dòng)硬件的演進(jìn),如 3D 顯示器和高分辨率屏幕等褐缠,也因?yàn)檫@些演進(jìn)蹂匹,讓我們?cè)趹?yīng)用商店中看到越來(lái)越多新穎的游戲出現(xiàn),讓玩家們?cè)诟两漠?huà)面和游戲體驗(yàn)中流連忘返蚤认。

如果能在更大的屏幕上體驗(yàn)的話(huà)米苹,這些游戲也會(huì)擁有更好的視覺(jué)效果。這意味著開(kāi)發(fā)者可以通過(guò)針對(duì)不同的外形和更大的顯示設(shè)備優(yōu)化游戲砰琢,來(lái)吸引正在快速增長(zhǎng)的大量受眾群體蘸嘶。

如果您在應(yīng)用商店上架了游戲良瞧,那它可能已經(jīng)可以在 Chrome OS 上運(yùn)行了。Chromebook 在一個(gè)容器中運(yùn)行完整版的 Android 框架训唱,因此游戲的體驗(yàn)就像在 Android 設(shè)備上運(yùn)行一樣莺褒。但這并不是終點(diǎn),通過(guò)進(jìn)行一些調(diào)整雪情,開(kāi)發(fā)者可以進(jìn)一步針對(duì)性地優(yōu)化游戲遵岩,使其在大屏幕設(shè)備上擁有最佳的視覺(jué)效果和運(yùn)行性能,并為可折疊設(shè)備上的最佳游戲體驗(yàn)奠定基礎(chǔ)巡通。

GDC 期間我們的很多演講都涉及到了這個(gè)話(huà)題尘执。這里我們?yōu)槟到y(tǒng)地整理了一遍,并給出了能讓您立刻上手的代碼示例和開(kāi)發(fā)技巧宴凉。

大屏幕游戲的常見(jiàn)問(wèn)題

作為游戲開(kāi)發(fā)者誊锭,您當(dāng)然想要在每臺(tái)設(shè)備上都提供最佳的游戲體驗(yàn)——無(wú)論用戶(hù)是在使用豎屏模式,還是使用鍵鼠弥锄,甚至在可折疊設(shè)備 (擁有更多可切換的分辨率和寬高比配置) 上進(jìn)行游戲丧靡。通過(guò)遵循 Android 最佳實(shí)踐,開(kāi)發(fā)者可以在所有這些使用場(chǎng)景中都提供出色的體驗(yàn)籽暇。

在 APK 中温治,適配的所有操作都是從配置 (configuration) 的變動(dòng)開(kāi)始。系統(tǒng)在檢測(cè)到設(shè)備配置的變動(dòng)后戒悠,會(huì)自動(dòng)重啟您的 Activity 并在這個(gè)過(guò)程中調(diào)用適配新設(shè)備配置的游戲資源熬荆,從而確保您的游戲在該配置下達(dá)到理想的效果。

在默認(rèn)情況下绸狐,系統(tǒng)將在重新啟動(dòng) Activity 之前通過(guò)調(diào)用 onSaveInstanceState 自動(dòng)處理配置更改卤恳。但對(duì)于素材量很大的游戲來(lái)說(shuō),這一過(guò)程可能需要更長(zhǎng)的時(shí)間寒矿,尤其是在涉及到狀態(tài)數(shù)據(jù)的序列化和反序列化時(shí)突琳,可能會(huì)因?yàn)榇罅康膬?nèi)存消耗而出現(xiàn)遲滯現(xiàn)象,因此您可能需要自己對(duì)這一步操作進(jìn)行針對(duì)性的改進(jìn)符相,比如讓系統(tǒng)在特定的配置變化之后不重啟 Activity拆融,而是調(diào)用 onConfigurationChanged 方法讓您自行處理適配細(xì)節(jié):?

public void onConfigurationChanged(Configuration newConfig) {

? ? //Scale UI

? ? //Toggle control scheme

? ? //Adjust orientation

? ? //etc

}

進(jìn)一步了解運(yùn)行時(shí)變更,以及狀態(tài)恢復(fù)

https://developer.android.google.cn/guide/topics/resources/runtime-changes.html

屏幕和窗口管理

在 Chromebook 和三星 DeX 等設(shè)備上主巍,游戲默認(rèn)在窗口模式中啟動(dòng)冠息,用戶(hù)可以動(dòng)態(tài)調(diào)整畫(huà)面大小孕索;在三星 Galaxy Fold 等設(shè)備上逛艰,當(dāng)用戶(hù)展開(kāi)設(shè)備時(shí),屏幕尺寸和寬高比將會(huì)改變搞旭。這些設(shè)備配置變化的場(chǎng)景都可以觸發(fā) onConfigurationChanged 事件散怖。

您可以在 manifest 中這樣指定需要監(jiān)聽(tīng)的配置變動(dòng)項(xiàng)目:

<activity android:name=".MyActivity"

? android:configChanges="screenSize|orientation"

? android:label="@string/app_name">

正如前文所述菇绵,在游戲運(yùn)行時(shí)如果發(fā)生配置更改,默認(rèn)情況下系統(tǒng)會(huì)關(guān)閉 Activity 然后將其重新啟動(dòng)镇眷,但如果您使用 android:configChanges 屬性聲明了需要監(jiān)聽(tīng)的配置咬最,將會(huì)阻止 Activity 重新啟動(dòng)。這時(shí) Activity 反而會(huì)保持運(yùn)行狀態(tài)欠动,并且系統(tǒng)會(huì)調(diào)用其 onConfigurationChanged() 方法永乌。如此一來(lái),您就可以定制化地處理任何變化了具伍。例如翅雏,您可以縮放 OpenGL 內(nèi)容以匹配新的分辨率或?qū)捀弑龋乐?UI 元素被畫(huà)面裁切人芽。

比如當(dāng)用戶(hù)動(dòng)態(tài)調(diào)節(jié)畫(huà)面大小時(shí):

public void onConfigurationChanged(Configuration newConfig) {

? //Get native surface size

? //NativeActivity.mLastContent[X/Y/Width/Height]()

? //findViewById(android.R.id.content).get[Width/Height]()

}

有一點(diǎn)需要牢記望几,那就是每次畫(huà)面尺寸發(fā)生變化時(shí),輸入?yún)^(qū)域也會(huì)發(fā)生變化萤厅。如果您的游戲打算保持全屏運(yùn)行橄抹,或者您需要在修 bug 時(shí)快速略過(guò)配置更改問(wèn)題,則只需在 manifest 中將 resizableActivity 設(shè)置為 false 即可惕味。這一操作將阻止用戶(hù)手動(dòng)調(diào)整畫(huà)面大小楼誓,但它也會(huì)阻止分屏模式 (split-screen view),因此請(qǐng)謹(jǐn)慎使用赦拘,以避免影響玩家體驗(yàn)慌随。

<activity android:name=".MyActivity"

? android:resizeableActivity="false"

? android:label="@string/app_name">

△ 將 resizableActivity 設(shè)置為 false 可以強(qiáng)制游戲處于全屏模式

設(shè)備方向

在智能手機(jī)上,屏幕方向默認(rèn)為縱向 (豎屏)躺同。而在其他設(shè)備上,默認(rèn)值則有可能是橫向丸逸。請(qǐng)?jiān)?manifest 中指定您支持的傳感器方向蹋艺,讓系統(tǒng)處理它們,從而確保您的游戲不會(huì)意外翻轉(zhuǎn)黄刚。

<activity … android:screenOrientation=”...”>

或者捎谨,如果您打算在 onConfigurationChanged() 中動(dòng)態(tài)處理方向,請(qǐng)?jiān)诖a中使用 Display.getRotation() 獲取當(dāng)前屏幕方向憔维。

Display.getRotation()

△?屏幕方向的數(shù)值可能會(huì)在不同的設(shè)備上互換涛救,具體取決于該硬件默認(rèn)的設(shè)備方向值,請(qǐng)一定要在測(cè)試中考慮到這一點(diǎn)

設(shè)備分辨率

在解決了上面兩個(gè)問(wèn)題后业扒,您還需要考慮用戶(hù)設(shè)備的分辨率检吆。較大的屏幕需要更高分辨率的素材資源,因此您可以使用應(yīng)用束?(App Bundle) 來(lái)為不同的設(shè)備配置分割打包游戲的代碼和資源程储。這樣蹭沛,Google Play 就會(huì)為游戲所在的設(shè)備提供正確的資源——例如臂寝,為較小屏幕的設(shè)備略去超高分辨率素材。這將為用戶(hù)節(jié)省寶貴的下載空間摊灭,同時(shí)也免去了為不同像素密度的屏幕維護(hù)多個(gè) APK 的麻煩咆贬。

△ App Bundle 可以針對(duì)不同配置或功能分割打包代碼和資源,使得 Play Store 能根據(jù)用戶(hù)的實(shí)際設(shè)備進(jìn)行動(dòng)態(tài)交付

另外帚呼,更多的屏幕像素也可以為畫(huà)面和界面設(shè)計(jì)賦予更大的靈活性掏缎。當(dāng)用戶(hù)在更大的屏幕上玩游戲時(shí),他們可能會(huì)坐得離屏幕更遠(yuǎn)煤杀,這時(shí)您需要考慮擴(kuò)展御毅、添加或更改畫(huà)面 / 界面元素,以確保屏幕上的所有內(nèi)容都清晰可辨怜珍。

輸入設(shè)備

越來(lái)越多的手機(jī)游戲開(kāi)始為玩家提供如同臺(tái)式機(jī)和主機(jī)一般的體驗(yàn)端蛆。所以,越來(lái)越多的 Android 設(shè)備開(kāi)始支持各種不同的輸入方式酥泛,包括鍵鼠和手柄等等今豆。盡管 Android 提供了支持鍵盤(pán)、鼠標(biāo)和手柄的 API柔袁,但想要這些額外的輸入方式真正可用呆躲,還是需要游戲開(kāi)發(fā)者們更多地理解玩家的游玩訴求。比如玩家可能在沒(méi)有觸摸屏的 Chromebook 上用鍵盤(pán)玩游戲捶索,或者打算插上鼠標(biāo)來(lái)玩自己最喜歡的第一人稱(chēng)射擊游戲插掂,這些時(shí)候如果玩家發(fā)現(xiàn)自己期待的操作方式?jīng)]有被游戲支持,失望之情也就不難理解了腥例。

另外辅甥,許多新設(shè)備也支持在使用時(shí)動(dòng)態(tài)切換配置,例如從折疊模式轉(zhuǎn)換到平板電腦模式燎竖。想要支持這些場(chǎng)景璃弄,最佳的方法是檢測(cè)設(shè)備上可用的硬件,以便為玩家提供最佳體驗(yàn)构回。

要做到這一點(diǎn)夏块,還是要從 android:configChanges 開(kāi)始。例如檢測(cè)鍵盤(pán)的連接:


然后纤掸,您可以在啟動(dòng)時(shí)或在配置更改時(shí)查詢(xún) InputManager脐供,并根據(jù)觸摸屏或者鍵盤(pán)的可用與否來(lái)切換控制方案。另外借跪,當(dāng)從觸摸控制方案切換成鍵盤(pán)控制方案時(shí)政己,即使 InputManager 說(shuō)鍵盤(pán)可用,您也需要進(jìn)一步確保鍵盤(pán)真的可用?(比如在畫(huà)面上提示用戶(hù) "按任意鍵繼續(xù)")垦梆。畢竟匹颤,用戶(hù)這時(shí)用的可能是一臺(tái)平板電腦模式下的 Chromebook仅孩。

△ 切換操作模式時(shí),一個(gè)推薦的做法是暫停游戲并讓用戶(hù)使用對(duì)應(yīng)的輸入設(shè)備進(jìn)行一次確認(rèn)操作

如果您是在游戲做完后才打算支持鍵盤(pán)印蓖,請(qǐng)考慮實(shí)現(xiàn)下面的功能辽慕,這樣可以大幅提高可用性和完成度:

> 技能鍵綁定

>?WASD / 方向鍵移動(dòng)

>?菜單導(dǎo)航

>?Enter 鍵輸入

>?Tab 鍵切換 (依游戲所需)

>?上下翻頁(yè)鍵功能

>?返回鍵

>?自定義鍵位映射

還有,別忘記使用鼠標(biāo)的玩家——特別是在第一人稱(chēng)射擊游戲或第三人稱(chēng)游戲里赦肃。

public void onClick(View view) {

? ? view.requestPointerCapture();

}

public boolean onCapturedPointerEvent(MotionEvent motionEvent) {

? // Get the coordinates required by your app

? float verticalOffset = motionEvent.getY();

? float horizontalOffset = motionEvent.getX();

? return true;

}

//...

view.releasePointerCapture();

最后溅蛉,考慮加入對(duì)手柄的支持,因?yàn)闃?biāo)準(zhǔn)的 Android 手柄 API 適用于 Chromebook 和三星 DeX 等設(shè)備——這些都為使用手柄提供了可能性他宛。

構(gòu)建

現(xiàn)在船侧,讓我們繼續(xù)構(gòu)建和配置您的 APK,以確保它支持各種大屏幕 Android 設(shè)備厅各。

第一步是檢查您的游戲所要求的權(quán)限镜撩,以及確定您是否真的需要這些權(quán)限。某些設(shè)備 (如 Chrome OS) 就不支持某些權(quán)限队塘,例如:

android.hardware.location.gps——?GPS

android.hardware.nfc——近場(chǎng)通信 (NFC)

android.hardware.camera——后置攝像頭

另外袁梗,請(qǐng)考慮運(yùn)行游戲的硬件配置,并考慮調(diào)整以下內(nèi)容:

自動(dòng)畫(huà)質(zhì)控制:?調(diào)整自動(dòng)畫(huà)質(zhì)控制邏輯或創(chuàng)建新的畫(huà)質(zhì)配置憔古,以便針對(duì)特定設(shè)備進(jìn)行最佳優(yōu)化遮怜。

x86 和 ARM:?嘗試提供 x86 版本,以便在 Chromebook 等設(shè)備上實(shí)現(xiàn)最佳性能鸿市。只有 ARM 版本的話(huà)游戲仍然可以運(yùn)行锯梁,但是您會(huì)因?yàn)橹噶罘g而產(chǎn)生額外的性能開(kāi)銷(xiāo)。

對(duì) Vulkan 的支持:?大多數(shù)設(shè)備現(xiàn)在都支持 Vulkan焰情,它可以大大提高渲染速度和圖形表現(xiàn)陌凳。

最后一步是在所有大屏幕設(shè)備上測(cè)試。添加涵蓋不同設(shè)備的烙样、更多樣游玩流程的測(cè)試用例冯遂,例如最小化最大化、在小屏幕和大屏幕之間切換谒获、變更輸入設(shè)備和調(diào)整窗口大小。您可以使用 Android 和 Chrome OS 模擬器或 Firebase Test Lab 等工具來(lái)讓測(cè)試過(guò)程變得更加自動(dòng)化壁却。

您也可以使用在 Android 設(shè)備和 Android Studio AVD 上運(yùn)行的折疊屏模擬器應(yīng)用批狱,來(lái)測(cè)試不同窗口大小和像素密度時(shí)的運(yùn)行狀況:

$ adb install FoldableEmulator.apk

$ adb shell pm grant com.samsung.android.foldable.emulator android.permission.WRITE_SECURE_SETTINGS

$ adb shell pm grant com.samsung.android.foldable.emulator android.permission.SYSTEM_ALERT_WINDOW


了解有關(guān)可折疊設(shè)備測(cè)試的更多信息

https://developer.samsung.com/galaxy/foldable/test

可折疊設(shè)備

可折疊智能手機(jī)通過(guò)將智能手機(jī)和平板電腦合二為一,讓游戲玩家可以魚(yú)與熊掌兼得: 可以做到多窗口操作展东,也可以讓游戲畫(huà)面的尺寸倍增赔硫。

為 Chromebook 構(gòu)建的應(yīng)用在優(yōu)化原則上和可折疊設(shè)備高度相通。因此在完成前面的優(yōu)化適配后盐肃,您只需考慮以下四個(gè)關(guān)鍵事項(xiàng):

最大寬高比

支持全屏模式對(duì)于確保游戲玩家獲得最佳的沉浸式體驗(yàn)至關(guān)重要爪膊∪ㄎ颍可折疊設(shè)備在折疊起來(lái)時(shí)畫(huà)面將擁有較長(zhǎng)的寬高比 (可達(dá) 21:9),因此請(qǐng)執(zhí)行以下步驟推盛,以確保您的游戲可以處理最大寬高比峦阁,從而填充整個(gè)屏幕:

聲明目標(biāo) SDK 版本: 以 Android 8.0 (API 級(jí)別 26) 或更高級(jí)別為目標(biāo)的游戲可以填滿(mǎn)整個(gè)屏幕。

聲明 resizeableActivity (如果您的游戲支持多窗口耘成,則只聲明為 "true"):??android:resizeableActivity=[“true” | “false”]

聲明最大寬高比: 可折疊設(shè)備寬高比可達(dá) 21:9榔昔,這要求您將最大寬高比提高到 2.4。

您可以按照如下示例在 manifest 中聲明最大寬高比:


<!-- Render on full screen up to aspect ratio of 2.4 -->

<!-- Use a letterbox on screens larger than 2.4 -->

<meta-data android:name="android.max_aspect" android:value="2.4" />


△ 設(shè)置最大寬高比為 2.4瘪菌,如果寬高比超過(guò) 2.4撒会,則左右兩側(cè)會(huì)留空

處理屏幕凹口區(qū)域

以?Galaxy Fold 為例,在展開(kāi)狀態(tài)時(shí)师妙,其屏幕的左上角會(huì)有一個(gè)凹口诵肛,您需要保證游戲畫(huà)面中的必要內(nèi)容不被遮擋电爹。

如果您的游戲在渲染時(shí)會(huì)覆蓋到凹口區(qū)域元扔,可以使用 WindowInsets.getDisplayCutout() 來(lái)獲得 DisplayCutout 對(duì)象快耿。這里有三個(gè)值需要注意:

LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT

LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES

LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER

MODE_DEFAULT:?內(nèi)容在豎屏模式時(shí)會(huì)在凹口區(qū)域內(nèi)渲染其弊,但在橫屏模式下左右會(huì)留空贼急。

MODE_SHORT_EDGES:?不論橫豎屏模式康铭,內(nèi)容都會(huì)在凹口區(qū)域內(nèi)渲染坡倔。

MODE_NEVER:?內(nèi)容永遠(yuǎn)不會(huì)在凹口區(qū)域內(nèi)渲染抄肖。

您可以參考如下示例來(lái)給您的 Activity 設(shè)置凹口渲染模式:


<style name="ActivityTheme">

? <item name="android:windowLayoutInDisplayCutoutMode">

? ? ? shortEdges <!-- default, shortEdges, never -->

? </item>

</style>

△?直接將 LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES 應(yīng)用于 Activity

了解更多針對(duì)凹口屏幕開(kāi)發(fā)的技巧

https://developer.android.google.cn/guide/topics/display-cutout

游戲連續(xù)性

當(dāng)用戶(hù)展開(kāi)他們的設(shè)備時(shí)若专,您需要確保您的游戲無(wú)縫過(guò)渡到全尺寸狀態(tài)许蓖。這意味著您的游戲可以適應(yīng)兩種實(shí)體屏幕尺寸,對(duì)實(shí)體設(shè)備折疊機(jī)制及其狀態(tài)作出正確響應(yīng)调衰,并且能夠調(diào)整畫(huà)面大小膊爪。

1. 確保您的游戲可以處理兩種屏幕尺寸,這個(gè)機(jī)制與在 Android 上適配不同屏幕尺寸的方法基本相同嚎莉。唯一的區(qū)別是米酬,這種情況在可折疊設(shè)備上會(huì)更頻繁地發(fā)生。

>?適配不同屏幕尺寸

https://developer.android.google.cn/training/multiscreen/screensizes.html

2. 處理折疊和展開(kāi)趋箩,開(kāi)發(fā)者不需要針對(duì) Galaxy Fold 這樣的設(shè)備處理特殊事件或 API赃额,因?yàn)檫@個(gè)過(guò)程就是 Android 平臺(tái)標(biāo)準(zhǔn)的屏幕尺寸變化事件。更具體到 Activity 的 configChanges 上叫确,會(huì)觸發(fā)這么幾個(gè)變化: Screensize跳芳、smallestScreenSize、ScreenLayout竹勉。

> 了解 configChanges

https://developer.android.google.cn/guide/topics/manifest/activity-element?hl=zh-CN#config

3. 讓游戲畫(huà)面尺寸實(shí)現(xiàn)自適應(yīng)飞盆,以在不同顯示模式之間靈活切換,從而讓用戶(hù)在折疊和展開(kāi)屏幕時(shí)都能體驗(yàn)到無(wú)縫的切換過(guò)程。

多重恢復(fù)

正如我們之前在適配可折疊設(shè)備的話(huà)題中提到過(guò)的吓歇,多重恢復(fù) (Multi-resume) 意味著在多窗口模式時(shí)讓所有可見(jiàn)的 Activity 處于 resumed 狀態(tài)孽水。在 Android 9 Pie 中,游戲和應(yīng)用都可以選擇打開(kāi) Multi-resume 功能城看,只需將聲明添加到 manifest 中即可:

<application>

? <meta-data

? ? android:name="android.allow_multiple_resumed_activities"

? ? android:value=”true” />

? <activity ... />

</application>

成功案例: Gameloft Asphalt 9

在了解到玩家們的大屏幕游戲需求后女气,Gameloft 利用這個(gè)契機(jī)調(diào)整了 Asphalt 9 的游戲設(shè)置,以便優(yōu)化這款游戲在大屏幕設(shè)備上的體驗(yàn)析命。團(tuán)隊(duì)在構(gòu)建游戲時(shí)考慮了各種輸入方式和顯示器尺寸主卫,并確保了游戲在不同種類(lèi)的設(shè)備上擁有一致的高速性能表現(xiàn)。

> Gameloft 在 GDC 2019 上的分享

https://www.youtube.com/watch?v=ZfBeab5u534

我們還與 Gameloft 合作鹃愤,針對(duì)Chrome OS 和可折疊設(shè)備優(yōu)化了 Asphalt 9 的前作簇搅,Asphalt 8: Revolution

針對(duì) Chrome OS? 進(jìn)行適配后,Asphalt 8 的每日活躍用戶(hù)數(shù)量增加了 6 倍软吐,Chrome 用戶(hù)帶來(lái)的收入則增長(zhǎng)了 9 倍瘩将。也正是在看到適配帶來(lái)的優(yōu)勢(shì)后,Gameloft 的核心工作就涵蓋了為較大屏幕進(jìn)行設(shè)計(jì)的要素凹耙。


打造移動(dòng)游戲的未來(lái)

我們希望您在閱讀完本文后姿现,能認(rèn)識(shí)到 Android 游戲不再是專(zhuān)屬于移動(dòng)設(shè)備的體驗(yàn)——今天的玩家正在各種外形和尺寸的設(shè)備上體驗(yàn)游戲。通過(guò)遵循 Android 最佳實(shí)踐并額外投入一些時(shí)間思考您的游戲在大屏幕上體驗(yàn)的可能性肖抱,您可以將您的游戲帶到更大的舞臺(tái)上备典,真正做到為每個(gè)玩家提供最佳的游戲體驗(yàn)。

您的游戲有適配更多的屏幕尺寸嗎意述?歡迎在評(píng)論區(qū)和我們分享游戲適配中的疑問(wèn)和心得提佣。

點(diǎn)擊這里即刻開(kāi)始適配更多屏幕

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市荤崇,隨后出現(xiàn)的幾起案子拌屏,更是在濱河造成了極大的恐慌,老刑警劉巖术荤,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倚喂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡瓣戚,警方通過(guò)查閱死者的電腦和手機(jī)端圈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)子库,“玉大人枫笛,你說(shuō)我怎么就攤上這事「照眨” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵喧兄,是天一觀的道長(zhǎng)无畔。 經(jīng)常有香客問(wèn)我啊楚,道長(zhǎng),這世上最難降的妖魔是什么浑彰? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任恭理,我火速辦了婚禮,結(jié)果婚禮上郭变,老公的妹妹穿的比我還像新娘颜价。我一直安慰自己,他們只是感情好诉濒,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布周伦。 她就那樣靜靜地躺著,像睡著了一般未荒。 火紅的嫁衣襯著肌膚如雪专挪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天片排,我揣著相機(jī)與錄音寨腔,去河邊找鬼。 笑死率寡,一個(gè)胖子當(dāng)著我的面吹牛迫卢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冶共,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼乾蛤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了比默?” 一聲冷哼從身側(cè)響起幻捏,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎命咐,沒(méi)想到半個(gè)月后篡九,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡醋奠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年榛臼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窜司。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沛善,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出塞祈,到底是詐尸還是另有隱情金刁,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站尤蛮,受9級(jí)特大地震影響媳友,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜产捞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一醇锚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坯临,春花似錦焊唬、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至衷笋,卻和暖如春芳杏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辟宗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工爵赵, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人泊脐。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓空幻,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親容客。 傳聞我的和親對(duì)象是個(gè)殘疾皇子秕铛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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