簡體   English   中英

SDL2 如何繪制虛線

[英]SDL2 How to draw dotted line

可以使用 SDL2(或 gfx)繪制一條簡單的虛線,例如

int drawDottedLine(SDL_Renderer *renderer,Sint16 x1,Sint16 y1, Sint16 x2, Sint16 y2, int r, int g, int b, int a);

在 web 上什么也沒找到 wtf 有這么難嗎?

你可以自己簡單地實現它...檢查“Bresenham算法”畫一條線。

對於一條虛線,它只是很多全線,所以一個鉛筆和紙張與三角法應該工作:)

編輯:對於虛線,你甚至沒有使用“Bresenham算法”,你只需要三角學。

那順便說一句,對於那些有投票權的人,請自己解釋一下?

這是一個使用Bresenham算法的工作函數:

void DrawDottedLine(SDL_Renderer* renderer, int x0, int y0, int x1, int y1) {
    int dx =  abs(x1-x0), sx = x0<x1 ? 1 : -1;
    int dy = -abs(y1-y0), sy = y0<y1 ? 1 : -1;
    int err = dx+dy, e2;
    int count = 0;
    while (1) {
        if (count < 10) {SDL_RenderDrawPoint(renderer,x0,y0);}
        if (x0==x1 && y0==y1) break;
        e2 = 2*err;
        if (e2 > dy) { err += dy; x0 += sx; }
        if (e2 < dx) { err += dx; y0 += sy; }
        count = (count + 1) % 20;
    }
}

您必須考慮此函數具有糟糕的性能,因為虛線的每個點都將調用SDL_RenderDrawPoint()以進行渲染。

這是我用於我的乒乓球游戲的代碼:

SDL_SetRenderDrawColor(renderer, 155, 155, 155, 255);
for (line.y = 0; line.y < WINDOW_HEIGHT; line.y += 10)
{
    SDL_RenderFillRect(renderer, &line);
}

在代碼的前面,我初始化了這一行:

SDL_Rect line;
line.w = 2;
line.h = 8;
line.x = WINDOW_WIDTH / 2;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM