关于sdl的学习笔记,怎么绘制线条和矩形

本文介绍了使用SDL库自定义绘制线条和矩形的函数,并提供了详细的实现代码。通过这些函数,可以更好地理解如何利用SDL进行基本图形绘制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       最近陷入了sdl的学习中,发现许多函数sdl库本身并没有提供,所以还需我们自己编写,下面便来分享一下自己编写的几个函数。

       首先是绘制线条,说白了就是画点,下面给出代码:

void drawline(SDL_Surface *screen, Uint8 R, Uint8 G, Uint8 B,int x,int y,int xx,int yy){
 int x1,y1;
 for(x1=x,y1=y;x1<=xx && y1<=yy;x1++,y1++){
  DrawPixel(screen,100,100,100,x1,y1);
 }
}

       然后是绘制矩形,那也是在绘制线条的基础上:

void drawrect(SDL_Surface *screen, Uint8 R, Uint8 G, Uint8 B,int x,int y,int width,int heigth){
 int x1,y1;
 for(x1=x,y1=y;x1<x+width;x1++){
  DrawPixel(screen,100,100,100,x1,y1);
 }
 for(x1=x+width,y1=y;y1<y+heigth;y1++){
  DrawPixel(screen,100,100,100,x1,y1);
 }
 for(x1=x,y1=y+heigth;x1<x+width;x1++){
  DrawPixel(screen,100,100,100,x1,y1);
 }
 for( x1=x,y1=y;y1<y+heigth;y1++){
  DrawPixel(screen,100,100,100,x1,y1);
 }
}

      上面代码中的DrawPixel函数就是来画点的,也就是绘制像素。下面看下代码:

void DrawPixel(SDL_Surface *screen, Uint8 R, Uint8 G, Uint8 B,int x,int y)
{
    Uint32 color = SDL_MapRGB(screen->format, R, G, B);
 
    if ( SDL_MUSTLOCK(screen) ) {
        if ( SDL_LockSurface(screen) < 0 ) {
            return;
        }
    }
 
  Uint32 *bufp;
  
  bufp = (Uint32 *)screen->pixels + y*screen->pitch/4 + x;
  *bufp = color;


    if ( SDL_MUSTLOCK(screen) ) {
        SDL_UnlockSurface(screen);
    }
 SDL_Delay(5);
   // SDL_Flip(screen);
 SDL_UpdateRect(screen, x, y, 1, 1);

}

 

上面加了SDL_Delay,也就是延迟5秒,所以你能看到绘制过程,去掉的话绘制的最终结果便会直接显示了。

       下面给出个例子:

#include <iostream>
#include "SDL/SDL.h"
using namespace std;
SDL_Surface* screen;

int main(int argc, char *argv[]) {
 SDL_Init(SDL_INIT_EVERYTHING);
 atexit(SDL_Quit);
 screen=SDL_SetVideoMode(640,480,32,SDL_SWSURFACE);
 drawline(screen,200,200,200,100,100,200,280);
// SDL_Flip(screen);
 while(1){
  SDL_Event e;
  while(SDL_PollEvent(&e)){
   switch(e.type){
   case SDL_KEYDOWN:
    if(e.key.keysym.sym==SDLK_ESCAPE){
     return 0;
    }
    break;
   case SDL_QUIT:
    return 0;
   }
  }
 }
 
return 0;
}

 

       本文有什么不足之处,还望大家多多指正。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值