怪物消消乐record1



碰到问题,发现碰撞体积有问题:

在战斗主场景调用bullet->getBoundingBox().intersectsRect(monster->getBoundingBox())后,有时怪物未触碰,任然出发死亡事件, 利用DrawNode的drawRect(Vec2(),Vec2(),Color4F())函数,描边出碰撞体积,发现图片素材问题,解决方式:1.更改触碰体积检测数据,缩小怪物的触碰体积检测  2,或者更改图片素材,去掉图片周围无效部分

自己准备两种方法都试试,明天做碰撞体积检测,并联系美术修改图片


其中涉及的技巧:

1.碰撞体积描边,利用cocos固有的DrawNode可以实现效果,也可以使用OpenGL ES 写一个描边函数,以像素点的方式描边(未来尝试)

auto draw = DrawNode::create();
draw->drawRect(Vec2(0,0),Vec2(sp->getBoundingBox().size),Color4F::GREEN);
sp->addChild(draw); 

用精灵添加描边,因为DrawNode继承于Node ,精灵添加后,不用考虑单独处理drawnode的缩放和移动,等于和精灵绑定,注意点:NODE添加位置,在精灵缩放和移动前,因为精灵的AnchorPoint 在0.5, getBoudingBox()在缩放后,会改变,导致drawRect绘制大小不准确,缩放前绑定精灵即可

2.精灵处理缩放技巧,可以直接缩放精灵,也可以把精灵装进一个继承于NODE类的自定义类型,然后去缩放自定义类型,都可以达成效果,目前使用缩放精灵方法。

3.intersectsRect 函数处理一般碰撞够用,但是精确碰撞不太行,还是要自己写一个触碰函数,添加预处理效果,处理级别是COCOS帧循环级别,触碰提前 1/60秒,处理两个物体,在两个物体准备发生碰撞的前一帧,调用预处理碰撞函数,在下一帧,再次检测碰撞,确认后立即执行碰撞后的函数,而不是在碰撞后,再去做这个工作。cocos的intersectsRect,在源代码中 return !(     getMaxX() < rect.getMinX() ||
             rect.getMaxX() <      getMinX() ||
                  getMaxY() < rect.getMinY() ||

             rect.getMaxY() <      getMinY());  四个全为否时,返回真,否则返回假。效果就是已经发生碰撞了那么返回真。

 4.明天准备做,bullet 的burst,预处理场景和消除模块,确定设计模式和数据存储结构.



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值