• 直接将pythsic包丢到libs目录下并且修改egretPropertis.json文件


TypeError [ERR_INVALID_ARG_TYPE]: The "to" argument must be of type string. Received type object
at validateString (internal/validators.js:125:11)
at Object.relative (path.js:493:5)
at C:\Users\mi\AppData\Roaming\EgretLauncher\download\EgretCompiler\@egret\egret-webpack-bundler\lib\egretproject\data.js:149:34
at Array.map (<anonymous>)
at EgretProjectData.getModulesConfig (C:\Users\mi\AppData\Roaming\EgretLauncher\download\EgretCompiler\@egret\egret-webpack-bundler\lib\egretproject\data.js:145:51)
at Object.getLibsFileList (C:\Users\mi\AppData\Roaming\EgretLauncher\download\EgretCompiler\@egret\egret-webpack-bundler\lib\egretproject\index.js:8:24)
at EgretWebpackBundler.startDevServer (C:\Users\mi\AppData\Roaming\EgretLauncher\download\EgretCompiler\@egret\egret-webpack-bundler\lib\index.js:47:38)
at C:\Users\mi\Documents\EgretProjects\keli_go\scripts\plugins\webpack-plugin.ts:59:21
at new Promise (<anonymous>)

原因分析

一般都是路径有问题,没有配置正确的p2包的具体文件路径**,to入参接收的是对象参数

解决方案

需要在egretProperties.json文件配置具体的path路径,具体如下:将physics.d.ts/physics.js/physics.min.js 放到 根目录/../physics目录下

然后将egretProperties.json添加配置项

{
"name":"physics",
"path":"../physics"
}
  • 修改配置文件和地址之后虽然编译不报错,但是在浏览器创建p2对象的时候还是会有找不到p2这个对象的问题

    Main.ts:89 Uncaught (in promise) ReferenceError: p2 is not defined
    at HelloWorld../src/Main.ts.HelloWorld.createWorld (Main.ts:89:22)
    at HelloWorld.<anonymous> (Main.ts:24:10)
    at step (main.js:80:19)
    at Object.next (main.js:61:49)
    at fulfilled (main.js:51:54)

    解决方案:

    需要使用`egret`自带的`wing`编辑器找到 插件-Egret项目工具-编译引擎
    
    点击进行编译,编译之后,再次打开项目即可
    
    ![截图](9e3c157f63630e22e7e4397976151e41.png)

    或者使用代码 egret build -e尝试进行手动编译

    编译成功的标志是

    libs/modules/路径下有编译出来的physics库文件目录

  • wrold,plane(地平线),物体都已经设置好并且添加到world中,但是并没有显示图案

    可能原因:没有给相关物理引擎中的物体绑定贴图,绑定贴图通过,p2.Body对象的displays属性进行绑定,示例

    this.display =  new egret.Shape()
    this.display.x = 100
    this.display.graphics.beginFill(0xff0000,1)
    this.display.graphics.drawCircle(0,0,(<p2.Box>boxShape).width)
    this.display.graphics.endFill()
    // this.display.width = (<p2.Box>bfoxShape).width
    // this.display.height = (<p2.Box>boxShape).height
    boxBody.displays = [this.display]

    通过绑定贴图之后,可以看到物理引擎中的body刚体对象也有了相应的贴图

  • 刚体设置材质为STATIC,物体碰撞仍然能够穿过物体表面

地面刚体初始化的属性是这样的

new p2.Body({
type:p2.Body.STATIC,
position:[0,stageHeight -100]
})

球体刚体初始化的属性是这样的

new p2.Body({ mass: 1, position: [200, 200], angularVelocity: 1})

这里刚体的type一共有三种类型:

Dynamic :动态, Dynamic类型刚体可以与任何类型的刚体交互,可以移动。

STATIC: 静态,Static类型刚体不可以移动,但是可以与 dynamic类型刚体交互。

Kinematic: 动态刚体,Kinematic类型刚体通过设置速度来控制,其他方面则和Static刚体相同。

讲道理这里设置了STATIC应该在和物体碰撞的时候不会发生穿破的现象

  1. 首先怀疑的是球体是不是没有设置刚体的原因,将球体的type同样设置成 STATIC试一下

    。。。。emmm发现自己是个智障,前面刚刚说了STATIC类型不能移动,如下图,完全不动

  2. 怀疑球体shape形状有问题,目前的设置是这样的

    var boxShape:p2.Shape =  new p2.Box({width:20,height:20})
    暂时没解决,今天有点晚,准备休息了
  • world 和 地平线,小球都设置好了,或者说怎么让物理引擎运动起来

可能的情况有以下几种

  1. 设置刚体的type类型都是static ,静态的刚体是不能有位移发生
  2. 没有调world.step()步进函数,使物理世界按照公式轨迹运行,使用定时器,或者在egret帧刷新事件绑定step函数,并且在函数中刷新egret视图位置

    //帧事件,步函数
    private update() {
    this.world.step(1);
    var l = this.world.bodies.length;
    for (var i:number = 0; i < l; i++) {
    var boxBody:p2.Body = this.world.bodies[i];
    var box:egret.DisplayObject = boxBody.displays[0];
    if (box) {
    //将刚体的坐标和角度赋值给显示对象
    box.x = boxBody.position[0];
    box.y = boxBody.position[1];
    //如果刚体当前状态为睡眠状态,将图片alpha设为0.5,否则为1
    if (boxBody.sleepState == p2.Body.SLEEPING) {
    box.alpha = 0.5;
    }
    else {
    box.alpha = 1;
    }
    }
    }
    } 主函数中,监听事件
    this.addEventListener(egret.Event.ENTER_FRAME,this.update,this);
  3. 物体没有设置mass重量属性,或者视图绑定有问题

egret p2物理引擎 遇到的坑(1)的更多相关文章

  1. Egret中使用P2物理引擎

    游戏中的对象按照物理规律移动,体现重力.引力.反作用力.加速度等物体特性,实现自由落体.摇摆运动.抛物线运动,以及物理碰撞现象的模拟.用于模拟物理碰撞.物理运动的引擎称为物理引擎. 来自瑞典斯德哥尔摩 ...

  2. 【h5游戏开发】egret引擎p2物理引擎 - 小球碰撞地面搞笑的物理现象

    重力的方向和地面的问题 p2中默认的方向是从上到下,如果重力默认是正数的话,物体放到世界中是会从上面往下面飘的 p2中plane地面默认的方向是y轴的方向,而在p2中y轴的方向默认是从上往下 首先来看 ...

  3. P2物理引擎中文文档

    P2物理引擎中文文档地址:https://github.com/schteppe/p2.js/wiki/Chinese-wiki-%E4%B8%AD%E6%96%87%E7%BB%B4%E5%9F%B ...

  4. p2.js物理引擎学习

    P2简介 P2是一款基于Javascript编写的HTML5 2D物理引擎,和Box2D.Nape等2D物理引擎一样,P2集成了各种复杂的物理公式和算法,可以帮助我们轻松的实现碰撞.反弹等物理现象的模 ...

  5. Egret P2 入门学习资料

    1 p2库下载: https://github.com/egret-labs/egret-game-library/tree/rc/4.1.0 2 p2 作者demo:https://github.c ...

  6. iOS开发——高级篇——UIDynamic 物理引擎

    一.UIDynamic 1.简介什么是UIDynamicUIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象重力.弹性碰撞 ...

  7. HTML5之2D物理引擎 Box2D for javascript Games 系列 翻外篇--如何结合createJS应用box2d.js

    太久没有更新了,新年回来工作,突然有收到网友的邮件提问,居然还有人在关注,惭愧,找了下电脑上还有一点儿存着,顺便先发这一个番外篇吧,好歹可以看到真实的效果,等我考完英语,一定会更新下一章," ...

  8. 物理引擎UIDynamic

    nUIDynamic   n什么是UIDynamic pUIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 p可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象 ü重力. ...

  9. UIDynamic物理引擎

    iOS开发拓展篇—UIDynamic(简单介绍) 一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟 ...

随机推荐

  1. 1298 - One Theorem, One Year

    1298 - One Theorem, One Year   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: ...

  2. KMM

    目录 概 主要内容 Huang J., Smola A., Gretton A., Borgwardt K. & Scholkopf B. Correcting Sample Selectio ...

  3. PS8625替代方案CS5211|CS5211可以替代兼容PS8625方案|DP转LVDS芯片方案

    PS8625|Parade普瑞 PS8625|Parade普瑞 PS8625芯片|Parade普瑞 PS8625方案|Parade普瑞 PS8625芯片代理|DP转LVDS|PS8625替代方案CS5 ...

  4. 如何通过Navicat远程访问宝塔面板安装的MySQL数据库

    运行环境描述 阿里云ECS 系统:CentOS Linux 7.4.1708 (Core)宝塔面板: 6.9.0数据库:MySQL 5.7.19 Navicat 远程连接 Navicat报错信息: 错 ...

  5. 【MySQL作业】外连接查询——美和易思外连接查询应用习题

    点击打开所使用到的数据库>>> 1.使用左接获取所有客户的基本信息以及订购信息,要求输出客户姓名.电话.订单 ID 和下单时间. 由于需要获取所有客户的基本信息,如果采用左连接加以实 ...

  6. Java高级程序设计笔记 • 【第2章 多线程(一)】

    全部章节   >>>> 本章目录 2.1 线程的概述 2.1.1 进程 2.1.2 多线程优势 2.1.3 Thread 类 2.1.4 实践练习 2.2 Runnable接口 ...

  7. 编写Java程序,利用List实现报数游戏的实现思路

    返回本章节 返回作业目录 需求说明: 利用List实现报数游戏 在控制台输入一个大于3的正整数,该整数表示有多少人,如在控制台输入10,表示有10个人,10个人围成一个圆圈,从序号1开始为这些人依次编 ...

  8. 访问局域网内其他主机的VMware虚拟机上的mysql数据库和redis缓存

    上一篇写了访问局域网内其他主机的虚拟机上的项目 ,现在说说访问局域网内其他主机的虚拟机上的数据库和缓存 博主使用的linux是Ubuntu16.04: 一.安装数据库和缓存 这里连接的数据库和缓存以m ...

  9. js 盒子逐渐缓慢移动效果

    注释:可以用于盒子弹出,收回效果,比如:某东的产品详情页,侧边有购物车.优惠卷等,鼠标经过弹出效果 可以看这个网址使用案例:https://www.cnblogs.com/jq-growup/p/15 ...

  10. 初识python: 小练习 之 笔记本电脑开机指定时间之后自动拍照并发送邮件

    需求: 1.调用笔记本的摄像头,拍摄笔记本面前的照片:2.将照片发送给指定邮箱:3.发送邮件,提醒我们电脑已经开机,并附上笔记本拍摄的照片. 面向过程: #!/user/bin env python ...