接续昨天的内容,接下来要制作碰撞的部分,既然要实现AABB,首先需要有碰撞框的资料,预想中,我制作的2D Platformer可以简单看成里面物体每个都是矩形,所以可以把一些资料集中,形成一个大结构,然後像是四个顶点的位置、大小、移动之类的,可以同时取得许多资料。
所以今天只是先把昨天一些可共用的资料拆出来,并没有实际做出AABB碰撞,以下是我开的结构
typedef struct Entity {
V2f pos;
V2f dir;
V2f speed;
Rect rec;
V2f center_pos;
V2f draw_pos;
V2f vertex[4];
} Entity;
主要是这个功能,移动的同时取得其他相关资料
// 施工中....
static void MoveEntity(Entity* e, MOVE_DIR move_dir, float offset) {
switch (move_dir) {
case MOVE_DIR_X:
if (offset < 0)
e->dir.x = (-1.0f);
else
e->dir.x = (1.0f);
e->pos.x += offset;
break;
case MOVE_DIR_Y:
if (offset < 0)
e->dir.y = (-1.0f);
else
e->dir.y = (1.0f);
e->pos.y += offset;
break;
}
// center pos
e->center_pos.x = e->draw_pos.x + BLOCK_UNIT_SZ / 2.0f;
e->center_pos.y = e->draw_pos.y + BLOCK_UNIT_SZ / 2.0f;
// set draw pos
e->draw_pos.x = e->pos.x * BLOCK_UNIT_SZ;
e->draw_pos.y = e->pos.y * BLOCK_UNIT_SZ;
// set rect
e->rec.x = e->draw_pos.x;
e->rec.y = e->draw_pos.y;
e->rec.w = BLOCK_UNIT_SZ;
e->rec.h = BLOCK_UNIT_SZ;
// vertices
e->vertex[0].x = e->draw_pos.x;
e->vertex[0].y = e->draw_pos.y;
e->vertex[1].x = e->draw_pos.x + BLOCK_UNIT_SZ;
e->vertex[1].y = e->draw_pos.y;
e->vertex[2].x = e->draw_pos.x;
e->vertex[2].y = e->draw_pos.y + BLOCK_UNIT_SZ;
e->vertex[3].x = e->draw_pos.x + BLOCK_UNIT_SZ;
e->vertex[3].y = e->draw_pos.y + BLOCK_UNIT_SZ;
}
<<: 连续 30 天 玩玩看 ProtoPie - Day 23
>>: Day24 动态组件 Dynamic Components
做完了这几天的JAVA分享。。。我说是分享啦,因为我没有厉害到可以教别人 恩,所以做完分享之後,我也...
鬼故事 - 真的有监控吗 Credit: Star Wars: Attack Of The Clon...
串接地图 JavaScript API 中虽然相较起来难度较高,不过官方文件写的也很简单易懂。 使用...
隐私如浮云,多半用户即刻享受当下服务的快感解决需求,至於隐私就都化为浮云飘过视而无见,如同Day 2...
先在UI上做一个事件技能的锚点 修改一下ActionBattle_Action 修改一下算技能的距离...