这个效果起初是在一篇blog看见的,效果很赞,是网页版的,然后想在Cocos2d上实现下,然后就去做了。
blog地址:http://huangwei.pro/2015-08/game-sight-light/
我的github:https://github.com/pepsigit/Cocos2d/tree/master/2DLighgt
首先,在 .h 里面定义一下需要的结构体:
typedef struct LIGHTLINE
{
Point segA; // 光线的起始点
Point segB; // 光线的终止点
float t1;
}LightLine;
typedefstruct POINTANDANGLE
{
Point point; // 光源打在墙上的点
float angle; // 相对于光源的角度
}PointAndAngle;
是的,我们只需要这些。再来 .cpp 里面,现在初始化下多边形的顶点:
boolHelloWorld::InitSegments()
{
int subX =60;
int subY =0;
LightLine tmp;
// Border
tmp.segA = Vec2( origin.x,origin.y);
tmp.segB = Vec2( origin.x,origin.y +visibleSize.height );
m_segments.push_back(tmp);
tmp.segA = Point( origin.x,origin.y );
tmp.segB = Point( origin.x +visibleSize.width,origin.y );
m_segments.push_back(tmp);
tmp.segA = Point( origin.x,origin.y +visibleSize.height );
tmp.segB = Point( origin.x +visibleSize.width,origin.y + visibleSize.height );
m_segments.push_back(tmp);
tmp.segA = Point( origin.x +visibleSize.width,origin.y );
tmp.segB = Point( origin.x +visibleSize.width,origin.y + visibleSize.height );
m_segments.push_back(tmp);
// polygon #1
tmp.segA =Point(100-subX,150-subY );
tmp.segB =Point(120-subX, 50-subY );
m_segment