10 血色v残阳

尚未进行身份认证

我要认证

微信公众号: “编程之路从0到1”

等级
TA的排名 9k+

SDL编程入门(14)动画精灵和VSync

动画精灵和VSync动画简而言之就是展示一个又一个的图像来制造运动的假象。在这里我们将展示不同的精灵来制作一个简笔画的动画。假设我们有以下动画帧(这清楚地表明我不是动画师):而且每隔十分之一秒就显示一个,我们会得到这个动画:由于SDL 2中的图像是典型的SDL_Textures,所以在SDL中的动画是一个接一个地显示纹理的不同部分(或不同的整体纹理)。//走路动画const int WALKING_ANIMATION_FRAMES = 4;SDL_Rect gSpriteClips[ WALK

2020-09-20 02:14:48

SDL编程入门(13)透明度混合

得益于新的硬件加速渲染,SDL2.0中的透明度变得更快。这里我们将使用alpha调制(它的工作原理很像颜色调制)来控制纹理的透明度。//Texture wrapper classclass LTexture{ public: //Initializes variables LTexture(); //Deallocates memory ~LTexture(); //Loads image at specifi

2020-09-20 02:12:14

SDL编程入门(12)色彩调制

色彩调制颜色调制可以让你改变渲染纹理的颜色。在这里,我们将使用各种颜色来调制一个纹理。//Texture wrapper classclass LTexture{ public: //Initializes variables LTexture(); //Deallocates memory ~LTexture(); //Loads image at specified path bool l

2020-09-20 02:09:28

SDL编程入门(11)裁剪渲染和精灵表

裁剪渲染和精灵表有时你只想渲染纹理的一部分。 很多时候,游戏喜欢将多个图像保留在同一张精灵表上,而不是拥有一堆纹理。 使用剪辑渲染,我们可以定义要渲染的纹理的一部分,而不是渲染整个对象。//Texture wrapper classclass LTexture{ public: //Initializes variables LTexture(); //Deallocates memory ~LTexture();

2020-09-20 02:07:32

SDL编程入门(10)Color Key

Color Key当在屏幕上渲染多个图像时,通常需要让图像具有透明背景。幸运的是,SDL提供了一种使用颜色键控的简单方法来实现这一点。//纹理包装类class LTexture{ public: //初始化 LTexture(); //释放 ~LTexture(); //在指定路径上加载图像 bool loadFromFile( std::string path ); //释

2020-09-19 02:59:07

SDL编程入门(9)视口

视口有些时候,你只想渲染屏幕的一部分,比如最小地图。使用视口你可以控制你在屏幕上的渲染位置。 //左上角视口 SDL_Rect topLeftViewport; topLeftViewport.x = 0; topLeftViewport.y = 0; topLeftViewport.w = SCREEN_WIDTH / 2;

2020-09-19 02:56:38

SDL编程入门(8)几何图形渲染

几何图形渲染除了新的纹理API,SDL还有新的基元渲染调用作为其渲染API的一部分。因此,如果你需要渲染一些基本的形状,而你又不想为它们创建额外的图形,SDL可以为你省力。bool loadMedia(){ //加载成功标志 bool success = true; //没有任何东西可加载 return success;}所以在我们的媒体加载功能中可以看到,我们没有加载媒体。SDL的基元渲染允许您在不加载特殊图形的情况下渲染形状。 //W

2020-09-19 02:54:49

SDL编程入门(7)纹理加载和渲染

纹理加载和渲染SDL2 的一个主要新功能是纹理渲染 API。这为您提供了快速、灵活的基于硬件的渲染。在本教程中,我们将使用这种新的渲染技术。//将单个图像作为纹理加载SDL_Texture* loadTexture( std::string path );//我们要渲染的窗口SDL_Window* gWindow = NULL;//窗口渲染器SDL_Renderer* gRenderer = NULL;//当前显示的纹理SDL_Texture* gTexture = NULL;S

2020-09-18 17:51:40

SDL编程入门(6)扩展库SDL_image

扩展库 SDL_imageSDL扩展库允许你做一些事情,比如加载BMP以外的图像文件,渲染TTF字体,以及播放音乐。您可以设置SDL_image来加载PNG文件,这可以为您节省大量的磁盘空间。在本教程中,我们将介绍如何安装SDL_image。SDL本身是一个扩展库,因为它增加了游戏和媒体功能,而这些功能并不是你的C++编译器的标准配置。当你设置扩展库的时候,你会发现它和单独安装SDL几乎是一样的。我们将特别安装SDL_image,但如果你能安装该扩展库,你应该能够安装任何一个扩展库。您需要做的第一件事

2020-09-18 17:25:51

SDL编程入门(5)Surface 优化和软拉伸

Surface 优化和软拉伸到现在为止,我们一直都是将我们的图像原始地融合在一起。因为我们只显示一张图片,所以这并不重要。当你在做游戏的时候,原始图像会导致不必要的减速。我们将把它们转换为优化的格式来加快它们的速度。SDL2还为SDL表面提供了一个新的功能,叫做软拉伸,它允许你将图像按比例放大到不同的尺寸进行blit。在本教程中,我们将把一张只有屏幕一半大小的图像拉伸到全尺寸。SDL_Surface* loadSurface( std::string path ){ //最终优化后的图像 SDL_

2020-09-18 17:05:36

SDL编程入门(4)按键操作

按键操作点X关闭出窗口只是SDL能够处理的事件之一。另一种在游戏中大量使用的输入方式是键盘。在本教程中,我们将根据您所按的键来使不同的图像出现。//按键表面常量enum KeyPressSurfaces{ KEY_PRESS_SURFACE_DEFAULT, KEY_PRESS_SURFACE_UP, KEY_PRESS_SURFACE_DOWN, KEY_PRESS_SURFACE_LEFT, KEY_PRESS_SURFACE_RIGHT, KEY

2020-09-18 16:46:45

SDL编程入门(3)事件驱动编程

事件驱动编程除了在屏幕上放置图像外,游戏还要求您处理用户的输入。你可以通过SDL使用事件处理系统来实现这一点。//主循环标志bool quit = false;//事件处理程序SDL_Event e;在我们的代码中,在SDL被初始化并加载媒体后(如前面教程中提到的),我们声明一个退出标志,以跟踪用户是否已经退出。由于此时我们刚刚启动应用程序,所以很明显它被初始化为false。我们还声明一个SDL_Event union。一个SDL事件就是一些类似于按键按下、鼠标移动、操纵杆按钮按下等。在这

2020-09-18 16:06:53

SDL编程入门(2)在屏幕上显示图像

在屏幕上显示图像现在你已经打开了一个窗口,让我们在上面放一张图片。注意:从现在开始,教程将只涉及源代码的关键部分。如果想看完整的程序,你必须下载完整的源码。//启动SDL并创建窗口bool init();//加载媒体bool loadMedia();//释放媒体并关闭SDLvoid close();在第一个教程中,我们把所有的东西都放在主函数中。由于这是一个小程序,我们可以摆脱这种做法,但在真实的程序中(比如视频游戏),你希望你的代码尽可能的模块化。这意味着你希望你的代码是整齐的块,

2020-09-18 15:28:44

SDL编程入门(1)Hello SDL

Hello SDL 你的第一个图形窗口所以你学会了C++的基础知识,但你厌倦了制作基于文本的小程序。为了使用诸如图形、声音、键盘、操纵杆等东西,你需要一个API(应用程序员接口),将所有这些硬件功能转化为C++可以交互的东西。这就是SDL所做的事情。它将Windows/Linux/Mac/Android/iOS等工具包装起来,让你可以用SDL编写代码,然后编译到它所支持的任何平台。为了使用它,你需要安装它。SDL作为一个动态链接库。一个动态链接库有3个部分。头文件(Library.h)库文件 (

2020-09-18 14:51:06

Flutter 路由源码剖析

文章目录Flutter 路由源码剖析根路由初始化流程路由栈操作剖析相关类总结NavigatorOverlayOverlayEntryRoute自定义悬浮框路由视频课程Flutter 路由源码剖析路由页面的简单树形结构,仅包含关键控件根路由初始化流程我们知道MaterialApp实际上是对WidgetsApp的包装,而WidgetsApp是一个有状态的Widget,这里查看它的State.build实现,主要是构建了Navigatorflutter\lib\src\widgets\app.dart

2020-08-05 14:24:12

Flutter 页面更新流程剖析

文章目录Flutter页面更新流程剖析更新流程渲染过程视频课程Flutter页面更新流程剖析更新流程当我们需要更新页面时,会调用setState方法,这里我们就以之为突破口,研究一下页面更新的流程。flutter\lib\src\widgets\framework.dart/// [State]void setState(VoidCallback fn) { final dynamic result = fn() as dynamic; _element.markNeedsBuild

2020-08-05 14:20:32

Flutter 事件处理源码剖析

Flutter 事件处理源码剖析事件都是由硬件收集起来的,然后传递给系统处理。在Flutter中,则是由平台层传递给Flutter引擎,再由引擎通知给上层应用处理。在ui.Window类中,通过onPointerDataPacket回调来通知上层。事件的分发结合前面的启动流程分析,我们知道Flutter框架层的事件源头在GestureBinding中,找到initInstances方法实现/// [GestureBinding] void initInstances() { sup.

2020-08-05 14:18:12

Flutter 自定义控件之RenderObject

文章目录使用RenderObject 自定义控件布局原理自定义示例自定义RenderObject自定义Widget使用自定义布局其他示例总结视频课程使用RenderObject 自定义控件前面课程已经讲了使用Canvas自绘控件,为什么还需要了解使用RenderObject 自定义控件呢?两种有什么区别?Canvas主要是进行底层绘制的,是最基础的一环。有时候一个控件除了绘制,还需要处理布局和事件,我们如果直接使用Canvas,就需要自己处理这些异常麻烦的事情,而Flutter的控件体系正是实现了这样

2020-08-05 14:15:31

Flutter框架层启动源码剖析

文章目录Flutter框架层启动源码剖析WidgetsBinding 初始化构建Element和RenderObject树执行渲染小结总结视频课程Flutter框架层启动源码剖析PS: 剖析源码版本为Flutter 1.18入口函数,其主要作用是注入给定的小控件并将其附加到屏幕上。void runApp(Widget app) { WidgetsFlutterBinding.ensureInitialized() ..scheduleAttachRootWidget(app) .

2020-08-05 14:11:53

Flutter 框架实现原理

文章目录Flutter 框架实现原理UI 构建原理WidgetElementRenderObjectLayerUI构建过程视频课程Flutter 框架实现原理简版架构图Framework:一个纯 Dart代码的 SDK。它实现了一套基础库, 包含动画、绘制和手势处理。并基于绘制封装了一套Widget控件库,这套控件库还根据 Material 和Cupertino两种设计风格进行了风格化区分。Engine:一个 C++实现的 SDK。其包含了 Skia引擎、Dart运行时、文字排版引擎等。在安卓.

2020-08-05 14:02:31

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 阅读者勋章Lv2
    阅读者勋章Lv2
    授予在CSDN APP累计阅读博文达到7天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。