资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

javascript睡眠,js 睡眠

matter.js 如何移动刚体

Matter.js 中基础的概念

成都创新互联专注于兴庆企业网站建设,成都响应式网站建设,商城系统网站开发。兴庆网站建设公司,为兴庆等地区提供建站服务。全流程按需设计网站,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务

大多数的物理引擎对于物理模拟的要素都有着相近的概念,不同的引擎差别在于使用的方式,功能的全面性,模拟的精细度等层面,下面就先从物理世界的基础概念讲起。

Engine(引擎)和 World(世界)

Matter.Engine 模块包含了创建和处理引擎的方法,引擎是负责管理和更新模拟世界的控制器,引擎可以控制时间的缩放,可以检测所有的碰撞事件,并且拿到所有碰撞的物体对(pairs)。

在 Matter.js 中任何的物体都需要一个容身处,而存放这些物体的地方,我们称之为世界,物体必须添加到世界里,然后由引擎运行这个世界。而创建世界需要使用到 Matter.World模块,该模块包含了用于创建和操作世界的方法,一个 Matter.World 相当于一个复合物体,物体、约束、复合物体的聚合体,其次世界还有额外的一些属性,比如重力、边界。

Render(渲染)

JavaScript

1

2

3

4

5

6

7

8

9

10

// Matter.Render 用法

var engine = Engine.create();

// ... 将物体加入到世界中

var render = Render.create({

element: document.body,

engine: engine,

options: options

});

Engine.run(engine);

Render.run(render);

element 是一个容器元素,使用时指定要渲染的节点

engine 指定为 Matter.Engine 实例

options 指定一些渲染的参数

Matter.Render 是将实例渲染到 Canvas 中的渲染器,控制视图层的样式,它的主要作用是用于开发和调试,默认情况下 Matter.Render 将只显示物体的线框(轮廓),这对于开发和调试很有帮助,但如果需要使用到全局实体渲染则需要将线框模式关闭 render.options.wireframes = false,另外它同样也适合制作一些简单的游戏,因为它包括了一些绘图选项、线框、向量、Sprite 精灵和视窗功能。

DEMO 戳这里

Body(刚体)

物体或者叫刚体,在物理引擎里特指坚硬的物体,具有固定的形状,不能形变。刚体可以用于表示一个箱子、一个球或是一块木头,每个物体都有自己的物理属性,质量、速度、摩擦力、角度等,还可以设置刚体的标记。Matter.Bodies 模块中内置了几种刚体,矩形 Matter.rectangle、多边形 Matter.polygon、圆形 Matter.circle 、梯形 Matter.trapezoid 等等。

JavaScript

1

2

3

4

5

6

7

// 创建刚体

var rect = Bodies.rectangle(200, 100, 50, 50), // 矩形

circle = Bodies.circle(300, 100, 25), // 圆

polygon = Bodies.polygon(450, 100, 5, 25), // 多边形

trapezoid = Bodies.trapezoid(590, 100, 50, 50, 3); // 梯形

// 将刚体添加到世界中

World.add(engine.world, [rect, circle, polygon, trapezoid]);

DEMO 戳这里

Composite(复合体)

由刚体和复合材料通过约束组合在一起的就叫做复合体。复合体对外当作一个刚体,复合体的物理属性是通过所包含的刚体的属性综合计算出来的。Matter.Composite 模块包含用于创建和处理复合体的方法,另外还有一个 Matter.Composites 模块,提供了几种特别的复合材料,例如 链 Composites.chain、牛顿摆球 Composites.newtonsCradle、软体 Composites.softBody、汽车 Composites.car 、堆叠 Composites.stack 等等。

桥梁

JavaScript

1

2

3

4

5

6

7

8

9

10

11

// 使用堆叠创建桥梁

var group = Body.nextGroup(true);

var bridge = Composites.stack(150, 300, 9, 1, 10, 10, function(x, y) {

return Bodies.rectangle(x, y, 50, 20, {

collisionFilter: { // 过滤碰撞

group: group

}

});

});

// 创建链约束

Composites.chain(bridge, 0.5, 0, -0.5, 0, { stiffness: 0.9 });

DEMO 戳这里

JavaScript

1

2

3

4

5

6

7

8

9

10

// 软体

var cloth = Composites.softBody(200, 200, 20, 12, 5, 5, false, 8, {

friction: 0.00001, // 摩擦力

collisionFilter: {

group: Body.nextGroup(true)

},

render: {

visible: false

}

});

DEMO 戳这里

牛顿摆球

JavaScript

1

2

// 创建牛顿摆球

var newtonsCradle = Composites.newtonsCradle(300, 320, 5, 25, 150);

DEMO 戳这里

Constraint(约束)

约束可理解为通过一条线,将刚体 A 和刚体 B 两个刚体连接起来,被约束的两个刚体由于被连接在了一起,移动就相互受到了限制。Matter.Constraint 模块包含了用于创建和处理约束的方法,这个约束可以很宽松,也可以很紧绷,还可以定义约束的距离,约束具有弹性,可以用来当作橡皮筋。

JavaScript

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

// 创建一个矩形和圆形

var rect = Bodies.rectangle(400, 100, 50, 50, {

isStatic: true

}),

ball = Bodies.circle(400, 400, 50);

World.add(engine.world, [

rect,

ball,

Constraint.create({

bodyA: rect, // 约束刚体 A

pointA : { // 约束点 A

x: 0,

y: 0

},

bodyB: ball, // 约束刚体 B

pointB: { // 约束点 B

x: 0,

y: -50

},

stiffness: 0.6

})

]);

DEMO 戳这里

MouseConstraint(鼠标约束)

如果你想让刚体与用户之间有交互,那就要在鼠标和刚体之间建立连接,也就是鼠标和刚体间的约束,Matter.MouseConstraint 模块包含用于创建鼠标约束的方法,提供通过鼠标或触摸(移动端时)移动刚体的能力,可以设置什么标记的物体才能被鼠标操纵,创建鼠标约束后,可以捕获到鼠标的各类事件。

JavaScript

1

2

3

4

5

// 全局鼠标约束

var mouseConstraint = MouseConstraint.create({

element: render.canvas

});

World.add(engine.world, mouseConstraint);

JavaScript

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

// 设置某个标记的物体才能被鼠标操纵

var categoryBall = 0x0001; // 分类

var ball = Matter.Bodies.circle(300, 350, 32, {

density: 0.68, // 密度

restitution: 1, // 弹性

collisionFilter: {

category: categoryBall

}

});

var mouseConstraint = MouseConstraint.create({

element: render.canvas,

collisionFilter: {

mask: categoryBall

}

});

World.add(engine.world, mouseConstraint);

DEMO 戳这里

Vector(向量)

Matter.Vector 模块包含用于创建和操纵向量的方法,向量是引擎有关几何操作行为的基础,修改物体的运动状态基本都是使用向量来控制,例如赋予物体一个力,或者设置物体的速度、旋转角度,并且内置了多个向量的求解函数:向量积、标量积、格式化、垂直向量等等。

Events(事件)

Matter.Events 模块包含了绑定、移除和触发对象的方法。

绑定事件 Matter.Events.on(object, eventNames, callback)

移除事件 Matter.Events.off(object, eventNames, callback)

触发事件 Matter.Events.trigger(object, eventNames, event)

Matter.js 中的一些属性

施加力

Matter.Body.applyForce(body, position, force) 方法可以给刚体施加一个力,传入 X 和 Y 轴需要的力度值,通过这个方法你可以去模拟踢一个足球、投一个篮球的效果。

JavaScript

1

2

3

4

5

6

7

8

9

10

11

12

13

var ball = Bodies.circle(300, 100, 25, {

density: 0.68, // 密度

restitution: 0.8 // 弹性

});

World.add(engine.world, ball);

function addForce() {

var forceMagnitude = 0.02 * ball.mass;

Body.applyForce(ball, ball.position, {

x : (forceMagnitude + Common.random() * forceMagnitude) * Common.choose([1, -1]),

y : -forceMagnitude + Common.random() * -forceMagnitude

});

}

addForce();

DEMO 戳这里

重力

可以设置 X、Y 轴的重力值,默认都为 1,参数在 0、1、-1 中选择使用。

JavaScript

1

2

3

4

// 实现反重力效果

engine.world.gravity.y = -1;

// 无重力效果

engine.world.gravity.y = 0;

DEMO 戳这里

睡眠状态

通过 enableSleeping: true 开启睡眠模式后,当刚体处于不受作用状态时,会进入睡眠状态,这样可以有效的提高引擎的性能,当物体被其他物体碰撞或者对刚体施加力时,刚体会被叫醒,引擎会继续对其进行计算模拟。

JavaScript

1

2

3

4

5

6

7

8

// 开启睡眠状态

var engine = Engine.create({

enableSleeping: true

});

// 还可以针对进入睡眠状态的刚体进行监听,比如将刚体移出世界

Event.on(ball, "sleepStart", function() {

World.remove(engine.world, ball);

});

DEMO 戳这里

摩擦力

摩擦力在 Matter.js 中分别提供了三种:摩擦力 friction、空气摩擦力 frictionAir 以及静止摩擦力 frictionStatic。friction 默认值是 0.1,取值范围在 0 – 1,当值为 0 意味着刚体可以摩擦力的无限滑动,1 意味着对刚体施加力后会立刻停止,frictionAir 默认值是 0.01,取值范围 0 – 1,当值为 0 意味着刚体在空间中移动时速度永远不会减慢,值越高时刚体在空间的移动速度越慢,frictionStatic 默认值 0.5,当值为 0 时意味着刚体几乎是静止的,值越高时意味着需要移动刚体所需的力就越大。

JavaScript

1

2

3

4

5

6

7

8

9

10

11

12

// 摩擦力

Bodies.rectangle(300, 70, 40, 40, {

friction: 0.01

})

// 空气摩擦力

Bodies.rectangle(300, 70, 40, 40, {

frictionAir: 0.05

})

// 静止摩擦力

Bodies.rectangle(300, 70, 40, 40, {

frictionStatic: 1

})

时间缩放

可以控制全局的时间,当值为 0 时为冻结模拟,值为 0.1 给出慢动作效果,值为 1.2 时给出加速效果。

JavaScript

1

engine.timing.timeScale = 0.1;

这里就简单提及到几个属性,当然还有更多的属性比如:视图(View)、弹性(Restitution)等等,更详细的 API 可到官网查看。

Matter.js 调试

除了前面讲 Matter.Render 模块的时候提到的线框模式 wireframes 便于调试外,Matter.Render 模块其实还为我们提供了以下几种方法,便于我们自定义调试选项:

JavaScript

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

var render = Render.create({

element: document.body,

engine: engine,

options: {

width: 800,

height: 600,

pixelRatio: 1, // 设置像素比

background: '#fafafa', // 全局渲染模式时背景色

wireframeBackground: '#222', // 线框模式时背景色

hasBounds: false,

enabled: true,

wireframes: true, // 线框模式

showSleeping: true, // 刚体睡眠状态

showDebug: false, // Debug 信息

showBroadphase: false, // 粗测阶段

showBounds: false, // 刚体的界限

showVelocity: false, // 移动刚体时速度

showCollisions: false, // 刚体碰撞点

showSeparations: false, // 刚体分离

showAxes: false, // 刚体轴线

showPositions: false, // 刚体位置

showAngleIndicator: false, // 刚体转角指示

showIds: false, // 显示每个刚体的 ID

showVertexNumbers: false, // 刚体顶点数

showConvexHulls: false, // 刚体凸包点

showInternalEdges: false, // 刚体内部边界

showMousePosition: false // 鼠标约束线

}

});

另外官方提供了三个调试工具,可单独使用或一起使用,如下:

工具:

MatterTools.Demo 用于运行和测试 DEMO

MatterTools.Gui 改变引擎的属性

MatterTools.Inspector 检查世界

为什么电脑按了睡眠,但不会进入睡眠状态

试试这两种方案:

Win7下点击开始菜单里的"睡眠"按钮没法正常睡眠, 现象是屏幕会关掉, 但是硬盘 USB设备风扇等等都还在运转, 鼠标一滑动就会回到欢迎屏幕.原以为这是什么地方设置不正确导致的问题, 于是逐一排除: BIOS设置正常; 所有硬件驱动安装正确; 电源选项里的混合睡眠已经关掉了, 定时唤醒什么的也都关掉了; 设备管理器里面所有设备的"允许该设备唤醒计算机"也都已经取消掉了, 在DOS命令行下输入"powercfg -a", 显示S3模式工作正常. 最后, 最重要的是, 如果离开一段时间不操作电脑, 它是可以自动进入睡眠状态的, 这说明睡眠功能本身工作正常.

解决办法:开启"离开模式"的方法是: 进入注册表的HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerPower, 在右侧新建一个"DWORD 32位"值, 命名为"AwayModeEnabled", 并赋值为1.至于关闭该模式, 只要把值改成0或者删除这个键值就行了. 原因:在"离开模式"下, 当你点击"睡眠"的时候, 硬盘还有网络等等都不会关闭, 唯一明显被关掉的设备似乎只有显示器. 在"离开模式"下面你可以继续进行通宵下载. 但是感觉这个功能没什么用, 反正显示器会自动关闭, 而且它还要占用系统的"睡眠"按钮, 如果你的机器上睡眠功能不正常, 也可以检查一下这个"离开模式"是否被开启了.

2.原本可以进入睡眠模式并能正常唤醒的Windows 7计算机,更新至Windows 7 SP1后可能会无法正确进入睡眠模式(并可能导致系统假死),必须通过电源开关来强制重启系统,重启后会显示上一次计算机没有正确关闭的错误报告。解决办法:1. 安装 kb2495523 补丁通过腾讯电脑管家、百度卫士等等电脑防护软件的补丁管理自动下载所需补丁。2. 如果上述补丁依然未能修复这个问题,可以尝试以下方法;进入控制面板系统和安全电源选项;点击首选计划右侧的“更改计划设置”;接着点击“更改高级电源设置”;找到“睡眠”选项并展开,将“允许混合睡眠”设置为“关闭”,最后确定退出。备注1:若找不到“允许混合睡眠”选项,需要以管理员身份启动命令提示符,然后输入“powercfg -h on”回车,就能激活这个选项。备注2:根据technet上一些用户描述,将上述高级电源设置里最后一项“Internet Explorer”下的“JavaScript计时器频率”设置为“最大电源节省量”,这样也可以解决无法进入睡眠模式的问题。但是,这个选项需要安装IE9之后才会出现,已安装IE9用户可以尝试。

什么歌曲可以促进睡眠

常见的催眠音乐曲目有哪些?_睡眠

常见的催眠音乐曲目有哪些? ... 《催眠曲》、《妈妈》、《宝贝》等 ... 《阳关三叠》、《良宵》、《梅花三弄》、《宫秋月》、《黛玉葬花》、《霸王御甲》、《高山流水》、《鱼中游》 ... 》、《海滨之夜》、《秋思》、《小草》 ...

- 11k - 2005年12月28日 - 网页快照 - 更多此站结果

睡眠,常见的催眠音乐曲目有哪些?

常见的催眠音乐曲目有哪些? 本文章关键词:睡眠 请输入关键词搜索更多 ... 《催眠曲》、《妈妈》、《宝贝》等 ... 《阳关三叠》、《良宵》、《梅花三弄》、《宫秋月》、《黛玉葬花》、《霸王御甲》、《高山流水》、《鱼中游》 ... 》、《海滨之夜》、《秋思》、《小草》 ...

- 18k - 2006年4月5日 - 网页快照 - 更多此站结果

新闻晚报

IE版本需6.0或以上 |女性周刊| 2004年12月25日 音乐催 ... 《阳关三叠》、《良宵》、《梅花三弄》、《宫秋月》、《黛玉葬花》、《霸王御甲》 ... 情》、《天涯歌女》、《太湖美》、《江南好》、《海滨之 ... 催眠名曲:《催眠曲》、《妈妈》、《宝贝》 当然还 ...

jfdaily.com.cn/.../node38/node48922/node48948/userobject1ai742405.html - 10k - 2004年12月25日 - 网页快照

新闻晚报

音乐催人入眠 你喜欢音乐吗?音乐可以调节人们的情绪,解除病人 ... 《阳关三叠》、《良宵》、《梅花三弄》、《宫秋月》、《黛玉葬花》、《霸王御甲》、《高山流水》、《鱼中游》 ... 》、《天涯歌女》、《太湖美》、《江南好》、《 ... 《催眠曲》、《妈妈》、《宝贝》 ...

jfdaily.com.cn/gb/.../node4324/node42726/userobject1ai742583.html - 8k - 2004年12月26日 - 网页快照 - 更多此站结果

[转帖]心理音乐

新 闻 搜 索 新闻标题 新闻内容 [转帖]心理音乐 双击自动滚屏 ... 》、《烛影摇红》、《军港之夜》、《宝贝》、《大海一样的深情》、《锒河会》、以及门德尔松的《仲夏夜之梦》、莫扎特的《催眠曲》 ... 妈妈好》《雷峰之歌》《北京的金山上》 ...

- 10k - 2006年4月29日 - 网页快照 - 更多此站结果

长假最后一天收拾心神调整睡眠 改善睡眠八招_新浪上海

长假最后一天收拾心神调整睡眠 改善睡眠八招 陈烨 2004年10月07日16:58 新闻晚报 ... 催眠曲,如《催眠曲》、《妈妈》、《宝贝》等。 其次,也可选择国内治疗失眠比较流行的一些曲目,主要分3类: 1.古乐:如《阳关三叠》、《良宵》、《梅花三弄》、《黛玉葬花》、《高山流水 ...

sh.sina.com.cn/news/20041007/165840354.shtml - 17k - 2005年9月24日 - 网页快照 - 更多此站结果

常见的催眠音乐曲目有哪些

常见的催眠音乐曲目有哪些. 作者:未知 ... 的是催眠曲,如东南亚 ... 《催眠曲》、《妈妈》、《宝贝》等。. 在我国目前比较流行的曲目主要有以下几种: (1)古代曲目:有《阳关三叠》、《良宵》、《梅花三弄》、《宫秋月》、《黛玉葬花》 ...

- 16k - 2006年1月1日 - 网页快照 - 更多此站结果

常见的催眠音乐曲目有哪些?

常见的催眠音乐曲目有哪些? 热. 【字体:小 大】. 常见的催眠 ... 的是催眠曲,如东南亚 ... 《催眠曲》、《妈妈》、《宝贝》等。. 在我国目前比较流行的曲目主要有以下几种: (1)古代曲目:有《阳关三叠》、《良宵》、《梅花三弄》、《宫秋月》、《黛玉葬花》 ...

- 14k - 2005年1月4日 - 网页快照 - 更多此站结果

陶乐思《恶棍别耍酷》(《恶灵古堡》第二部)

陶乐思《恶棍别耍酷》(《恶灵古堡》第二部) 【字体:小 大】. 陶乐思《恶棍别耍酷》(《恶灵古堡》第二部) ... 看来你是挺宝贝你的新婚妻子哦!"他 ...

books.lyt99.cn/Article/Class444/200511/2031.html - 159k - 2006年2月2日 - 更多此站结果

常见的催眠音乐曲目有哪些?(各科保健)

在我国目前比较流行的曲目主要有以下几种: ... 应选择的是催眠曲,如东南亚、前苏联等 ... 证明,例如《催眠曲》、《妈妈》、《宝贝》等 ... 《阳关三叠》、《良宵》、《梅花三弄》、《宫秋月》、《黛玉葬花》、《霸王御甲》、《高山流水》、《鱼中游》 ...

HTML5 canvas 怎样防止屏幕自动睡眠并检测手机和平板锁屏事件

HTML5 canvas 怎样防止屏幕自动睡眠并检测手机和平板锁屏事件

在Android中循环播放一秒(时间很短)的视频可以阻止自动睡眠,终于不需要用那些还没有正式被浏览器支持的新API了。而iOS似乎是用JavaScript的定时器不断self.location的方式阻止屏幕自动睡眠的,但据说iOS7无效。。。

在Android用Page Visitable API可以检测到锁屏事件,但在iOS7测试无效,其他版本的iOS不清楚。

jquery代码如何做到休眠几秒

不需要使用jquery,使用javascript的setTimeout()即可实现:

window.onload = function(){

setTimeout("location.reload()",2000);

}

js 中的for循环 怎么睡眠几秒?就是循环1次睡眠3秒?

在js中,是没有睡眠这个概率的。

因为js语句是自上而下执行的,这样语句一触发,就会接着往小执行其他的代码,不会等着语句执行完毕。

所有,你这里需要的这个"睡眠",就算存在,那也只是延迟了for循环里面的代码的"执行",并不会延迟for本身的执行,我这里说的"延迟了for循环里面的代码的执行",是for循环内部的语句,一次性执行for所循环的次数次(这里可能有点难明白,比如for执行10次,延迟3秒,那for里面的代码会在延迟3秒后,一次性执行10次)。

如果要达到这个要求,就需要模拟"睡眠",使用定时器(setInterval)或者延时器(setTimeout):

//lst:需要循环的集合,timer:需要延迟的时间(单位:S)

function for_Interva(lst,timer){

var index=0;

var Intertimer=setInterval(function(){

//操作集合中第lst[index]个;

//集合小标+1;

index+=1;

//判断index是否达到集合最后一个

if(index=lst.length){

//如果达到了,就清除定时器,停止循环

clearInterval(Intertimer);

}

},timer);

}

function for_ITimeout(lst,timer){

var index=0;

function timeoutfor(){

//操作集合中第lst[index]个;

//集合小标+1;

index+=1;

//判断index是否达到集合最后一个

if(indexlst.length){

//没有达标,就继续循环。达标后,不会进入此if

Timeout(function(){

timeoutfor();

},timer);

}

}

Timeout(function(){

timeoutfor();

},timer);

}


名称栏目:javascript睡眠,js 睡眠
网站网址:http://www.cdkjz.cn/article/phgojp.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220