libpng warning: iCCP: known incorrect sRGB profile
Initializing cpSpace - Chipmunk v6.2.1 (Debug Enabled)
Compile with -DNDEBUG defined to disable debug mode and runtime assertion checks
libpng warning: iCCP: known incorrect sRGB profile
libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: vector
后来发现是把变量写错了,下面贴上正常运行的代码
#include "NewPhysicsLayer.h"
Size NewPhysicsLayer::visibleSize = Size::ZERO;
Scene * NewPhysicsLayer::createScene(){
visibleSize = Director::getInstance()->getVisibleSize();
auto scene = Scene::createWithPhysics();//创建一个物理场景。
//在物理场景中设置重力加速度。默认是-98
scene->getPhysicsWorld()->setGravity(Vec2(0,-98));
scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);
auto layer = NewPhysicsLayer::create();//设置调试
scene->addChild(layer);
auto body = PhysicsBody::createEdgeBox(visibleSize,PHYSICSBODY_MATERIAL_DEFAULT,10,Vec2(0,0));
layer->setPhysicsBody(body);
body->setPositionOffset(Vec2(visibleSize.width/2.0,visibleSize.height/2.0));
return scene;
}
bool NewPhysicsLayer::init(){
if (!Layer::init()) {
return false;
}
addSprites();
return true;
}
void NewPhysicsLayer::addSprites(){
auto circleSp = Sprite::create("Ball.jpg");
circleSp->setPosition(visibleSize.width/2.0, visibleSize.height/2.0);
auto circleBody = PhysicsBody::createCircle(circleSp->getContentSize().width/2.0);
//设置缸体
circleSp->setPhysicsBody(circleBody);
//设置重力
//circleBody->setGravityEnable(true);
//设置质量
circleBody->setMass(100);
//设置速度
circleBody->setVelocity(Vec2(0,-100));
this->addChild(circleSp);
auto circleSp2= Sprite::create("Ball.jpg");
circleSp2->setPosition(300,circleSp2->getContentSize().height/2.0);
auto body2 = PhysicsBody::createCircle(circleSp->getContentSize().width/2.0);
circleSp2->setPhysicsBody(body2);
//body2->setDynamic(false);
this->addChild(circleSp2);
auto paoKuSp = Sprite::create("paoku 00188.png");
paoKuSp->setPosition(400,200);
this->addChild(paoKuSp);
std::vector <std::vector<Vec2>> shapes = this->getShapesFromPlistFile("pao.plist");
auto polygon = PhysicsBody::create();
for (auto shape : shapes) {
auto points = PhysicsShapePolygon::create(shape.data(), (int)shape.size());
polygon->addShape(points);
}
paoKuSp->setPhysicsBody(polygon);
// auto phygon = PhysicsBody::createPolygon(Vec2(0,0), 2);
}
std::vector<std::vector <Vec2>> NewPhysicsLayer::getShapesFromPlistFile(std::string fielename){
std::vector<std::vector<Vec2>> vectors;
//冲文件读取plist文件,内容存放到vector中
ValueVector vec = FileUtils::getInstance()->getValueVectorFromFile(fielename);
//遍历vec,得到其中所有的形状。
for (int i = 0; i < vec.size(); i++) {
ValueVector shape = vec.at(i).asValueVector();
std::vector<Vec2> points;
//把每一个形状的点放到points里面。
for (int j = 0; j < shape.size(); j++) {
Vec2 point = PointFromString(shape.at(j).asString());
points.push_back(point);//具体放点的操作
}
vectors.push_back(points);//具体存放形状。-
}
return vectors;
}