游戏开发者社区对底层API的投票

世界最大的游戏开发者社区对底层API的投票

其中,DirectX、SDL、Allegro是全功能(图像,声音,网络,输入)的开发包,OpenGL是图像开发包;DirectX是Windows平台的,其他都是跨平台的。因为此社区有很多主流游戏公司的开发者参与,所以其统计数据比较有参考价值。

What API are you currently learning/using?
DirectX977
OpenGL959
SDL167
Allegro330
Other45

 

Poll Results
DirectX
39.43%
OpenGL
38.70%
SDL
6.74%
Allegro
13.32%
Other
1.82%
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
#include <SDL.h> #include <stdio.h> //用键盘控制精灵移动 int main(int argc, char ** argv) { SDL_Surface * screen; //主表面 SDL_Surface * image; //用来放MM-----图片信息(像素) SDL_Surface * PlayerImage; //用来测试图片 SDL_Event event; Uint32 BeginTicks, EndTicks; SDL_Rect PRect, BRect; //PRect应精灵移动小图位置(实现动画),BRect应精灵在屏幕位置。 unsigned char PlayerStarts = 0; unsigned char PlayerIndex = 0; bool bAppRun = true; //初始化SDL if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) == -1) { fprintf(stderr, "SDL_Init %s\n", SDL_GetError()); return -1; } //初始化成功设置退出要调用函数SDL_Quit atexit(SDL_Quit); //创建一个640X480 16-bit 模式主表面 16位可以让MM效果好看一点 screen = SDL_SetVideoMode(230, 230, 16, SDL_SWSURFACE); if (screen == NULL) { fprintf(stderr, "Couldn't set 640x480x8 video mode %s\n", SDL_GetError()); return -1; } //读取MM图片信息,并创建一个表面,并把数据填入该表面中。 image = SDL_LoadBMP("./mm.bmp"); //请在终端里运行该程序 if (image == NULL) { fprintf(stderr, "Couldn't load MM, %s\n", SDL_GetError()); //遗憾你不能显示MM了,不过你可以用图片浏览程序看。 return -1; } //读取player.bmp PlayerImage = SDL_LoadBMP("./player.bmp"); //请在终端里运行该程序 if (image == NULL) { fprintf(stderr, "Couldn't load MM, %s\n", SDL_GetError()); //遗憾你不能显示MM了,不过你可以用图片浏览程序看。 return -1; } //读取第一个像素 Uint8 key = *((Uint8 *)PlayerImage->pixels); //设置色键 SDL_SetColorKey(PlayerImage, SDL_SRCCOLORKEY, key); //有了MM表面了,就可以显示了。 //将MM表面画在我们主表面上,用MM来作为背景 if (SDL_BlitSurface(image, NULL, screen, NULL) < 0) { //解释一下NULL,第一个是按照image尺寸显示,第二个是默认显示。你也可以指定大小,不过要用到SDL_Rect你可以看一看帮助。 fprintf(stderr, "BlitSurface error: %s\n", SDL_GetError()); //看看提示吧 return -1; } PRect.x = 0; //初始化动画显示图片。 PRect.y = 0; PRect.w = 32; PRect.h = 48; BRect.x = 0; //初始化精灵位置。 BRect.y = 0; BRect.w = 32; BRect.h = 48; //贴上测试用表面 if (SDL_BlitSurface(PlayerImage, &PRect, screen, &BRect) < 0) { fprintf(stderr, "BlitSurface error: %s\n", SDL_GetError()); //看看提示吧 return -1; } //好了更新显示画出MM SDL_UpdateRect(screen, 0, 0, image->w, image->h); BeginTicks = SDL_GetTicks(); while (bAppRun) { //消息循环 if (SDL_PollEvent(&event)) { switch (event.type) { case SDL_KEYDOWN: switch (event.key.keysym.sym) { case SDLK_ESCAPE: bAppRun = false; //按下了ESC退出程序。 break; case SDLK_UP: PlayerStarts = 1; //向上移动。 PlayerIndex = 0; //动画序号清零 break; case SDLK_DOWN: PlayerStarts = 2; //向下移动。 PlayerIndex = 0; //动画序号清零 break; case SDLK_LEFT: PlayerStarts = 3; //向左移动 PlayerIndex = 0; //动画序号清零 break; case SDLK_RIGHT: PlayerStarts = 4; //向右移动 PlayerIndex = 0; //动画序号清零 break; } break; case SDL_KEYUP: PlayerStarts = 0; //按键松开。停止切换动画。 break; case SDL_QUIT: bAppRun = false; break; } } EndTicks = SDL_GetTicks(); if ((EndTicks - BeginTicks) > 50) { //到了50MS BeginTicks = EndTicks; SDL_FillRect(screen, &BRect, 0); //清除以前图片。 if (PlayerStarts) { switch (PlayerStarts) { case 1: //向上移动。 if ((BRect.y - 5) > 0) { //要移动位置是否到顶 BRect.y -= 5; //坐标减去5 } else { BRect.y = 0; //设置位置在顶部。 } PRect.x = PlayerIndex * 32; //使用序号计算该显示那个动画图片 PRect.y = 144; //向上图组 PlayerIndex ++; //动画序号加1 if (PlayerIndex > 2) PlayerIndex = 0; //循环显示动画 break; case 2: //以下请大家自己分析。 if ((BRect.y + BRect.h + 5) < screen->h) { BRect.y += 5; } else { BRect.y = screen->h - BRect.h; } PRect.x = PlayerIndex * 32; PRect.y = 0; PlayerIndex ++; if (PlayerIndex > 2) PlayerIndex = 0; break; case 3: if ((BRect.x - 5) > 0) { BRect.x -= 5; } else { BRect.x = 0; } PRect.x = PlayerIndex * 32; PRect.y = 48; PlayerIndex ++; if (PlayerIndex > 2) PlayerIndex = 0; break; case 4: if ((BRect.x + BRect.w + 5) < screen->w) { BRect.x += 5; } else { BRect.x = screen->w - BRect.w; } PRect.x = PlayerIndex * 32; PRect.y = 96; PlayerIndex ++; if (PlayerIndex > 2) PlayerIndex = 0; break; } } if (SDL_BlitSurface(image, NULL, screen, NULL) < 0) { //解释一下NULL,第一个是按照image尺寸显示,第二个是默认显示。你也可以指定大小,不过要用到SDL_Rect你可以看一看帮助。 fprintf(stderr, "BlitSurface error: %s\n", SDL_GetError()); //看看提示吧 return -1; } //贴上测试用表面 if (SDL_BlitSurface(PlayerImage, &PRect, screen, &BRect) < 0) { fprintf(stderr, "BlitSurface error: %s\n", SDL_GetError()); //看看提示吧 return -1; } } SDL_Flip(screen); } //退出了程序释放MM表面资源 SDL_FreeSurface(image); return 0; }
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值