• 直接将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. Momentum and NAG

    目录 Momentum Nesterov accelerated gradient NESTEROV 的另外一个方法? Momentum Momentum的迭代公式为: \[v_t = \gamma ...

  2. MCMC using Hamiltonian dynamics

    目录 算法 符号说明 Hamilton方程 物理解释 一些性质 可逆 Reversibility H的不变性 保体积 Volume preservation 辛 Symplecticness 离散化H ...

  3. 【2021/12/31】uniapp之安卓原生插件开发教程

    uniapp之安卓原生插件开发教程 准备 hbuilderX,下载 app离线SDK,下载 Andorid Studio,安卓官方或中文社区 证书(可以自己准备,也可以使用android Studio ...

  4. iOS提交AppStore审核时:提示有其他支付并隐藏功能被拒的处理办法

    背景提示:数字类产品(比如购买会员等不需要配送实物的商品),Apple规定必须使用苹果IAP应用内支付,给Apple分成30%.打包的时候不要勾选微信或支付宝等其他支付方式.如果你提交的包里包含了微信 ...

  5. 对vector和map容器的删除元素操作

    /** * 删除头部元素 * 切割map到指定的个数 * @param map * @param i * @return */ map<int, Rect> PublicCardFrame ...

  6. 编写Java程序_连锁超市购物结算系统

    目录 功能需求: 一.Use Case 1 显示商品信息列表: 二.Use Case 2 输入购买商品编号 三.Use Case 3 显示购物结算清单 需求分级: 实现代码: 功能需求: Soft f ...

  7. JavaScript交互式网页设计 • 【第1章 JavaScript 基本语法】

    全部章节   >>>> 本章目录 1.1 JavaScript 概述 1.1.1 JavaScript 简介 1.1.2 JavaScript 的概念和执行原理 1.1.3 J ...

  8. gPRC基本介绍

    1.说明 gRPC英文全名为Google Remote Procedure Call, 即Google远程过程调用, 是Google发布的一个高性能.通用的开源RPC框架, 2.gRPC定义 gRPC ...

  9. SpringBootAdmin-使用踩坑

    一.版本选择 目前项目中使用的springcloud版本为 Hoxton.SR3,使用的spring-cloud-alibaba版本为2.2.1.RELEASE, 使用的springboot版本为2. ...

  10. 第10组 Beta冲刺 (4/5)(组长)

    1.1基本情况 ·队名:今晚不睡觉 ·组长博客: https://www.cnblogs.com/cpandbb/p/14018650.html ·作业博客:https://edu.cnblogs.c ...