📜  环绕图标颤动 - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:27:07.093000             🧑  作者: Mango

环绕图标颤动 - C 编程语言

简介

这是一个使用 C 编程语言编写的环绕图标颤动效果的小程序。该程序可以通过改变图标的位置和颜色,在屏幕上创建出一个环绕图标颤动的效果,让用户能够更加直观地感受到程序的交互性和动态性。

实现细节

为了实现环绕图标颤动的效果,我们需要使用到图形库来绘制图标和改变图标的位置。在这里,我们使用的是 SDL2 图形库,这是一个跨平台的图形库,可以在各种不同的操作系统上运行。

为了让图标能够在屏幕上移动,我们需要使用到鼠标和键盘的事件。通过监听这些事件,我们可以获得用户的操作并根据其操作来改变图标的位置和颜色。在 C 语言中,我们可以使用 SDL_Event 来监听这些事件。

为了让图标可以环绕移动,我们需要计算图标的位置和角度。在这里,我们可以使用三角函数来计算。具体来说,我们可以通过计算正弦函数和余弦函数的值来确定图标的位置和角度。

代码实现
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <SDL2/SDL.h>

#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480

int main(int argc, char* argv[])
{
    // 初始化 SDL
    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
        printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
        return -1;
    }

    // 创建窗口
    SDL_Window* window = SDL_CreateWindow("Icon Shaking", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
    if (!window) {
        printf("Window could not be created! SDL_Error: %s\n", SDL_GetError());
        return -1;
    }

    // 创建渲染器
    SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
    if (!renderer) {
        printf("Renderer could not be created! SDL_Error: %s\n", SDL_GetError());
        return -1;
    }

    // 加载图标
    SDL_Surface* iconSurface = SDL_LoadBMP("icon.bmp");
    if (!iconSurface) {
        printf("Icon could not be loaded! SDL_Error: %s\n", SDL_GetError());
        return -1;
    }

    // 创建纹理
    SDL_Texture* iconTexture = SDL_CreateTextureFromSurface(renderer, iconSurface);
    SDL_FreeSurface(iconSurface);
    if (!iconTexture) {
        printf("Texture could not be created! SDL_Error: %s\n", SDL_GetError());
        return -1;
    }

    // 设置初始位置和角度
    int iconX = SCREEN_WIDTH / 2;
    int iconY = SCREEN_HEIGHT / 2;
    float angle = 0.0f;

    // 进入主循环
    bool quit = false;
    while (!quit) {
        SDL_Event event;
        while (SDL_PollEvent(&event)) {
            switch (event.type) {
                case SDL_QUIT:
                    quit = true;
                    break;
                case SDL_MOUSEBUTTONDOWN:
                    iconX = event.button.x;
                    iconY = event.button.y;
                    break;
                case SDL_KEYDOWN:
                    switch (event.key.keysym.sym) {
                        case SDLK_ESCAPE:
                            quit = true;
                            break;
                    }
                    break;
            }
        }

        // 计算图标位置和角度
        iconX = (int)(SCREEN_WIDTH / 2 + 100 * sin(angle));
        iconY = (int)(SCREEN_HEIGHT / 2 + 100 * cos(angle));
        angle += 0.05f;

        // 渲染图像
        SDL_Rect iconRect = {iconX - 16, iconY - 16, 32, 32};
        SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF);
        SDL_RenderClear(renderer);
        SDL_RenderCopy(renderer, iconTexture, NULL, &iconRect);
        SDL_RenderPresent(renderer);
    }

    // 清理资源
    SDL_DestroyTexture(iconTexture);
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();

    return 0;
}
运行效果

icon_shaking.gif

总结

通过这个小程序,我们学习了如何使用 C 语言和 SDL2 图形库来创建一个环绕图标颤动的效果。这个程序虽然很简单,但是它涉及到了很多基本概念,如事件处理、三角函数等。希望大家能够在这个过程中加深对 C 语言和图形编程的理解。