Day17. 老鼠,老虎傻傻分不清楚?- Mouse(下)

来到操控滑鼠和物体互动的环节啦!

其实这个环节走完就有很多很多的互动可以做了,不知道讲到简单点击或拖曳行为的游戏大家会想到哪些呢?如 Flappy Bird、Angry Bird 这些有名的游戏,本身游戏的呈现也跟物理行为有一定挂勾,加上操作简单,只是单纯点击或拖曳,其实走完今天的内容,你也能做到一样的效果!

是不是听起来很耸动呀,一点也不,在 Matter.js 的模组里,我们可以简单的达到这些效果!

今天的Demo
今天的Demo原始码
https://ithelp.ithome.com.tw/upload/images/20211002/20142057mtzWKki2eO.png

今天来玩的模组会是 MouseConstraint ,尽管我们还没提到 Constraint 模组,我们还是可以先来看看 MouseConstraint,後面有机会我们再回头看看 Constraint 模组。

MouseConstraint 的用处,一言以蔽之就是,允许使用者透过这个模组让滑鼠和物体产生互动/位移。

这个模组只有一个方法,就叫做 create,其他详细的设置,都在那个 options 里。

Matter.MouseConstraint.create(engine, options)

创建的时候如果不给予 options,里面有些预设值就会自己创建新的东西、依预设绑定到特定对象上,如我们上篇提到的 mouse,即使你不先 create mouse,这边直接 create,options不带任何东西,也仍会为你自动 create 带着 default 值的 mouse,并绑定到 body 上。

我们来看一下范例的 options 里面到底会含有哪些 properties。

var mouseConstraintOptions = {
    type: 'mouseConstraint',
    mouse: mouse,
    element: null,
    body: null,
    constraint: Constraint.create({
                label: 'Mouse Constraint',
                pointA: mouse.position,
                pointB: { x: 0, y: 0 },
                length: 0.01, 
                stiffness: 0.1,
                angularStiffness: 1,
                render: {
                    strokeStyle: '#FFFFFF',
                    lineWidth: 3
                }}),
    collisionFilter: {
        category: 0x0001,
        mask: 0xFFFFFFFF,
        group: 0
    }
}

mouse 就是我们上篇提到的 Mouse 模组产出的物件,详细的内容可以回去看上篇。

collisionFilter 会是决定我们滑鼠操控的时候能碰撞的对象,详细内容可以参考 rigidbody的第三篇。

constraint 我们後面有机会在细讲,简单的说它会像是一个约束,如这个官网的例子,constraint 就是那些线,约束着球与定点的距离,常用来创造线或弹簧。

滑鼠会像是一个随着滑鼠行为移动的 constraint,去和物体做碰撞。

这种类物体的物件,也像物体一样有一个步骤要做:

Composite.add(engine.world, [mouseConstraint]);

没错,要把它加入我们的 world 里面,它才会正式出现。

https://ithelp.ithome.com.tw/upload/images/20211002/20142057FTbnITIpEJ.png

登登,在我们 runner 是静止的情况下,拉动滑鼠依然可以看到生成的 constraint,不过此时无法和物体产生互动,我们来按下 Run the runner 让 runner 跑起来。

https://ithelp.ithome.com.tw/upload/images/20211002/20142057GK1KKwhCVd.png

从物体的上方靠近,拉动物体,哇,你已经可以把物体拉起来了!

你会发现,可以对物体做到施力、拖曳等等操作,这些详细的影响会是要去看 constraint 的一些属性,另外 collisionFilter 也可以让你选定允许滑鼠互动的对象,善用这些属性,就能做出各种互动效果。

无论是透过昨天 mouse 物件本身的资料,还是今天 mouseConstraint 来跟物体互动,我们现在已经有一些手段来让滑鼠融入我们的世界里了,明天,我们来好好想想怎麽透过这个功能让弹珠台有一些可玩性。


<<:  Day 17: LeetCode 1143. Longest Common Subsequence

>>:  KSP Setup

计算资源及资料的设定03

在上一个章节,我们已经建立了一个Datatstore及Container,也上传资料到Contain...

[FLM] 比较5.19 / 5.20 / 6.00 三者不同处

延续 https://ithelp.ithome.com.tw/articles/10261533...

产品设计框架 - 双钻石产品设计法 Double Diamond

双钻石产品设计法,是由英国设计协会(Design Council)在2005年提出的设计流程,主要有...

【day8】居家办公的早餐diy卷饼

对比现在忙碌的工作 开始怀念过去两个月居家办公的时光 在相对有余裕的时候下厨 挑选自己喜欢的食物 一...

跨网域传值的神队友——window.postMessage

最近公司的EIP专案有个需求。主管在签核一览表里会点击要签核的单子另开一个视窗,需求单位希望主管签完...