egret p2物理引擎 遇到的坑(1)
直接将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
应该在和物体碰撞的时候不会发生穿破的现象
首先怀疑的是球体是不是没有设置刚体的原因,将球体的
type
同样设置成STATIC
试一下。。。。emmm发现自己是个智障,前面刚刚说了
STATIC
类型不能移动,如下图,完全不动怀疑球体
shape
形状有问题,目前的设置是这样的var boxShape:p2.Shape = new p2.Box({width:20,height:20})
暂时没解决,今天有点晚,准备休息了
world 和 地平线,小球都设置好了,或者说怎么让物理引擎运动起来
可能的情况有以下几种
- 设置刚体的
type
类型都是static
,静态的刚体是不能有位移发生 没有调
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);物体没有设置
mass
重量属性,或者视图绑定有问题
egret p2物理引擎 遇到的坑(1)的更多相关文章
- Egret中使用P2物理引擎
游戏中的对象按照物理规律移动,体现重力.引力.反作用力.加速度等物体特性,实现自由落体.摇摆运动.抛物线运动,以及物理碰撞现象的模拟.用于模拟物理碰撞.物理运动的引擎称为物理引擎. 来自瑞典斯德哥尔摩 ...
- 【h5游戏开发】egret引擎p2物理引擎 - 小球碰撞地面搞笑的物理现象
重力的方向和地面的问题 p2中默认的方向是从上到下,如果重力默认是正数的话,物体放到世界中是会从上面往下面飘的 p2中plane地面默认的方向是y轴的方向,而在p2中y轴的方向默认是从上往下 首先来看 ...
- P2物理引擎中文文档
P2物理引擎中文文档地址:https://github.com/schteppe/p2.js/wiki/Chinese-wiki-%E4%B8%AD%E6%96%87%E7%BB%B4%E5%9F%B ...
- p2.js物理引擎学习
P2简介 P2是一款基于Javascript编写的HTML5 2D物理引擎,和Box2D.Nape等2D物理引擎一样,P2集成了各种复杂的物理公式和算法,可以帮助我们轻松的实现碰撞.反弹等物理现象的模 ...
- Egret P2 入门学习资料
1 p2库下载: https://github.com/egret-labs/egret-game-library/tree/rc/4.1.0 2 p2 作者demo:https://github.c ...
- iOS开发——高级篇——UIDynamic 物理引擎
一.UIDynamic 1.简介什么是UIDynamicUIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象重力.弹性碰撞 ...
- HTML5之2D物理引擎 Box2D for javascript Games 系列 翻外篇--如何结合createJS应用box2d.js
太久没有更新了,新年回来工作,突然有收到网友的邮件提问,居然还有人在关注,惭愧,找了下电脑上还有一点儿存着,顺便先发这一个番外篇吧,好歹可以看到真实的效果,等我考完英语,一定会更新下一章," ...
- 物理引擎UIDynamic
nUIDynamic n什么是UIDynamic pUIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 p可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象 ü重力. ...
- UIDynamic物理引擎
iOS开发拓展篇—UIDynamic(简单介绍) 一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟 ...
随机推荐
- 「Codeforces 79D」Password
Description 有一个 01 序列 \(a_1,a_2,\cdots,a_n\),初始时全为 \(0\). 给定 \(m\) 个长度,分别为 \(l_1\sim l_m\). 每次可以选择一个 ...
- Two pointer方法
I.何为Two pointer 用两个哨兵指向两个序列,通过利用序列本身的性质减少遍历次数,来更快得解决一些归并问题 基本问题 给定一个正整数递增序列和一个正整数M,求序列中两个不同位置的a,b使得a ...
- Spring企业级程序设计 • 【第2章 Spring Bean管理进阶】
全部章节 >>>> 本章目录 2.1 bean标签和import标签 2.1.1 标签中的id属性和name属性 2.1.2 Bean的作用范围和生命周期 2.1.2 Be ...
- Java中List与数组互相转换
1.说明 在Java中,经常遇到需要List与数组互相转换的场景. List转换成数组,可以使用List的toArray()或者toArray(T[] a)方法. 数组转换成List,可以使用Arra ...
- C#中ref关键字的用法总结
ref表示引用的意思,C#中它有多种用法,这里简单总结一下: 1.按引用传递参数 具体可见:C#中的值传递与引用传递(in.out.ref) 2.引用局部变量 引用局部变量指的是在变量声明时使用ref ...
- 不用下载Axure RP Extension for Chrome插件查看原型文件的方法
Axure RP Extension for Chrome是一款谷歌插件,主要可以用来查看原型文件.以前安装插件的时候总是找半天资源,很麻烦,最近发现了一种新方法可以不用下载插件资源.其实在原型文件中 ...
- 强化学习实战 | 自定义gym环境之显示字符串
如果想用强化学习去实现扫雷.2048这种带有数字提示信息的游戏,自然是希望自定义 gym 环境时能把字符显示出来.上网查了很久,没有找到gym自带的图形工具Viewer可以显示字符串的信息,反而是通过 ...
- 终-Echart可视化学习(十二)
文档的源代码地址,需要的下载就可以了(访问密码:7567) https://url56.ctfile.com/f/34653256-527823386-04154f 进入官网寻找 里面可以搜素很多 这 ...
- 安霸pipeline简述之YUV域的处理
YUV域处理模块的详细介绍: YUV域的处理主要是rgb_to_yuv_matrix,chroma_scale,ASF(空域降噪),MCTF(时域降噪),SharpenB(锐化模块). RGB2YUV ...
- boot项目打包剔除配置文件(打包优化)
背景: 最近在项目开发中,在本地开发和线上部署的时候总是切换dev和pro环境,项目多了改起来还是很麻烦的,以下记录下boot项目的打包优化,打包的时候剔除配置文件,然后将配置文件手动放到线上,线上项 ...