悲剧了,3.2在电脑上测试没问题,但是拿到手机上还是不行……有没有大神能够解决啊。
——————————————————————————————————————————————————————————
才开始学习cocos不久,做一个关于物理引擎的练习。
就是一个小球在屏幕中移动,遇到四周边界就反弹。
基本就是根据论坛里的帖子:http://www.cocoachina.com/bbs/read.php?tid=221969来写的。
可是运行的时候刚开始还好,过一会(可能几秒钟,也可能半分钟)却会出现小球速度变慢,同时小球角度发生变化的情况。
在论坛上搜索查了半天也没有查出个所以然,有人说是帧率低的原因,可是我更改到每秒180帧了以后都还是一样。
谁知道是什么原因啊?该怎么解决?
代码如下:
Scene* HelloWorld::createScene() { // 'scene' is an autorelease object //创建有物理空间的场景 auto scene = Scene::createWithPhysics(); //设置Debug模式,你会看到物体的表面被线条包围,主要为了在调试中更容易地观察 scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL); auto layer = HelloWorld::create(); //把空间保持我们创建的层中,就是上面所说m_world的作用,方便后面设置空间的参数 layer->setPhyWorld(scene->getPhysicsWorld()); scene->addChild(layer); return scene; } bool HelloWorld::init() { ////////////////////////////// // 1. super init first if ( !Layer::init() ) { return false; } Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); auto ballOne = Sprite::create(); ballOne->setContentSize(Size(50, 50)); ballOne->setPosition(visibleSize.width / 2, visibleSize.height / 2); //创建物体,并且物体的形状为圆形,第一参数为半径,第二个参数为物体材质 //第三个参数为边的厚度,就是在Debug模式下看到的物体外面线条的厚度,默认为0 PhysicsBody* ballBodyOne = PhysicsBody::createCircle(ballOne->getContentSize().width / 2, PHYSICSBODY_MATERIAL_DEFAULT); //设置物体的恢复力 ballBodyOne->getShape(0)->setRestitution(1.0f); //设置物体的摩擦力 ballBodyOne->getShape(0)->setFriction(0.0f); //设置物体密度 ballBodyOne->getShape(0)->setDensity(1.0f); //设置物体是否受重力系数影响 ballBodyOne->setGravityEnable(false); //设置物体的冲力 Vect force = Vect(500000.0f, 500000.0f); ballBodyOne->applyImpulse(force); //把物体添加到精灵中 ballOne->setPhysicsBody(ballBodyOne); //设置标志 ballOne->setTag(1); this->addChild(ballOne); Sprite* edgeSpace = Sprite::create(); PhysicsBody* boundBody = PhysicsBody::createEdgeBox(visibleSize, PHYSICSBODY_MATERIAL_DEFAULT, 3); boundBody->getShape(0)->setFriction(0.0f); boundBody->getShape(0)->setRestitution(1.0f); edgeSpace->setPhysicsBody(boundBody); edgeSpace->setPosition(Point(visibleSize.width / 2, visibleSize.height / 2)); this->addChild(edgeSpace); edgeSpace->setTag(0); return true; } ```