Cocos2d-x3.8.1制作愤怒的小鸟
发表于2018-03-19
Cocos2d-x在html5游戏开发、Android游戏开发都有很广泛的使用。下面就以愤怒的小鸟的制作教程为例,给大家介绍Cocos2d-x引擎的使用。
使用Cocostudio对拉弓动作进行处理,设计很重要,设计的好可以事半功倍
Cocostudio设计如下:
对主角bird可以作为右绳子的子节点
并且各个节点的顺序我已经排好,这是我个人认为较好的排布方式
接下来打包发布为.csb文件,加载方式点击链接点击打开链接
接下来在代码实现绳子的旋转和拉升动作
void HelloWorld::ropeUP() { //设置绳子旋转角度与伸长长度 //将子节点坐标转化为世界坐标 auto bird_point=bird->convertToWorldSpace(bird->getPosition()); { //使用三角函数获取旋转角度 auto right_rope_angle=atan2((right_rope_point.y-point_moved.y),(right_rope_point.x-point_moved.x))*(float)180.0/PI; right_rope->runAction(RotateTo::create(0.001f,-right_rope_angle)); auto left_rope_angle=atan2((left_rope_point.y-bird_point.y),(left_rope_point.x-bird_point.x))*(float)180.0/PI; left_rope->runAction(RotateTo::create(0.001f,-left_rope_angle)); auto _y=(right_rope_point.y-point_moved.y)*(right_rope_point.y-point_moved.y); auto _x=(right_rope_point.x-point_moved.x)*(right_rope_point.x-point_moved.x); auto right_rope_length=sqrt(_x+_y); auto _y_left=(left_rope_point.y-bird_point.y)*(left_rope_point.y-bird_point.y); auto _x_left=(left_rope_point.x-bird_point.x)*(left_rope_point.x-bird_point.x); auto left_rope_length=sqrt(_x_left+_y_left); if (right_rope_length<=MAXLENGTH) { right_rope->setSize(Size(right_rope_length,11)); } if (right_rope_length<=MAXLENGTH/2) { left_rope->setSize(Size(left_rope_length*1.1,11)); } else { left_rope->setSize(Size(left_rope_length*1.6,11)); }
弹射方向和弹射速度需要
ropeLength=right_rope_length; width=(right_rope_point.x+left_rope_point.x)/2-bird->convertToWorldSpace(bird->getPosition()).x; height=(left_rope_point.y+right_rope_point.y)/2-bird->convertToWorldSpace(bird->getPosition()).y; } } //然后设置bird为physicsBody //当bird发射时给钢体一个速度,可以模拟抛物线运动 this->getPhysicsBody()->setVelocity(vec2);
最后障碍物
在Cocostudio设置基础容器,具体操作方式参考CocosStudio基础容器的加载和使用
注:在制作这个游戏过程中可能需要使用的两个知识:
1、将子节点坐标转化为世界坐标:
auto bird_point=bird->convertToWorldSpace(bird->getPosition());
2、创建不同block时,需要创建不规则钢体,这时需要使用Polygon多边形body
以下用三角形为例:
Vec2 points[]={Vec2(-40,-40),Vec2(0,40),Vec2(40,-40)}; node->setPhysicsBody(PhysicsBody::createPolygon(points,3));
设置形状是以shape中心点为Vec2(0,0),从左到右的顶点组成的数组作为函数第一个实参,第二个参数为顶点个数。但是事实发现该做法比较困恼,这时可以使用physicsEdit物理编辑器制作physicsBody,发布打包有个json文件,打开后会发现里面的参数有你需要的顶点坐标。
实现效果图如下:
来自:http://blog.csdn.net/qq_33747722/article/details/52744340