基于Cocos2d-x的2D光线效果雏形

本文介绍了如何基于Cocos2d-x游戏引擎实现2D光线效果。作者从一个网页版的效果受到启发,决定在Cocos2d-x上进行复现。通过初始化多边形顶点、添加光源精灵并处理触摸事件来移动光源,去除重复点,计算角度,以及处理光线与墙面的碰撞,逐步构建出2D光线效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个效果起初是在一篇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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值