试着使用SDL2复刻曹操传(二)

        本篇内容接上篇文章,继续讲述本人使用SDL2复刻曹操传的过程。上次主要实现创建窗口并显示背景图,今次将完善游戏窗口的基本功能,如最大化、拉伸、最小化。然后渲染英雄单位到地图上。为方便窗口的管理,创建GameWindow对象:

#ifndef SDL_CCZ_GAMEWINDOW_H
#define SDL_CCZ_GAMEWINDOW_H

#include "stdbool.h"
#include "SDL2/SDL.h"

struct GameWindow
{
    //Window data
    SDL_Window* sdl_window;
    SDL_Renderer* sdl_renderer;

    // Window title
    char caption[256];

    //Window dimensions
    int width;
    int height;

    //Window focus
    bool mouse_focus;
    bool keyboard_focus;
    bool fullscreen;
    bool minimized;

    //Screen ticks per frame
    int tpf;
};

bool gamewindow_init(struct GameWindow* ptr_gw);

void gamewindow_handle_event(struct GameWindow* ptr_gw, SDL_Event* e);

void gamewindow_free(struct GameWindow* ptr_gw);

#endif //SDL_CCZ_GAMEWINDOW_H

主要的功能函数:

void gamewindow_handle_event(struct GameWindow* ptr_gw, SDL_Event* e);

用于处理窗口事件,窗口事件的枚举值见下图:

窗口处理函数的实现:

void gamewindow_handle_event(struct GameWindow* ptr_gw, SDL_Event* e)
{
    //Window event occured
    if( e->type == SDL_WINDOWEVENT )
    {
        //Caption update flag
        bool update_caption = false;    //窗口标题更新

        switch(e->window.event)
        {
            //Get new dimensions and repaint on window size change
            case SDL_WINDOWEVENT_SIZE_CHANGED:
                ptr_gw->width = e->window.data1;
                ptr_gw->height = e->windo
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值