t2631_2-t2631_1:1.0

t2631_3-t2631_2:0.0

t2631_4-t2631_3:0.0

t2631_5-t2631_4:0.0

t2631_6-t2631_5:0.0

t2631_7-t2631_6:0.0

t2631_8-t2631_7:0.0

t2631_9-t2631_8:0.0

t2631_10-t2631_9:0.0

t2631_11-t2631_10:9.0

t2631_12-t2631_11:0.0

t2631_12-t2631_1:10.0

手游 > 模拟 > 白石洲往事下载
白石洲往事

白石洲往事

这是一款不错的游戏
运营  | 113.0M
开放世界 单机 Steam移植 模拟游戏
加速器下载
安卓版下载
游戏介绍 游戏截图 热门推荐 同类推荐

白石洲往事游戏介绍

白石洲往事简介

游戏设定的地点是从白石洲的石洲中路走到美庐锦园往城中村里面的那条街道。 任何前往深圳的外来打工者几乎或多或少的都从类似于这样的地方起步,开始都市生活的逐梦之旅;做为一个玩家扮演的就是刚刚来到城中村白石洲的情景,而你,将从这个简陋的出租屋开始你的生活和故事。 开放世界,多条剧情,特别适合尝试不敢做的事情;在游戏里你可以做很多事情,可以打工,送外卖,买东西吃,打包,租房买房,诸如此类的生活小事,你也可以触发各种剧情达到各种意想不到的成就,或者堕落到不认识自己,也可以终日无所事事坐吃等死;总之这是一个模拟+剧情的开放世界。 游戏文化: 游戏讲述的是主角2000千禧年学校毕业,前往一些城市并主要在深圳打工,并租住在白石洲生活的一些往事; 主角会获得一些任务,遇到一些人,发生一些故事,本游戏没有结局,可能主角会死亡;最终的结局不尽相同,根据主角的能力、情感以及随机发生的事件决定结局; 游戏风格: 总的来说,游戏风格略微的颓废,并不会在表现上多激进,过多追求图形上的极致;相反的把精力集中到剧情的表现,生活细节的表现;更多以符合玩家性格的行为逐渐推进游戏进度,或高潮,或平淡。
开发者: 开发者正在努力完善中
版本:1.1.5 更新时间:2022-03-17 权限说明  |  隐私政策

白石洲往事游戏截图

白石洲往事截图
白石洲往事截图0
白石洲往事截图1
白石洲往事截图2
白石洲往事截图3
白石洲往事截图4

大家都在看-热门推荐

原神冰雪往事任务攻略 冰雪往事任务怎么做

《原神》是一款受到广大玩家喜爱的游戏,而冰雪往事任务是其中重要的一部分。完成这个任务,需要一定的游戏经验和技巧,接下来本文将详细介绍冰雪往事任务的攻略。

原神冰雪往事任务攻略(冰雪往事任务怎么做)

任务概述

冰雪往事任务是一项寻找“千年雪魂花”的任务。任务开启后,玩家需要通过调查、寻找线索、战斗等环节,最终找到雪魂花并完成任务。

任务开启

任务开启需要满足以下条件:完成主线剧情至第三章、等级达到20级以上、完成“萤火虫的呢喃”、击败“北风的猎人”等条件。满足以上条件后,在特定时间内进入任务区域即可开启任务。

原神冰雪往事任务攻略(冰雪往事任务怎么做)

初始场景

进入任务区域后,玩家将看到一个被大雪覆盖的场景。在这个场景中,有一片清幽的湖泊,以及一个被废弃的建筑物。此时可以通过对场景的调查,寻找线索来推动任务进展。

调查线索

在初始场景中,可以通过与NPC对话、寻找环境物品、战斗等方式,获取线索。通过这些线索,可以了解任务背景、故事情节等信息,为接下来的任务进展做好准备。

冰雪怪物

在调查线索的过程中,玩家会遭遇一些由大雪变异而来的怪物。这些怪物往往具有较强的攻击性和防御性,需要玩家用普通攻击、技能、元素反应等手段进行战斗。

原神冰雪往事任务攻略(冰雪往事任务怎么做)

挑战Boss

通过收集线索和战斗,玩家可以挑战任务Boss。Boss战需要玩家熟练掌握角色技能,合理使用角色元素属性以及熟练闪避Boss攻击。最终打败Boss后,将获得线索和道具奖励。

解谜环节

除了战斗和寻找线索外,任务中还包含一些解谜环节。这些解谜环节需要玩家具备观察力、推理能力和动手能力,通过解开谜题获得奖励。

挖掘任务道具

在任务中,玩家还需要挖掘一些道具。这些道具有助于推动任务进展,例如找到雪魂花的位置。挖掘道具需要玩家掌握挖掘技能和合适的挖掘工具。

寻找雪魂花

完成以上环节后,就可以获得关于雪魂花的位置线索。根据线索,玩家需要前往指定地点,找到并采集雪魂花。采集雪魂花需要注意避开附近的怪物和机关。

返回任务NPC

采集到雪魂花后,需要返回任务NPC进行任务结算。在返回过程中,也需要注意避开周围的怪物和机关,以免影响任务完成。

任务评分

完成任务后,系统会根据任务完成时间、操作精度等因素,对玩家进行评分。评分越高,玩家将获得越丰厚的奖励。

任务奖励

完成冰雪往事任务后,可以获得大量的经验、金币以及其他稀有道具。这些奖励对于玩家提升等级、获取材料等具有重要意义。

任务追溯

完成冰雪往事任务后,玩家可以在剧情回顾中查看任务的详细情节和剧情。这将有助于玩家更好地理解游戏故事背景和剧情发展。

任务建议

完成冰雪往事任务需要玩家具备一定的游戏技巧和经验。建议玩家在完成前提前熟悉角色技能、属性、装备等基本知识,以便更好地完成任务。

冰雪往事任务是《原神》游戏中非常有趣的任务之一。通过对任务环节的详细介绍,相信玩家可以更好地完成任务,同时也能更好地享受游戏的乐趣。

《汉字找茬王》相亲往事 相亲往事通关心得

汉字找茬王是一款比较有难度的文字游戏,还有不少小伙伴不了汉字找茬王相亲往事,下面小编为大家带来了相关攻略的介绍,感兴趣的小伙伴和小编一起来看看吧。

《汉字找茬王》相亲往事 相亲往事通关心得

汉字找茬王相亲往事

1、汉字找茬王相亲往事不合理依次是:摩托车(长按右边窗帘3秒)、电闸、电热毯、抽纸、暖炉、伊丽莎白圈、手机、果篮、路由器、液晶电视、高档床头、婚纱

2、图中的女生穿着婚纱,床头是高档床头,左边的男人拿着手机,狗狗戴着伊丽莎白圈

3、桌子上有果篮,柜子上是路由器,上面挂着液晶电视

4、床边有暖炉,床上有电热毯,长按右边窗帘可以找到摩托车

《汉字找茬王》相亲往事 相亲往事通关心得

以上便是小编为大家带来的汉字找茬王相亲往事内容,感兴趣的小伙伴可以去体验一下。更多消息和内容关注九游,之后会持续给大家带来更多全新的内容

-end-

《崩坏3》往事的华章怎么样 往事的华章攻略

崩坏3》是米哈游科技(上海)有限公司推出的一款角色扮演类游戏,而《崩坏3》往事的华章怎么样?往事的华章攻略,下面就来给大家分析,为大家提供攻略。

一、武器简介

往世的华章·时之墟是一把双枪武器,非常适合黄金·璀耀之歌使用。能够无条件的对全队全伤害进行提升,使用武器主动后可以使全队雷电元素伤害进一步提升,还能够激活黄金·璀耀之歌对应的心醉或者演奏状态。武器主动能够和黄金·璀耀之歌的QTE一起触发,若超限,自身输出能力以及其团队辅助将会得到进一步提升,还可以在队友将武器主动释放的时候发射数枚音符,给敌人产生雷电元素伤害。

二、武器详解(都是65级数据)

1、域论断点,释放音波冲击,产生雷电元素伤害7*150.0%攻击力。攻击的时候会对敌人产生7*1点麻痹积蓄值,并且还能够提高15.0%全队雷电元素伤害,持续时间20秒。

2、绝世长歌,提高15.0%全队全伤害。必杀技开启之后,全队在场角色全伤害提升10.0%,持续时间20秒,重复触发持续时间会刷新。

3、千花协律,提高20%自身雷电元素伤害,黄金·璀耀之歌装备的时候,全队角色将武器主动技释放之后,每0.4秒对最近敌人或者当前攻击目标发射一枚音符,若敌人被音符命中的话,遭受黄金·璀耀之歌的雷电元素伤害100%攻击力,持续时长为4秒,冷却时长为18秒。

三、适用角色

黄金·璀耀之歌是适用角色。这个武器可以将黄金·璀耀之歌的战斗节奏大幅加快,经过武器主动和QTE将乐谱直接完成,得到更为流畅、紧凑的流程,并且还将自身和团队对敌人产生的雷电元素伤害进行了提高。超限之后将自身输出能力大幅提升,在单人作战的往世乐土模式里面有更加显著的效果。在真理之律者和戒律·深罪之槛的队伍里面,高频的音符攻击还能够将戒律·深罪之槛的“清赎”计数积攒速度提高。

以上就是今天给小伙伴们带来的内容了,希望对大家有所帮助,更多相关内容请关注九游,关注九游,随时随地都能获取更多资讯。

查看更多游戏内容查看更多热门游戏攻略查看更多热门游戏下载

崩坏3喷泉往事怎么做-喷泉往事完成攻略

崩坏3喷泉往事怎么做?喷泉往事是游戏中新开启的支线任务,下面九游为各位整理出崩坏3喷泉往事完成攻略,希望可以帮助到各位。

崩坏3喷泉往事完成攻略

崩坏3喷泉往事怎么做-喷泉往事完成攻略

1.任务的话这里主要讲解一下大家都在问的问题,就是蓝线提示消失和居民位置。

2.正常来说是跟着线路提示的,如果没有就重启试试,因为那个蓝色的路线提示不太显眼,但都是最快的。

3.然后居民则是救世裂缝的附近,就在小吃街那里。

4.第三个西侧有个阶梯走上去就是,那个地方可以去空中花园看得到,但是不能从上面跳下来只能去西侧走上去。

5.注:并且不走到npc附近的话,就不会显示蓝色虚线的提示。

以上是小编为各位带来崩坏3喷泉往事完成攻略的全部内容,更多精彩游戏资讯,请持续关注九游

魔镜物语白雪往事怎么过 白雪往事玩法攻略

魔镜物语游戏中包括多种不同的任务,玩家可以通过提升等级,开启多种限定活动,今天小编带大家了解一下魔镜物语白雪往事怎么过。

玩家进入游戏后,随着战力不断提升,当提升到25级时,即可开启一千零一夜中白雪往事任务。身在皇宫的魔镜王后很清楚,白雪尤丽存活在世界上已经造成他不是世界上最美的女人,所以她需要用毒果杀死白雪公主。所以需要通过任务后成功解救白雪公主。通过完成任务后,可以获得紫金宝箱或黄金宝箱奖励,选择开始演出进入白雪往事任务。

玩家会在城墙外看到白马王子,与他沟通后即可让白马王子加入到战队中。

与小矮人进行沟通,回答出他认为最漂亮的女人,回答正确会留下遗物。玩家在城墙外不断的遇到别人,当成功完成,遇到白雪公主后,玩家与白雪公主进行沟通,原来逃出城外的白雪公主内心不相信任何人,当击败白雪公主后可以获得不同的奖励。

当击败白雪后,白雪打算前往后宫去找皇后。当击败皇后后,可以成功解救白雪公主,白雪公主往事任务即完成,可以获得相关不同的奖励和卡片

魔镜物语白雪往事怎么过小编就介绍到这,可以通过组队进行挑战皇后,当挑战成功后,可以获得相应奖励,成功解救白雪公主,希望小伙伴们喜欢,抓紧时间体验吧。

《一人之下》巴蜀往事怎么玩 巴蜀往事活动玩法详解

一人之下手游巴蜀往事怎么玩?很多玩家对这个新活动知之甚少,也不清楚玩法是什么。下面,就让我们来看看巴蜀往事活动攻略吧,希望可以帮到大家。

一人之下手游巴蜀往事怎么玩-巴蜀往事活动攻略

一人之下手游巴蜀往事活动攻略

一、活动时间

6月5日-6月12日

二、活动玩法

首先在巴蜀往事的活动中我们需要收集5张照片的碎片,解锁之后我们可以获得银币、徽章、炁灵、假面阻击情报等奖励。

收集到了6个线索就可以解锁一张照片了,最后两张照片需要8个到10个的线索。

玩家们参与内景试炼和心猿秘境就可以有机会获得线索。

一人之下手游巴蜀往事怎么玩-巴蜀往事活动攻略

以上就是小编为各位带来的有关于一人之下手游巴蜀往事怎么玩的全部内容,希望能够帮到大家。更多精彩的游戏资讯,请持续关注九游!

《一人之下》手游巴蜀往事攻略 巴蜀往事线索分享

一人之下手游巴蜀往事怎么玩 巴蜀往事线索攻略已有,巴蜀往事完成后有什么奖励呢?下面不妨和九游游戏网小编一起了解下吧。

一、活动时间

6月5日-6月12日

二、活动玩法

首先在巴蜀往事的活动中我们需要收集5张照片的碎片,解锁之后我们可以获得银币、徽章、炁灵、假面阻击情报等奖励。

收集到了6个线索就可以解锁一张照片了,最后两张照片需要8个到10个的线索。

玩家们参与内景试炼和心猿秘境就可以有机会获得线索。

 

一人之下
异人联赛怎么玩 异人龙虎战 心猿秘境 钱币获得攻略
职业选择攻略 橙装武器 战备奖励 战备攻略
铭文升级攻略 铭文属性攻略 铭文怎么得 异人联赛怎么上分
异人联赛奖励 异人联赛怎么玩 50级后主线任务 柳研研异人联赛
夏禾培养攻略 高级招募攻略 鬼王打法规则 冯宝宝隐藏任务
蓝图在哪找 炁灵培养攻略 异人培养攻略 魔影列车齐延
魔影列车郑孟平 魔影列车木子 魔影列车薛蟠 医仙五毒
熊猫头领取攻略 天师府技能 剧情全解 每日钓鱼任务
宝儿姐埋人剧情 张灵玉打法技巧 莽夫 烛龙
经天 腾蛇 见雪 破盈
贪残 八卦装备 公会贡献 协助许愿
陆瑾 苑陶 藏宝图怎么得 法器怎么得
蓬莱夜刃基础技能 蓬莱夜刃专精 金光咒专精 药仙职业攻略
天师府专精 天师府背景 湘西巫蛊专精 湘西巫蛊基础技能
诸葛青 七号列车攻略 饰品装备攻略 天玑套装
玉衡套装 瑶光套装 天璇套装 开阳套装
天枢套装 津门争霸配件搭配 天权套装 柳妍妍技能连招
神机职业 满级攻略    

 

一人之下手游巴蜀往事怎么玩 巴蜀往事线索攻略

《一人之下》巴蜀往事线索在哪 巴蜀往事线索收集汇总

一人之下手游中经常会有一些好玩的活动,其中巴蜀往事这个活动是游戏中最近新出的活动,那么要怎么玩呢?接下来小编就给大家带来了巴蜀往事线索收集攻略,快来一起看看吧!

《一人之下》手游巴蜀往事线索收集攻略

巴蜀往事线索收集攻略

活动时间

6月5日-6月12日

活动玩法

首先在巴蜀往事的活动中我们需要收集5张照片的碎片,解锁之后我们可以获得银币、徽章、炁灵、假面阻击情报等奖励。

收集到了6个线索就可以解锁一张照片了,最后两张照片需要8个到10个的线索。

玩家们参与内景试炼和心猿秘境就可以有机会获得线索。

《一人之下》手游巴蜀往事线索收集攻略

活动线索

巴蜀往事一共需要搜集五张照片碎片,解锁后可以获得奖励,奖励包括银币、徽章、炁灵、假面阻击情报,对于缺这些道具的小伙伴们来说是非常不错的奖励。

每6个线索就可以解锁一张照片,最后两张则需要8线索、10线索,小伙伴们参加内景试炼和心猿秘境时有几率获得线索~目前掉率还不清楚,但这个活动还是非常简单的。

活动时间6月5日-6月12日,即使很咸鱼也能够完成活动了。

以上就是小编整理的关于《一人之下》手游巴蜀往事线索收集攻略的全部内容。更多游戏攻略请持续关注九游手游网!

海港往事好玩吗 海港往事玩法简介

期待已久的手游海港往事即将登陆九游,这款手机游戏吸引了大批玩家的关注,有很多粉丝都在问九游小编海港往事好玩吗?海港往事值不值得玩?现在就为大家来简单分析下,看看这款游戏的玩法特点和游戏剧情介绍。

1、海港往事简要评析:

一部游戏、一部电影、一个故事、一种感动! 海港往事游戏沿用了诡船谜案系列第一人称视角,同时加入了全新的横版第三人称视角。完整的故事线让玩家拥有更好的体验,当然只要你够聪明。你会发现故事往往没有看到的那么简单…真相?我们等你来探索! 旭日撒在宁静的港口小镇,在温暖的阳光下,废墟中流浪的少年从睡梦中惊醒,带着些许惊慌,是往事太过伤感,还是未来太过沉重……黑影扶墙而动慢慢靠近,是危险还是机遇?故事就此开始,命运的轨迹悄悄的搭上了那沧桑的渔船,谁又能解开这尘封的海港往事。 -----------------------特点------------------------------ *更加细致独特的2D手绘画风。 *众多趣味性的迷题和故事线隐藏其中 *全新加入了人物立绘,更丰富的游戏玩法,更好的游戏体验。

2、海港往事图片欣赏:

海港往事好玩吗 海港往事玩法简介

海港往事好玩吗 海港往事玩法简介

海港往事好玩吗 海港往事玩法简介

海港往事好玩吗 海港往事玩法简介

海港往事好玩吗 海港往事玩法简介

通过上面的一部游戏、一部电影、一个故事、一种感动! 海港往事游戏沿用了诡船谜案系列第一人称视角,同时加入了全新的横版第三人称视角。完整的故事线让玩家拥有更好的体验,当然只要你够聪明。你会发现故事往往没有看到的那么简单…真相?我们等你来探索! 旭日撒在宁静的港口小镇,在温暖的阳光下,废墟中流浪的少年从睡梦中惊醒,带着些许惊慌,是往事太过伤感,还是未来太过沉重……黑影扶墙而动慢慢靠近,是危险还是机遇?故事就此开始,命运的轨迹悄悄的搭上了那沧桑的渔船,谁又能解开这尘封的海港往事。 -----------------------特点------------------------------ *更加细致独特的2D手绘画风。 *众多趣味性的迷题和故事线隐藏其中 *全新加入了人物立绘,更丰富的游戏玩法,更好的游戏体验。和图片,可能大家对海港往事有大致的了解了,不过这么游戏要怎么样才能抢先体验到呢?不用担心,目前九游客户端已经开通了测试提醒了,通过在九游APP中搜索“海港往事”,点击右边的【订阅】或者是【开测提醒】,订阅游戏就不会错过最先的下载机会了咯!

下载九游APP订阅海港往事>>>>>>

一键高速下载,礼包轻松到手!

BUG往事

      顾煜,就职于腾讯引擎技术中心,是《天涯明月刀OL》的技术总监。《BUG往事》原文发表于其知乎专栏“游戏开发随笔”。作者用诙谐幽默的语气讲述了作为程序员与其天敌“BUG”斗智斗勇的故事。

      该文文笔妙趣横生,即使你完全不懂程序员的那些语言也能从顾煜的文字里读出一点儿“老子不信斗不过你”的不服输的劲儿。触乐将全文转载、编撰录入以饕读者。

      翻出一篇老文,辛苦写给公司内刊,貌似最后没有发表……润色一下,发出来,纪念那些年修过的奇葩bug们。

      记忆中有很多次了,几个程序员朋友聊天,聊着聊着,就聊到自己遇到过的bug。然后大家开始口沫横飞交流那些或诡异或神奇的bug,谈论自己当年是如何搞定bug或是被bug搞定。

      正好看见Gamesutra上也登了篇Dirty Coding Tricks,发现老外也有这个癖好,原来天下程序员本一家。一路走来,程序员的成长,便是一路刀光剑影,与bug斗个你死我活。了解别人的Debug过程,或是回忆一下自己Debug的时候思路,也是很有意思的事情,值得定期总结。

      下面分享一下自己遇到过印象深刻的bug。

      ■ 靠不住的OS:Memcpy的传说

      做一个PC项目的时候,凶猛的测试兄弟把Winxp 64单独列出来,作为一个测试平台,然后我们的噩梦就开始了。游戏在Winxp 64上面频繁Crash,经常在更新Octree的时候访问到空指针,但逻辑上来看那个指针不可能是空的。Crash位置很随机,到处都有,通常都是玩了一个小时在一个莫名其妙的地方Crash。

      第一反应就是那些地址被非法访问,可能是某个错误的指针指向那里,往里面写了不该写的值。于是我根据最常Crash的地址设下数据断点,试了好几天,从来没有断下过,Crash还是依旧。然后同事试图加上大量的保护代码,判断一个指针是不是空指针后才使用,很好的降低了Crash机率,但偶尔还是会有。想想问题根源没有找到,降低Crash概率只是让自己更难修bug,而且访问Octree也比较多,乱加保护会影响性能,我一狠心又把保护代码全去掉了。

      Takeaway: 不到万不得已,不要用保护代码掩盖Bug,它只会让你的日子更难过。

      来回几轮搞下来,根据某次比较靠谱的Crash Callstack,怀疑到了memcpy。memcpy是个老同志了,兢兢业业地忙碌在各个程序里,负责搬运数据很多年,工作绩效有口皆碑。它有什么问题呢?它还能有什么问题呢?

      为了保证多线程能同步并行执行,我们程序中有个很大的memcpy,把一块Octree从后台用memcpy复制到前台的工作buffer。当然这个做法的设计优劣不在此讨论,存在即合理,2007年,多线程引擎我们还不是那么擅长搞。

      既然有怀疑,就要捉奸。我做了试验,在memcpy后面直接加一个循环,逐字节比较源数据和目标数据,有时候居然会不相等… 这个可颠覆了我的世界观。我试图写了一个函数,里面就一个循环,逐字节复制数据,然后把所有的memcpy全替换成这个函数,果然不Crash了。但显然这是不行的,速度太慢了。

      既然有了点线索,就可以试图简化bug重现条件了。我不能每次都花一个小时去运行游戏,寻找那一次crash。我在游戏load起来,开始走主循环后,加了一个死循环,不停用memcpy复制一块内存,然后比较源数据和目标数据。源数据里面没有0,都是1-255的值,可是运行几十秒以后目标数据居然有0。这样,我们成功地把重现一次bug的平均时间从一个小时降低到一分钟。

      我们的怀疑从3d代码转移到多线程,在进入那个死循环之前,我们设下断点,把其他无关的线程全部都Freeze,只有那个线程会运行。这样,任何多线程的干扰全部排除,memcpy在一个理想的环境中欢快的运行,但memcpy还是会出错。

      继续简化,我单独写一个小程序,里面只做死循环和memcpy,来判断是不是OS的问题(实在是走投无路了)。试验结果是,Winxp 64没有问题,memcpy始终如一地正常工作着(本该如此)。 可是某一次,当我们的游戏在后台运行的时候,再启动这个小程序,居然memcpy又出问题了……无语了,原来我们的游戏还能万里追杀,跨进程搞垮OS下面的其他进程。

      山穷水尽疑无路,我无奈下单步跟踪了一下memcpy的汇编代码,上来有两句:

      也就是说,memcpy上来看有没有设置__sse2_available,这个值估计是CRT库里面设的,如果有SSE2就执行sse优化的memcpy,没有就跳到Dword_align那里执行普通版本的流程。我开始怀疑是不是我们的游戏里面对系统做了点什么手脚,导致在__sse2_available允许的情况下,优化的代码会执行出错。游戏的代码规模实在太大,又用了n个中间件,我无力一一查看,且我也看不懂SSE代码(哎呀好羞射),就随手做了个试验,在那句判断的地方,通过Debugger把__sse2_available的值改成了0。从此memcpy再也不出错了。

      所以最终的解决方案是,Win64下,我在游戏一开始初始化的地方,加上谜一样的初始化代码:

      这样memcpy就永远使用不做sse2优化的代码了。

      memcpy不使用sse2后会不会有性能问题?经过测试,发现问题不大,对于频繁调用的少量数据复制,memcpy不太能从sse2里面得到多少好处。对于大量数据的复制,我们用得也不多,profile了一下,没有发现明显的瓶颈,无视了。这事情也可以从反向理解,由于游戏规模太大,各种多线程和GPU/CPU同步,导致任何一点的效率损失,可能不会扩散到整个游戏,被其他同步和等待吸收掉了…我真是一个好程序员,能想到这么好的理由说服自己。

      对游戏跨进程影响其他程序的memcpy,实在没能力解决了,Winxp 64是一个太小众的环境,用户要么用Winxp 32, 要么用Vista 32/64,市场占有率很低,我们也算仁至义尽了。

      可得结论:Winxp 64靠不住(其实问题还是应该出在我们内部,不过其他OS都没问题,就赖在它身上了。)

      Takeaway: 首先,你要有一个有耐心的老板,才能给你时间去查这么奇怪的Bug。

      为了达成目的,我们要不择手段

      ■ 靠不住的SDK:OutputDebugString

      话说当年开发Splinter Cell 4,使用的还是XBOX360的Alpha kit。微软早期的360 Kit,全不像后期的Kit,后期kit长得和主机差不多。而当时的KIt,是用一个很大的Power Mac G5,换上一块ATI显卡,再刷上MS的固件,连马甲都不穿一件就出来见人了。

      Xbox 360开发SDK,早期bug一大堆,比如预编译头文件太大了,编译器抱怨说预编译头文件预留内存不够,这个好办,加上/Zm512编译选项即可。加上,编译,没用?!只好写信去MS问,他们说,哦,原来如此啊,今天天气真好,哈哈哈哈,请等待下一次更新,谢谢您汇报云云……虽是MS的bug,可是我也不能等着他修复才工作,只好手动拆分预编译头文件,把很多内容放在预编译头文件外面,预编译头文件就会变小,编译就可以顺利通过了。

      扯远了,回头来说这个OutputDebugString的问题。

      360有3个cores,每个core有2个Hyperthreads,总计6个线程,我们的游戏在逻辑线程、声音线程和渲染线程外,还开了3个辅助线程,用自己写的Thread Pool管理系统来管理这些线程,初始化的时候就是一个循环把每个线程创建出来。

      这个bug的表现现象就是加载失败,程序僵死。团队当时有几十个测试人员,每天打游戏八小时,从没碰到过游戏加载失败情况。但是开发人员这里就有很低概率会加载失败,表现情况为用VC启动游戏,然后过一会加载屏幕就僵死不动了。

      开发人员往往过了5分钟还没在电视上看见游戏画面才知道游戏又挂了,重现概率是每个程序员每一到两天碰到一次。我们担心这是线程管理系统内部的问题,就让每个开发人员碰到这种情况不要急着重启动,把现场给我看一下。每次僵死的时候都是在系统内核死锁,Callstack也没有有价值的信息,基本都是在创建每个线程的时候打印一句语句的时候就内核就死了。在接下来一周里,我试图在线程管理系统内部加一些日志输出,每次重现bug的时候查看日志,也没有找到更好的线索。

      重现概率实在太低,不好调试,于是我试图用简单的程序片段来重现这个bug。因为都是创建新线程时候死锁,第一个想到的就是写一个小程序,直接一个死循环,创建线程,打印日志,然后杀掉线程,重复再做。果然能够重现bug,程序运行1分钟以后,就死锁了。同样的现场,还是在OutputDebugString内部死锁了。难道bug不是在线程库,而是在OutputDebugString内?

      Takeaway: 不要轻易相信你看见的表层问题,问题可能在别处。

      正好那些天有个微软360开发组的人员在我们组Onsite支持,于是他带着大量的360 Sdk的符号库(Symbol)来帮助调试,因为他不是做这一个模块的,最后也没有什么结果。最后他把我的小程序发回微软,找到内部开发人员处理,这比我们直接走正式support流程快很多。

      Takeaway: 隔离问题,编写更小的测试案例,便于和别人沟通交流,寻求帮助。

      一天后,微软发回Email,说这是内部的Bug,请无视,不会影响Release版本,是Debug协议上的问题。

      可得结论:微软靠不住。(开玩笑,请微软公司不要追杀)

      ■ 靠不住的系统组件:Vista和Speech Recogition

      我们游戏使用了语音识别,使用了DirectX里面的XAudio来采集声音。Windows Vista里面有一个语音识别的组件,启动那个程序,然后玩我们的游戏,玩了一段时间,因为没有使用麦克风,那个程序会自动关闭使用麦克风,然后我们的游戏就Crash了。又是一个跨进程的奇葩Bug。

      从现场来看,Crash在使用XAudio的库代码里面。看不出什么线索,最后发现在日志里面,Crash前一会儿,XAudio的dll被Unload掉了。Vista那个语音组件很强悍,也会跨进程追杀大法,在自己进程把我的进程dll给Unload掉了。

      虽然遇事先要怀疑自己的代码有问题,但这个情况太匪夷所思,所以我试图推卸责任,我跑了几个其他DirectX程序和Demo,但凡用到XAudio组件的,在Vista Speech Recognition这一大招前无一幸免,全部Crash。

      问题不在我们这里,但是作为一个职业杀虫人,我有着“只解沙场为国死,何须bug裹尸还”的觉悟,决定还是要想办法搞定它。

      我猜这个组件退出的时候,广播了点什么消息,让系统所有进程去卸载这个Dll。我找了一个微软提供的库Detours Express,专做Hook API的勾当。它会反汇编API的入口代码,然后动态替换入口,插入jmp指令去执行我们自己的函数。先看了文档,搞懂这个东西怎么用,然后猜测是一个OS内部的消息导致Unload DLL,我们就拦截了RegisterWindowMessage。一通翻箱倒柜,啥有意义的东西都没发现。

      再用spy++来拦截消息,发现有一个MSUIM.msg.rpcsendreceive的消息面目狰狞,很可疑。就在收到这个消息以后,Dll就被Unload了。于是我们用Detours截住这个消息,直接返回。

      以为搞定了,但结果还是不行,有几条别的消息也会触发Unload Dll,我一一用Detours拦截返回。拦截的消息越来越多,看来不是个解决办法。于是我怀疑我们没有拦截到正确的消息,怀疑OS启动的时候便注册了一堆内部用的消息,而不是在运行进程的时候才注册。那些消息里肯定有我想要的,我便异想天开地Hook了User32.dll,拦截下所有消息,在安全模式下把修改过的user32.dll覆盖原来的文件,然后满怀希望的重启动Vista的时候。结果不出所料的蓝屏了……User32.dll是凡人能随便碰的吗?这不是一个User friendly的库,应该改名叫God32.dll。

      这个bug搞了1周,最后才想到最基本的道理,说不定只是Dll内部引用计数被清掉了,所以系统就卸掉Dll了。当Vista语音组件Unload XAudio的时候,系统去看看XAudio库有没有什么别人引用,结果发现居然没有,那就顺手清理了。就像地上有100块钱,你东张西望,发现没有人宣布拥有那张钱,没有一点点犹豫,你随手就把它放进了裤兜,进行了回收。嗯,就是这样的,我喜欢比喻这种修辞手法。

      理论上创建XAudio设备的时候没有做什么额外的加Dll引用计数的事情,怀疑是MS的bug,创建D3D设备、DInput设备的时候都不需要做什么特别的事情的,但他们的引用计数都没有问题。

      于是我恶搞了一下,在初始化XAudio完成以后,手动做了一次LoadLibrary,把XAudio2_1.dll强行Load一遍,相当于自行增加了引用计数。于是再无Crash。

      从此我们的游戏,在Vista 32上过上了幸福的生活。

      可得结论:Vista靠不住

      Takeaway: 不知道该说什么了,这个bug太奇葩了。

      ■ 性能的迷思

      临近最终版本发布的时候,测试人员发现一个问题,当在Vista上连续打游戏过7关以后,游戏帧数一下子变成原来一半了。大家觉得很诡异,都不相信,之前整天玩游戏都没问题的,于是责令测试人员再重现几次,否则拖出去刨坑埋了。我也没当回事,继续调试别的bug。结果他们测了几遍都是这种情况,看来我必须花点力气看看了。

      先编译了一个Profile版本,有大量的Profile代码,可以用我们自己做的工具看Profile结果。跑游戏,一个小时后顺利重现之,按下快捷键,截下一段性能分析数据,打开工具就开始分析。显示结果是在某个线程的声音处理函数里面特别慢,占了20多ms,找来做声音的程序员,让他也去帮忙看。自己继续研究,发现那个声音函数简单,估计最多1-2ms了,绝对不会有问题的。

      于是开始怀疑多线程的问题,之前有过类似bug,在加载关卡的最后一小段时间,音乐和语音会很卡,音频程序员查不出原因。后来我发现声音线程根本分配不出内存,声音线程的内存分配器和主线程共享,通过Critical Section保护着。声音线程进不了Critical Section,因为主线程那时忙于加载,正在疯狂地分配内存,导致声音线程被无法分配所需资源。我又不能调低主线程的优先级,否则加载速度会受到很大影响。最后解决方案是为声音线程单独开了一个内存分配器,不和主线程抢了。会不会是这个分配器有问题呢?我验证了很久,把那个声音线程的内存分配器换成绝无性能问题的版本,还是有问题,估计不是内存分配的问题。

      也许是那个很慢的声音处理函数里面有些资源被别的线程占了,导致在那里傻等,最后耽误了系统所有线程的同步,使帧数下降。有了想法我就开始验证,我在那里的每个多线程同步操作里都加上了Profile代码,继续花了一个小时重现bug,并检查Profile结果,发现那个线程就是慢,没什么特别原因,每个Critical Section都很快就过去了,也就是说,没有哪一个部分特别慢,是整个函数被均匀地拖慢了。

      忙了几天,死去活来,找不到线索。领导决定游戏还是照样发布,我继续看这个问题,准备在Patch里面修正这个bug。

      在一次次重现中,又简化了重现方法,我发现只需要顺序进入那几关,不需要把每一关都打过去的,所以我用作弊码直接完成每一关,重现一次 bug的时间缩短到10分钟以内了。

      看来自己的工具是搞不定这个问题了,请出Intel Vtune来收拾它。公司比较抠门,不肯买Vtune,只好申请了评估版,一个月试用期,应该够搞定这个问题了。用Vtune Profile了几次,每次拖慢的函数都不一定,而且里面真没什么特别的地方。

      又郁闷了两天,某天看着Vtune里面红红绿绿的代表线程忙碌状态的条条,突然发现有一个线程条全是密密麻麻的红条,其他线程的红蓝条相对稀疏一点。开始猜想,是不是有某个线程太忙了,导致抢了所有的时间片,让其他线程都没机会拿到时间片。有了理论依据,大胆求证一番,重现一次bug,帧数很低了以后,断下游戏,把系统里面的n个线程用二分法,Freeze一半,再运行,看帧数,然后恢复一半线程再跑,来回几次,终于发现当某一个线程恢复以后帧数就很低了,其他线程开关都没关系。关掉那个线程游戏马上全速欢快跑开了。再恢复运行那个线程,又是老样子。

      找到了嫌疑目标后,我全力追查这个线程是如何创建的。先在所有创建线程的地方加上日志,输出线程 id,重现bug后找出那个问题线程,然后对照线程 id的日志,试图找出这个线程创建的地方。结果很杯具,那个线程根本就不是我们自己程序创建的。也就是说,OS偷偷帮我们创了一个线程。这个就比较难查了,线程创建的时候我又没法设断点,也不知道系统内部用什么函数去创建线程,无法用Detour去Hook API。

      转机出现在Intel的Thread Profiler,照例又是一个月评估版。Thread Profiler可以显示出创建这个Thread的Callstack,虽然不是特别准确,不过已经是很有用的信息了。我发现那个线程创建的时候Callstack里面有Winhttp之类的函数。

      继续转移战场,看Msdn上介绍的Winhttp系列函数,然后搜索整个项目里面所有用到Winhttp系列函数的地方。应该是我们调用Winhttp的时候方法不正确吧,我猜。好在项目里面用的Winhttp系列函数也不多,每个地方读一遍代码,似乎都没问题。继续想,会不会是中间件的问题,我们用了一个其他分公司开发的网络组件,那个组件没有包含在项目里面,只是弄了个lib过来。我连忙找到那个组件的源码,一搜Winhttp又一大堆,一个个看,也都貌似正确。

      既然是连续玩n关才出问题,可能和什么资源泄露有关吧?我恍然大悟,注意看Winhttp 句柄的生命周期,发现那个中间件,在Xbox360版本上正常释放了句柄,可是Win32上就没有……

      没什么好说的,WinHttpCloseHandle伺候,问题迎刃而解。修正这个bug耗时2周,一路杀到声音、内存管理、网络模块,中间还顺手修复了无数其他bug,最后终于将其正法,改动只是一行而已。

      可得结论:中间件靠不住。

如转载涉及版权等问题,请作者与我司联系,我司将在第一时间删除或支付稿酬。

白石洲往事同类推荐

相关专题

最新专题

即将上线

2026-03-03 09:00:00
2026-03-04 08:00:00
2026-03-04 10:00:00
2026-03-05 10:00:00
2026-03-05 10:00:00
2026-03-06 10:00:00
2026-03-06 10:00:00
2026-03-06 10:00:00
2026-03-07 00:00:00

最新资讯

求生之路2怎么给电锯加油
电锯是一件让许多幸存者又爱又恨的强力装备。它以其无与伦比的近战破坏力和持续性伤害能力,在对抗汹涌
求生之路2怎么给电锯加油
2026-02-27 14:45:13
永劫无间雪莲和沙叻在哪儿
雪莲是火罗国地图中的专属道具,其固定刷新点主要集中在雪莲村、迷雾森林以及银蛇口这三个区域。雪莲村
永劫无间雪莲和沙叻在哪儿
2026-02-27 14:44:56
流放之路2S3冰弓锐眼怎么技能加点
在流放之路的世界里,每个赛季都有着独特的玩法与挑战。s3赛季中,冰弓锐眼以其独特的技能机制和强大
流放之路2S3冰弓锐眼怎么技能加点
2026-02-27 14:44:56
死域Rogue区域3触发线任务怎么完成
在游戏世界中,死域rogue区域3的触发线任务充满挑战与机遇。玩家们渴望探寻其中的奥秘,获取独特
死域Rogue区域3触发线任务怎么完成
2026-02-27 14:44:37
吉星派对抽卡功能怎么
在吉星派对这款游戏中,抽卡功能备受玩家关注。它究竟有着怎样的魅力与玩法呢?下面就为大家详细介绍。
吉星派对抽卡功能怎么
2026-02-27 14:44:20
绝区零潘引壶音擎怎么推荐
在绝区零的世界里,潘引壶音擎是众多玩家喜爱的角色之一。想要在游戏中充分发挥她的实力,掌握一套有效
绝区零潘引壶音擎怎么推荐
2026-02-27 14:43:54
金庸群侠传3思过崖走哪个山洞好
思过崖山洞是一个关键的隐藏场景,但进入需要满足特定条件并做出路线选择。玩家需首先加入华山派,并在
金庸群侠传3思过崖走哪个山洞好
2026-02-27 14:43:48
饥荒猪舍建在家哪里好
猪舍选址需综合考量资源获取效率、安全防护及长期发展空间,猪王村无疑是优先级最高的选择,其核心优势
饥荒猪舍建在家哪里好
2026-02-27 14:43:40
部落冲突怎么解锁火龙
火龙凭借其强大的攻击和防御能力,成为许多玩家进行资源掠夺和部落战的首选兵种。首先需确保大本营和训
部落冲突怎么解锁火龙
2026-02-27 14:43:15
海之剑购买指南
在游戏的世界里,海之剑以其独特魅力吸引着众多玩家。想要畅玩海之剑,首先得了解其配置要求及游戏介绍
海之剑购买指南
2026-02-27 14:43:14
《乱涂彩世界》主线BOSS篇-【自由国】【尼罗国】
在主线关卡中,真正的拦路虎往往是那些BOSS。它们不仅拥有碾压普通敌人的血量和伤害,更具备独特的
《乱涂彩世界》主线BOSS篇-【自由国】【尼罗国】
2026-02-27 14:35:31
无限轮回优先配装及宝石搭配攻略
在无限轮回手游中,玩家应该优先配装及宝石搭配需围绕核心玩法(如枪械流、暴杀流)与角色定位展开,不
无限轮回优先配装及宝石搭配攻略
2026-02-27 14:35:07
战神 斯巴达之子上线PS5 双人合作仅限隐藏解锁的深渊模式
索尼互动娱乐近日确认,本月上线PlayStation 5平台的战神系列衍生横版动作游戏战神:斯巴
战神 斯巴达之子上线PS5 双人合作仅限隐藏解锁的深渊模式
2026-02-27 14:34:58
一步到位 《生化7 8》登陆NS2 推出7 8 9同捆包
卡普空《生化危机》官方今日宣布,《生化危机7》与《生化危机8:村庄》正式登陆NS2平台。加上系列
一步到位 《生化7 8》登陆NS2 推出7 8 9同捆包
2026-02-27 14:34:53
王者荣耀孙尚香秒人出装出什么
孙尚香的秒人出装核心思路,是围绕其一技能强化后的普攻构建极致爆发,通过暴击、物理穿透和攻击特效的
王者荣耀孙尚香秒人出装出什么
2026-02-27 14:34:45
在《喵喵的结合》中,中后期猫咪的培育决定了战斗和繁殖的效率。掌握房间属性、家具摆放和猫咪基因特性
喵喵的结合中后期猫咪培育技巧指南
2026-02-27 14:34:45
星露谷物语姜岛怎么去
解锁前往姜岛的资格,你需要完成游戏中的一项主要社区目标。具体有两条路径可供选择:其一是完成鹈鹕镇
星露谷物语姜岛怎么去
2026-02-27 14:34:43
最终幻想7重制版3确认沿用虚幻引擎4,保障开发稳定与效率
最终幻想7重制版3确认沿用虚幻引擎4,保障开发稳定与效率">
最终幻想7重制版3确认沿用虚幻引擎4,保障开发稳定与效率
2026-02-27 14:34:36
梦幻诛仙手游丹青怎么加点
丹青是法术输出门派,加点的核心始终围绕灵力展开。无论是追求极致伤害的爆发流,还是兼顾生存的平衡流
梦幻诛仙手游丹青怎么加点
2026-02-27 14:34:35
守望先锋阵营对抗战引爆社区 新英雄金驭强势助黑爪阵营持续领跑
守望先锋阵营对抗战引爆社区:新英雄金驭强势助黑爪阵营持续领跑">
守望先锋阵营对抗战引爆社区 新英雄金驭强势助黑爪阵营持续领跑
2026-02-27 14:34:33
程序需要调用以下重要权限:

t2-t1:23.0

t3-t2:26.0

t4-t3:58.0

t5-t4:15.0

t6-t5:22.0

t7-t6:0.0

t8-t7:188.0

t9-t8:23.0

t10-t9:13.0

t11-t10:5.0

t12-t11:7.0

t13-t12:3.0

九游云游戏
电脑也能玩手游 · 无需下载 · 不占空间 · 点击即玩
在线玩