取得contenteditable中光标的坐标位置

开发安科编辑器时,需要在contenteditable中临时生成一个“ROLLDICE”输入框,并把输入框准确放在用户输入光标的位置。

常见的做法直接使用getRangeAt(0).getBoundingClientRect(),但当光标位于行首时,返回值将为0。因此在这种情况下需要临时添加一个span并用于计算出正确位置。

但如果光标处于文字之间时,添加span会导致光标移位,因此必须只在光标处于行首时使用这种方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//get the position of the cursor
let selection = window.getSelection();
let range = selection.getRangeAt(0);
let rect = range.getBoundingClientRect();
let topPosition = rect.top;
let leftPosition = rect.left;
//if the cursor is at the beginning of a line, the position is 0
if (topPosition === 0) {
//create a hidden node to get the correct position of the cursor
document.execCommand('insertHTML', false, '<span id="hiddenSpan"></span>');
let hiddenNode = document.getElementById('hiddenSpan');
let rect = hiddenNode.getBoundingClientRect();
topPosition = rect.top;
leftPosition = rect.left;
hiddenNode.parentNode.removeChild(hiddenNode);
}
// create the dicediv
// dicediv position must be absolute
let dicediv = document.createElement('div');
dicediv.className = "dice_div";
dicediv.style.left = leftPosition + "px";
dicediv.style.top = topPosition + "px";
editDiv.appendChild(dicediv);

Death Stranding——我们的双腿并非轮子

前言

死亡搁浅给我带来了相当独特的游戏体验,这个游戏优缺点并存,而且很多玩家都很欣赏游戏建设与互动的那部分内容。不过本文我想主要关注一下游戏的步行部分,讲一讲我是怎么看待死亡搁浅的步行系统的独特意义的。

20200811153310_1.jpg

read more

《Outer Wilds》——宇宙奇趣

前言

《三体2》在日本发售的时候,各个名家所写的推荐语中,有一句这样称赞《三体》:“绝妙的构思一个接一个毫不吝啬地展开,多到了让人觉得浪费的地步。”显然,《三体》作为图景宏大的科幻巨作,自然配得上如此称赞。而本文所介绍的《Outer Wilds》,其世界观与其相比则显得渺小了许多。

然而,在接触《Outer Wilds》不到一个小时后,这就是我心中浮现的称赞之词。而当我用20小时打通它后,我甚至觉得这句话毫不夸张。这些绝妙的构思,使得对于任何有关这个游戏的剧透——无论是文字上的还是视觉上的——都是莫大的遗憾。但同时,《Outer Wilds》中令人惊叹的设计实在太多,即便是剧透了结局,也并不足以消灭亲自体验的价值。

《Outer Wilds》最大的魅力就源自它的想象力,在一个方圆仅数十公里的太阳系中,游戏用真实和幻想相互调和,完美地把握着严谨地科学原理和童话般的妙想之间的交点,让两者严丝合缝,乃至于相互融合,难以区分,这恐怕是科幻的最高境界了。

然而不仅如此,游戏更是在这样精彩的想象中,基于简洁的玩家动作构造了复杂的解谜关卡流程——它将开放空间的解谜引导做到了近乎完美的地步,乃至于整个流程中玩家根本没有获取新的能力、甚至也没有获取新的钥匙,一切推动玩家前进的要素,全部都是信息、情报、线索。这也意味着只要玩家理解了整个游戏的谜底,就可以在新的存档里只用几分钟通关。

本文主要从视觉体验、关卡设计、叙事和音乐几个方面进行介绍鉴赏。

read more

射击游戏《SUPERHOT》简喷——一个很酷的DEMO

数年前就在这款游戏的官方网站玩到了web版本的demo。
如今买下来再一看,居然还是demo。 开发者也知道这是“最具创新”的FPS,然后他们就把这个想法挥霍了。
整个游戏从头到尾玩家能玩到的就是一个“慢动作”FPS而不是所谓的“极具创新的”“时间随移动而流逝”的FPS,这是因为它站在这个创意的基础上,游戏设计简陋,缺乏深入、完善和补全。

read more

HeatSignature——论把自己弄出飞船的100种方法

这游戏是Suspicious Developments做的,他们之前做过Gunpoint,也是个潜行间谍类游戏,不过是横版平台卷轴式的。
截止现在,我在steam上玩了这游戏80小时了,本来这游戏玩不了这么长时间的,但是这游戏对我来说就是无脑爽所以。。

read more