cocos2d-x经验分享-spine边界框(碰撞框)
来源:互联网 发布:沥青库存数据 编辑:程序博客网 时间:2024/05/17 00:06
因为资金.美术.等种种问题
游戏开发要暂时放下来了
至少进度要慢下来了
cocos2d-x的工作我估计是找不到了
因为不熟悉安卓.也不熟悉IOS
lua也不会写
不过.在去找JAVA WEB工作之前
我想分享下.我这2个月开发的一些经验
而真正获取spine设置的边界框
是这个!
SP_ATTACHMENT_BOUNDING_BOX
下面是我修改的代码.通过名字查找边界框(代码自己理解下)
思路来自某博客.在哪看的忘了
游戏开发要暂时放下来了
至少进度要慢下来了
cocos2d-x的工作我估计是找不到了
因为不熟悉安卓.也不熟悉IOS
lua也不会写
不过.在去找JAVA WEB工作之前
我想分享下.我这2个月开发的一些经验
这些经验.很多都是自己摸索出来的.
至少.我要分享的经验.应该会帮助到一些人
这些经验.都是网上不太容易找到答案的内容
之前写的不是特别清楚
这里重新说明一下
在spine中.设置边界框之后.使用getboundingbox的话.是不会获取到你设置的那个边界框.而是一个巨大无比的矩形.如果你用它来做碰撞....
虽然该方法已经被重写了.但是并没有获取spine中.你自己设置的那个边界框
注:需要修改spine官方的runtime.我的版本是2.3 在2.1上也试过.都没问题
选中的这个就是重写了getboundingbox的类了.
SkeletonRenderer重写了getBoundingBox
但是.他获取的并不是碰撞框!
这点一定要注意
我不BB了 上代码来的
Rect SkeletonRenderer::getBoundingBox () const { float minX = FLT_MAX, minY = FLT_MAX, maxX = FLT_MIN, maxY = FLT_MIN; float scaleX = getScaleX(), scaleY = getScaleY(); for (int i = 0; i < _skeleton->slotsCount; ++i) { spSlot* slot = _skeleton->slots<i>; if (!slot->attachment) continue; int verticesCount; if (slot->attachment->type == SP_ATTACHMENT_REGION) { spRegionAttachment* attachment = (spRegionAttachment*)slot->attachment; spRegionAttachment_computeWorldVertices(attachment, slot->bone, _worldVertices); verticesCount = 8; } else if (slot->attachment->type == SP_ATTACHMENT_MESH) { spMeshAttachment* mesh = (spMeshAttachment*)slot->attachment; spMeshAttachment_computeWorldVertices(mesh, slot, _worldVertices); verticesCount = mesh->verticesCount; } else if (slot->attachment->type == SP_ATTACHMENT_SKINNED_MESH) { spSkinnedMeshAttachment* mesh = (spSkinnedMeshAttachment*)slot->attachment; spSkinnedMeshAttachment_computeWorldVertices(mesh, slot, _worldVertices); verticesCount = mesh->uvsCount; } else continue; for (int ii = 0; ii < verticesCount; ii += 2) { float x = _worldVertices[ii] * scaleX, y = _worldVertices[ii + 1] * scaleY; minX = min(minX, x); minY = min(minY, y); maxX = max(maxX, x); maxY = max(maxY, y); } } Vec2 position = getPosition(); return Rect(position.x + minX, position.y + minY, maxX - minX, maxY - minY);}SP_ATTACHMENT_REGION SP_ATTACHMENT_MESH SP_ATTACHMENT_SKINNED_MESH
而真正获取spine设置的边界框
是这个!
SP_ATTACHMENT_BOUNDING_BOX
下面是我修改的代码.通过名字查找边界框(代码自己理解下)
Rect SkeletonRenderer::getBoundingBox2(const std::string& name) const { float minX = FLT_MAX, minY = FLT_MAX, maxX = FLT_MIN, maxY = FLT_MIN; float scaleX = getScaleX(), scaleY = getScaleY(); for (int i = 0; i < _skeleton->slotsCount; ++i) { spSlot* slot = _skeleton->slots<i>; if (!slot->attachment) continue; int verticesCount; if (slot->attachment->type == SP_ATTACHMENT_BOUNDING_BOX)//判断type为spine边界框 { if (slot->attachment->name == name)//确认边界框名称 { spBoundingBoxAttachment* spa = (spBoundingBoxAttachment*)slot->attachment; spBoundingBoxAttachment_computeWorldVertices(spa, slot->bone, _worldVertices); verticesCount = spa->verticesCount; for (int ii = 0; ii < verticesCount; ii += 2) { float x = _worldVertices[ii] * scaleX, y = _worldVertices[ii + 1] * scaleY; minX = min(minX, x); minY = min(minY, y); maxX = max(maxX, x); maxY = max(maxY, y); } } } } Vec2 position = getPosition(); return Rect(position.x + minX, position.y + minY, maxX - minX, maxY - minY);}
思路来自某博客.在哪看的忘了
0 0
- cocos2d-x经验分享-spine边界框(碰撞框)
- cocos2d-x 让多个小球边界碰撞
- cocos2d-x经验分享
- Spine使用(With Cocos2d-x)
- cocos2d-x 自定义N个碰撞矩形框。
- cocos2d-x:矩形碰撞
- cocos2d-x 碰撞检测
- cocos2d-x 碰撞检测
- cocos2d-x 检测碰撞
- Cocos2d-x碰撞检测
- cocos2d-x 碰撞
- Spine的使用(With Cocos2d-x)
- Spine的使用(With Cocos2d-x)
- quick-cocos2d-x spine 骨骼动画(1)
- quick-cocos2d-x spine 骨骼动画(2)
- Spine的使用(With Cocos2d-x)
- cocos2d-x经验分享2-取按键按下
- cocos2d-x经验分享4-Factory类工厂.控制反转
- 扩展Unity编辑器菜单指南
- Android SystemProperties系统属性详解
- Numpy(1)
- 给定一个数n,输出n的环形矩阵
- ExtJs6第二弹-- 学会查看ExtJs api文档
- cocos2d-x经验分享-spine边界框(碰撞框)
- Visual Studio中监视数组
- 一个lua版的zset数据结构实现
- c/c++内存管理
- 阻塞和非阻塞的区别
- SpringjdbcTempete的配置文件
- python socket基本过程之二(server)
- mybatis字段取别名
- JAVA中集合解析篇二 HashMap解析