[Day28] 再访碰撞侦测与解析 (一) - 需要的资料

今日目标

  • AABB碰撞

MISSION FAILED! 准备一下

接续昨天的内容,接下来要制作碰撞的部分,既然要实现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;
}

之後还会再改,目前算是在测试阶段,code暂时没上传上去。


<<:  连续 30 天 玩玩看 ProtoPie - Day 23

>>:  Day24 动态组件 Dynamic Components

[iT铁人赛Day20]JAVA学习心得

做完了这几天的JAVA分享。。。我说是分享啦,因为我没有厉害到可以教别人 恩,所以做完分享之後,我也...

鬼故事 - 真的有监控吗

鬼故事 - 真的有监控吗 Credit: Star Wars: Attack Of The Clon...

Google Maps JavaScript API 工具|专案实作

串接地图 JavaScript API 中虽然相较起来难度较高,不过官方文件写的也很简单易懂。 使用...

Day 11 已故用户的隐私设计

隐私如浮云,多半用户即刻享受当下服务的快感解决需求,至於隐私就都化为浮云飘过视而无见,如同Day 2...

[Day25] 实作 - 动画篇2

先在UI上做一个事件技能的锚点 修改一下ActionBattle_Action 修改一下算技能的距离...