悲剧了,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;
}
```





