Mudkip Mud Sport

Mudkip's Mud Sport Journal

从很久很久以前开始,「去日本旅行」就是一个非常非常重要的梦想,但因为总有一天会去实现,就一直没有付出行动。不知不觉时间已经到了2015年,终于在堆积了越来越多的愿望后,去办了护照,然后去找合适的旅行团,然后去Bilibili报了名,然后很快到了出发的日子。

Day 0

浦東空港 → 成田空港 → 秋葉原ホテル → 秋葉原ツアー(STEINS;GATEの巡礼/そば屋/メイド喫茶店/ポッ拳を遊ぶ)

11月13日清晨,仍然沉浸在一周前ASCOT之行的快乐回忆中,一边刷着久违的任天堂直面会情报,清醒过来的时候已经和几个同行的小伙伴集合,抵达了浦东国际机场。在Bilibiliyoo大白带领下领了随身Wi-Fi路由,换了日币,然后办了乘机手续,过了安检,乘上了一架波音777飞机。

说起来,这次旅行不仅是第一次出国,也是第一次乘飞机的经历。虽然想要装成不是第一次的样子,但降落的时候没有经验弄得耳膜好痛。下午3点多钟抵达成田机场,入境后就看到了漫游娘的旗帜和接下来几天带领我们的老司机。

然后乘京成电铁的车票抵达市区,从上野站走出看到地面的时候,虽然不到5点钟,不过由于冬天的原因已经天黑了。

乘JR来到了秋叶原,由于酒店就在秋叶原的中心,所以有充足的时间可以游览这个御宅圣地,同时秋叶原也是「命运石之门」「Love Live!」「俺妹」等很多作品的取景地。办理入住手续后,老司机就带我们游览一圈。

在JR车站不远处就看到了「世界的广播馆」,命运石之门中整个故事开始的地方,现在楼顶已经没有了5年前出现的时光机。

原来消失的是时光机被搬运到了这里。另外,整个秋叶原随处可见新作「命运石之门0」的宣传海报,然而想到PV里消失的助手和封印的凶真会有一点心酸呢。

逛到一家荞麦面馆吃了晚饭,说起来虽然秋叶原并不是吃货的圣地,但这几天吃到很多好吃的面已经很满足了w。接着去@home cafe女仆咖啡店喝了美味的抹茶拿铁,啊我才不会把合影交出来www。

走一家电玩店门口看到小朋友们在玩神拳于是就冲了进去。街机在日本仍然非常有活力,画面完全不输家用机。玩了几场对战感觉太棒了,尤其是假面皮卡丘。嘛期待Wii U版~

最后路过的一个卡拉OK店看到了「请问你要来点兔子吗?」中的纱路酱。

Read more »

iOS 应用中,处理和触摸有关的事件是一个必不可少的工作。UIKit 本身提供了丰富的常用 UIControl 控件,如 UIButton、UISwitch 等,使用这些控件时只需用 addTarget:action:forControlEvents: 或在 Storyboard 拖出一个 IBAction 就可以轻易实现事件响应;另外,各种各样的 UIGestureRecognizer 也可以为任何 UI 元素添加手势,实现所需的事件处理。

然而,许多场景下需要 App 干涉的 UI 元素的事件响应过程。例如,某个 UIButton 在设计中 frame 很小,而希望它的响应区域更大;或者,App 需要在某些情况下忽略 UIView 的层级关系决定响应 Tap 的元素。

iOS 采用一种叫 Hit-Testing 的方式决定接收触摸事件的元素,并提供了 hitTest:withEvent:pointInside:withEvent: 方法允许 View 决定自身是否接收事件,或具体接收事件的 subview,两个方法第一个参数均为一个相对于 View 自身 bounds 的 CGPoint

一般来说,UIView 在响应到触摸事件时会进行如下判定,同时这也是 hitTest:withEvent: 默认的实现:

  • 调用自身的 pointInside:withEvent: 方法
  • 若返回为 NO,则拒绝接受该事件,hitTest:withEvent: 返回 nil,Game Over
  • 依次调用自身所有 subview 的 hitTest:withEvent:,调用的顺序从最上层的 subview 开始,直到最底层的 subview 或中途返回了非 nil 的 UIView。
  • 如果在这个过程中遇到了非 nil 的 UIView,则把这个触摸事件交给它,自身的 hitTest:withEvent: 也会成功返回这个 UIView,到此为止。
  • 如果所有 subview 的 hitTest:withEvent: 方法返回均为 nil,则自身处理这个触摸事件,hitTest:withEvent: 方法也会返回 self。

pointInside:withEvent: 默认实现想必正如字面意思,判定触摸的 CGPoint 是否位于自身 bounds 内。另外需要注意的是,userInteractionEnabled 为 NO 的元素不会响应事件,如 UILabel 和 UIImageView 默认为 NO。

回到之前提到的场景,当 UIButton 自身 frame 过小,如何扩大它响应触摸的区域。一个最常见的做法是改变它的 frame,同时使用 imageEdgeInsetscontentEdgeInsets 等方式为它增加 padding,使 UIButton 的 frame 扩大而不增大它其中的内容。

但个人认为这并不是一种非常优雅的方式,设计师同学在设计时,考虑的一般是内容边缘距离父级元素或同级其他元素的距离,对应到用 Auto Layout 开发时,也就是一个相同数值的 NSLayoutConstraint。但若为了改变它的事件处理而改变 frame,配置约束时就会变得复杂和混乱。

而重载这个 UIButton 的 pointInside:withEvent: 方法就可以很好地解决这个问题,由于这个方法的第一个参数是相对于自身 bounds 的 CGPoint,只要判定这个点位于自身 bounds 外围指定距离内的 CGRect 内时返回 YES,就可以在 UIButton 外围响应触摸事件。

横滑滚动多个可以纵向滑动的 UIScrollView(UITableView)也是很多 App 中一个经典的交互设计。而若当这些纵向的 UIScrollView 需要一个公共的 ‘headerView’,并且在它们上滑的时候,希望 UIScrollView 中的内容能遮盖或推走这个 headerView,甚至这个 headerView 还存在可以响应事件的按钮的时候,问题就变得稍微有点微妙。

由于这个 ‘headerView’ 并不希望它属于每个纵向的 UIScrollView,不随着横向滑动而移动,所以它应当独立于横向滑动的 UIScrollView(UICollectionView)之外;由于希望纵向的 UIScrollView 滑动时可以用内容遮盖 headerView 的内容,所以它的层级应该位于横向的 UIScrollView 之下;另外,纵向的 UIScrollView 应该用 contentInset 或透明的 tableHeaderView 让下层的 headerView 露出来。

看到这里,我想很多同学会疑问“为什么不用两个纵向的 UIScrollView 嵌套起来”,不过想象一下在滑动内层的 UIScrollView 如何处理就变得头大了吧。

此时,这个 ‘headerView’ 由于位于下层,无法响应事件,如果其中有 UIButton,也无法被点击。而利用重载横向滑动的 UIScrollView hitTest:withEvent: 方法,在点击区域位于“本应属于 headerView”的位置时返回 nil,就可以很好地解决这个问题,它的 superview 也自然会把这个事件交给下一个 subview,即这个 headerView 来处理,而这个 headerView 亦会把事件交给对应的 UIButton,最终完成按钮的点击。我在处理这个问题时利用了一个透明的 tableHeaderView,在 hitTest:withEvent: 中调用了它的 super 方法,如果拿到的 UIView 正是这个 tableHeaderView,就直接返回 nil,否则返回 super 的结果。

关于这两个问题,我写了一个简单的 Demo,需要的童鞋可以移步 GitHub,有不同的想法欢迎扔 Issue : )

「如果说,有一个和我们所在的世界不同的丰缘地方,神奇宝贝的进化有点不同,也许不存在超进化,也许三千年前没有那场灾难。」——那同样是一个不能破坏的安宁的世界。

「或许存在另一个世界,你阻止了的人是我。」——在他的梦中,被唤醒的超古代神奇宝贝是另一只。

祐树来到未白镇的这一天,神奇宝贝多功能领航员上出现了未曾谋面,但却熟悉的面孔,通信画面上接下来的一言一行,都似记忆深处早已发生的真实。110号道路与小遥的对战,在强烈的既视感之中「再次」完败——唯一不同的只有沼跃鱼倒下前的神态。

在历史的长河中,总有许多命运的分界点上,自然亦或某个生命做出不同的选择,产生了错综复杂,但又相似收束的世界线。在某个时空中,紫菫没有成为室内都市,但那里的游乐场也没有因不能说的理由关闭;在某个时空中,关都四天王有不同于正义使者的过去;在某个时空中有会说话的喵喵和两人组成的三人组。

每一个生命都或多或少有种「命运探知」的能力,相信不只是曼珠、主角和敌对组织首领,每个人都有过Déjà vu的体验。如AG086,一个时空中某个虚构作品,恰是另一个时空的真实。如果能读到其他世界线中自己的记忆——甚至像XY036中一样,和另一个自己见面,一定可以「创造」或者「改变」什么。

2014年接触了很多平行世界题材的作品,Ever17的轮回,Virtue’s Last Reward的选择,命运石之门的跳跃;那些为了重要的东西努力改变世界线的故事,每一作都有很深刻的感动。至ORAS变幻篇章的最大收获,不仅仅是坚持「相信」喜欢的世界的存在,而且对于「哪一个」才是「真实」,也有了答案。

不过呢,在这个世界线变动率附近的范围内,现在这个数值就刚刚好呢: )

圣诞快乐。

参考:AzzyFox

image-1

In Sootopolis City, after the end of the extreme weather event.

Finally, it’s just two of us again.
I’ve got to say…thanks for everything you’ve done for our region, Swam.
You know, I thought we were supposed to have set out from Littleroot together, but…
But you, Swam…
It seems like you just keep getting further and further ahead of me…
I even started to feel like you’d gone somewhere I can’t even reach.
It’s pretty lonely, you know?
Not!
What would you think if I really said something like that?
Hee hee!

My dear May. Do you know what I’m thinking?

I mean, everything I were able to have done, begins with our first battle near the pool of Route 103, just like you said in Lilycove. I were merely a careless boy who knew nothing about Hoenn, but you welcomed me with the most beautiful smiling face on that day, and taught me how to battle, how to creep near Poochyena. You helped me and encouraged me every time.

I never feel I’m ahead of you. When we met at Lilycove, I noticed your Pokédex was nearly completed. You must have made great efforts to achieve this, and that’s the thing I lag behind you a lot. You are my best friend, and you are never alone.

So…When our journey comes to a new chapter, I wish we get back to Littleroot together, and I want we understand everything about each other and our Pokémon and share our journey together.

And…May we be together forever.

一周多前终于完成了3DS上的「Zero Escape: Virtue’s Last Reword」(極限脱出ADV 善人シボウデス)这部作品。40小时的游戏时间过后,虽然很多谜题和真相解开了,但是留下的困惑和谜题更多了,希望续作(如果有的话)能够一一释疑吧。

两年多前玩过DS上的前作「9小时9个人9之门」;VLR本作是美版发售就买来了,但因为等Bug修复补丁等了很久(现在也没出)加上胆小不能在平时玩(?)就拖了一年多,然后最近终于想起来一定要体验这作,差一点就错过了。

故事发生在2028年12月25日,前作的一年后,主角和其余8人被绑架到神秘的设施中,被迫参与密室逃脱以及囚徒困境的AB(Ally or Betray)游戏。9个人在游戏开始被佩戴了计数为3的腕表,当在进行几轮AB游戏后计数达到9时就可以脱出游戏,而计数小于等于0时则会遭到「处罚」。和前作一样,这场脱出游戏只是精心设计的密谋,并不是故事的真相。

以下内容涉及剧透,没有玩过本作品的同学请直接前往任天堂3DS eShop商店购买(或PSN购买Vita版),在完成全部结局后再回来看吧。这里推荐下载版是因为传说3DS版有在某个密室(PEC)存档可能损坏存档的Bug(其实我觉得也可能是Feature),下载版可以随时备份存档避免悲剧发生时的损失。

希望

其实一开始对极限脱出系列有兴趣有制作商Spike Chunsoft的原因,某种程度上「9小时9个人9之门」能找到「神奇宝贝不可思议的迷宫 时/暗之探险队」的影子,剧情中贯穿着隐藏的线索,时间和空间的融合,以及真相结局中包含着的「希望」。

两年前玩999的时候,相当喜欢「四叶草」的设定,四叶草书签的希望·信赖·爱·幸运是大家最终走到真相所必需的东西。而本作也有「希望」的要素,日文标题中的「シボウデス」可写作「死亡」不过也可以写作「志望」吧。

但是游戏的结局并没有看到「希望」,更多的是一种「宿命」的束缚,意识回到过去的Sigma的阻止根号6病毒扩散拯救世界的努力失败,而对45年间的Sigma来说,这一切是过去发生的事实,也因此(?)需要付出45年的努力实施阻止根号6病毒扩散的AB计划。

本作四叶和Alice登场的原因仅仅是为了增幅Sigma和Phi的能力,加上四叶的结局一如既往(?)是最惨痛的多少有些遗憾。但是四叶的人设依旧喜欢就是了,对于主角某些不合年龄(?)的表现的反应也是有趣的地方。

视点

在最终章「Another Time」中玩家的视角变成了K,但K却知道很多他「不该知道的事情」,茜最后表示「你不是K,你不需要遵守我们的规则,你是我们的系统里一个独特的变量」的时候,瞬间想到了打越钢太郎另一部作品「Ever17」中的设定,然后看到Wiki中讲PSV版中完成最终章的成就叫做「A Certain Point Of View」证实了我的猜测。

「我」就是「视点」,四次元生物「Blick Winkel」,在Sigma博士的影像中其实也暗示了更高次元智慧的存在;但是无论如何套用Ever17中Blick Winkel的所作所为,并不能拯救VLR中的世界,比起挽救两个人的生命,改变整个45年的历史对「视点」来说要难得多。

薛定谔的猫

Reality is shaped by what we believe reality should be.

在接触这作很久之前我就是薛定谔的猫的不科学解释(?)的支持者,因此从来回避体检一类的事情。本作引出了薛定谔的猫(如果外部世界是装着猫的盒子,这个密封设施是观察者),Phi线中也应用了一次这个理论(茜这次并没有被Dio所杀),最终章Alice说茜提到了解决悖论的办法就是「薛定谔的猫」,不过如何应用薛定谔的猫来拯救世界就要等到续作了。

Bluebird

Bluebird是Sigma送给Luna的音乐盒,来源于「メーテルリンクの青い鳥 チルチルミチルの冒険旅行」,包含了笼子里的鸟、幸福得而复失的寓意。

2028年12月31日究竟发生了什么,E路线的世界是否可以存在,Santa在做什么,Phi的真实身份等等谜题都需要在下一作中揭示。但由于日本销量不佳的原因,Spike Chunsoft暂停了极限脱出第三作开发。玩家为了表示对系列的支持发起了Operation Bluebird行动,很短的时间内就得到了上万支持;打越钢太郎目前正在进行其他作品的工作,如果顺利的话,之后极限脱出第三作恢复开发并不是不可能。

所以相信VLR续作一定会登场,比起整个AB计划,Operation Bluebird的成功要容易得多呢。

0%