自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

血色@残阳的专栏

个人公众号:编程之路从0到1

  • 博客(136)
  • 资源 (10)
  • 论坛 (3)
  • 收藏
  • 关注

翻译 SDL编程入门(31)滚动背景

滚动背景通常在游戏中,你可能想要一个无限或循环的背景。使用滚动背景,你可以循环一个永远持续下去的背景。比如说,如果我们想在一个无限的背景上围绕一个点移动:我们要做的就是将背景的两次迭代彼此相邻渲染,并将它们每帧移动一点。 当背景完全移开时,你可以重新设置运动://The dot that will move around on the screenclass Dot{ public: //The dimensions of the dot static

2021-01-04 15:41:18 44

翻译 SDL编程入门(30)滚动

滚动到目前为止,我们只涉及屏幕大小的平面。有了滚动功能,你可以通过渲染与摄影机相关的所有内容来浏览任何大小的平面。滚动的基本原理是,你有一个矩形,它的功能是一个摄像机:然后你只渲染摄像机里的东西,通常涉及渲染相对于摄像机的事物或仅显示摄像机内部的对象的一部分。//平面的尺寸const int LEVEL_WIDTH = 1280;const int LEVEL_HEIGHT = 960;//屏幕尺寸常量const int SCREEN_WIDTH = 640;const int SC

2021-01-04 15:36:28 26

翻译 SDL编程入门(29)圆形碰撞检测

圆形碰撞检测除了矩形碰撞框,圆是最常见的碰撞器形式。在这里,我们将检查两个圆以及一个圆和一个框之间的碰撞。检查两个圆之间的碰撞很容易。 你要做的就是检查每个圆心之间的距离是否小于其半径的总和(半径是半径的倍数)。对于框/圆碰撞,必须在碰撞框上找到最接近圆心的点。 如果该点小于圆的半径,则发生碰撞。//一个圆结构体struct Circle{ int x, y; int r;};SDL有一个内置的矩形结构,但我们必须自己制作一个有位置和半径的圆形结构。//The dot t

2020-12-30 02:47:26 164

翻译 SDL编程入门(28)每像素碰撞检测

每像素碰撞检测一旦你知道如何检查两个矩形之间的碰撞,你可以检查任何两个图像之间的碰撞,因为所有的图像都是由矩形构成的。在电子游戏中,所有的东西都可以用矩形来做,甚至这个点:没看到?我们把它放大:还没看到?那现在呢?:图像由正方形的像素组成,正方形的像素为矩形。 要进行每个像素的碰撞检测,我们要做的就是让每个对象都有一组碰撞框,并检查一组碰撞框与另一组碰撞框的碰撞,如下所示://在屏幕上移动的点class Dot{ public: //The dimensions

2020-12-30 02:45:52 182

翻译 SDL编程入门(27)碰撞检测

碰撞检测在游戏中,你经常需要判断两个物体是否相互撞击。对于简单的游戏来说,通常用边界框碰撞检测来完成。碰撞框是检查两个对象之间碰撞的标准方法。当两个多边形没有分开时,它们就会发生碰撞。这里我们有两个没有碰撞的盒子。如你所见,它们的x投影在底部,y投影在左边:在这里,你可以看到这些盒子沿着y轴相撞,但它们在x轴上是分开的:这里的盒子在X轴上是相撞的,但在Y轴上是分开的:当任何一个轴上没有分离时,就会发生碰撞:这种形式的碰撞检测,我们试图找到一个物体分离的轴,称为分离轴测试。如果没有分离轴,那么

2020-12-30 02:44:16 47

翻译 SDL编程入门(26)运动

运动现在我们知道了如何渲染、处理输入和处理时间,我们现在知道了我们需要在屏幕上移动东西的一切。在这里,我们将做一个基本的程序与一个点移动。//The dot that will move around on the screenclass Dot{ public: //点的尺寸 static const int DOT_WIDTH = 20; static const int DOT_HEIGHT = 20; //点的最大轴速

2020-12-30 02:42:18 220

翻译 SDL编程入门(25)限制帧率

限制帧率我们可以用SDL定时器做的另一件事是手动限制帧率。在这里,我们将禁用vsync,并保持最高帧率。//屏幕尺寸常量const int SCREEN_WIDTH = 640;const int SCREEN_HEIGHT = 480;const int SCREEN_FPS = 60;const int SCREEN_TICKS_PER_FRAME = 1000 / SCREEN_FPS;在这个演示中,我们将正常渲染我们的帧,但在帧的最后,我们将等待,直到帧时间完成。例如这里,当你想以6

2020-12-30 02:39:54 215

翻译 SDL编程入门(24)计算帧率

计算帧率现在我们知道了如何用SDL制作定时器,是时候把它用起来了。我们将使用定时器来测量fps。//Main loop flagbool quit = false;//Event handlerSDL_Event e;//将文字颜色设置为黑色SDL_Color textColor = { 0, 0, 0, 255 };//每秒钟定时器的帧数LTimer fpsTimer;//内存中的文本流std::stringstream timeText;//开始计算每秒的帧数int

2020-12-30 02:37:38 207

翻译 SDL编程入门(23)高级定时器

高级定时器现在我们已经做了一个用SDL做的基本计时器,是时候做一个可以启动/停止/暂停的计时器了。//The application time based timerclass LTimer{ public: //Initializes variables LTimer(); //各种时钟操作 void start(); void stop(); void pause(); vo

2020-12-22 05:37:43 76

翻译 SDL编程入门(22)定时

定时任何类型的游戏API的另一个重要部分是处理时间的能力。在本教程中,我们将制作一个我们可以重新启动的计时器。//Using SDL, SDL_image, SDL_ttf, standard IO, strings, and string streams#include <SDL.h>#include <SDL_image.h>#include <SDL_ttf.h>#include <stdio.h>#include <string&g

2020-12-22 05:35:25 82

翻译 SDL编程入门(21)音效和音乐

音效和音乐到目前为止,我们只是在处理视频和输入。大多数游戏制作都需要某种声音,这里我们将使用SDL_mixer为我们播放音频。//Using SDL, SDL_image, SDL_mixer, standard IO, and strings#include <SDL.h>#include <SDL_image.h>#include <SDL_mixer.h>#include <stdio.h>#include <string>

2020-12-22 05:33:23 65

原创 Android 29: remount failed

Android 29模拟器用以前的方法去remount 会得到以下错误:Skip mounting partition: /productSkip mounting partition: /product_servicesSkip mounting partition: /productSkip mounting partition: /product_servicesSkip mounting partition: /productSkip mounting partition: /produ

2020-12-13 01:19:41 84

翻译 SDL编程入门(20)触力反馈

触力反馈我们知道了如何用SDL使用操纵杆,现在我们可以使用新的触觉API来使控制器震动。//带有触力反馈的游戏控制器1处理程序SDL_Joystick* gGameController = NULL;SDL_Haptic* gControllerHaptic = NULL;触觉设备是一种能提供某种物理反馈的东西。在本例中,它使控制器发出隆隆声。触觉设备的数据类型直观地命名为SDL_haptic。//Initialize SDLif( SDL_Init( SDL_INIT_VIDEO | SD

2020-10-19 14:56:53 53

翻译 SDL编程入门(19)游戏手柄和操纵杆

游戏手柄和操纵杆就像鼠标输入和键盘输入一样,SDL也有能力读取来自操纵杆/游戏手柄/游戏控制器的输入。在本教程中,我们将根据操纵杆的输入使箭头旋转。//模拟手柄死区const int JOYSTICK_DEAD_ZONE = 8000;SDL处理游戏控制器上的模拟杆的方式是,它将其位置转换为-32768和32767之间的数字。这意味着一个轻敲可以报告一个1000+的位置。我们想忽略轻敲,所以我们想创建一个死区,在这个死区中,来自操纵杆的输入被忽略。这就是我们定义这个常数的原因,我们稍后会看到它是如

2020-10-19 14:54:20 154

翻译 SDL编程入门(18)按键状态

按键状态正如我们在鼠标输入教程中看到的那样,除了使用事件之外,还有其他方法可以获得输入设备(鼠标、键盘等)的状态。在本教程中,我们将使用按键状态而不是事件来重新制作键盘输入教程。//Main loop flagbool quit = false;//Event handlerSDL_Event e;//Current rendered textureLTexture* currentTexture = NULL;在进入主循环之前,我们声明一个纹理指针来跟踪我们要渲染到屏幕上的纹理。/

2020-10-19 14:51:21 64

翻译 SDL编程入门(17)鼠标事件

鼠标事件和按键一样,SDL也有事件结构来处理鼠标事件,如鼠标运动、鼠标按钮按下和鼠标按钮释放。在本教程中,我们将制作一堆可以与之交互的按钮。//按钮常量const int BUTTON_WIDTH = 300;const int BUTTON_HEIGHT = 200;const int TOTAL_BUTTONS = 4;enum LButtonSprite{ BUTTON_SPRITE_MOUSE_OUT = 0, BUTTON_SPRITE_MOUSE_OVER_MO

2020-10-09 17:01:44 71

翻译 SDL编程入门(16)TrueType字体

TrueType字体使用SDL渲染文本的一种方法是使用扩展库SDL_ttf。SDL_ttf允许你从TrueType字体中创建图像,我们将在这里使用它从字体文本中创建纹理。// 使用SDL、SDL_image、SDL_ttf、标准IO、math和string#include <SDL.h>#include <SDL_image.h>#include <SDL_ttf.h>#include <stdio.h>#include <string&g

2020-10-09 16:58:44 88

翻译 SDL编程入门(15)旋转和翻转

旋转和翻转SDL2的硬件加速纹理渲染还能给我们提供图像快速翻转和旋转的能力。在本教程中,我们将利用这一点使一个箭头纹理旋转和翻转。//Texture wrapper classclass LTexture{ public: //Initializes variables LTexture(); //Deallocates memory ~LTexture(); //Loads image at specif

2020-10-09 16:54:02 78

翻译 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 96

翻译 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 127

翻译 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 98

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

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

2020-09-20 02:07:32 76

翻译 SDL编程入门(10)Color Key

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

2020-09-19 02:59:07 75

翻译 SDL编程入门(9)视口

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

2020-09-19 02:56:38 53

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

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

2020-09-19 02:54:49 119

翻译 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 85

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

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

2020-09-18 17:25:51 105

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

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

2020-09-18 17:05:36 87

翻译 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 75

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

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

2020-09-18 16:06:53 65

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

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

2020-09-18 15:28:44 85

翻译 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 97

原创 Flutter 路由源码剖析

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

2020-08-05 14:24:12 199

原创 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 340

原创 Flutter 事件处理源码剖析

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

2020-08-05 14:18:12 209

原创 Flutter 自定义控件之RenderObject

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

2020-08-05 14:15:31 465

原创 Flutter框架层启动源码剖析

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

2020-08-05 14:11:53 303

原创 Flutter 框架实现原理

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

2020-08-05 14:02:31 674 1

原创 Flutter 大小单位详解
原力计划

关于Flutter 大小所使用的单位,官方文档没有给出非常明确的解释,因此一直存在模糊的说法,许多从事安卓开发者直接将之解释为安卓开发所用的单位dp,我认为这是非常不明智且不准确的说法,这个不准确不在于实质的数值,而在于概念的混淆!这样极容易对初学者造成误导,从事web前端或iOS原生开发的人,并没有dp的概念,当他们学习Flutter时,必须强行去理解dp的概念,且在iOS或web平台上时也解释为dp,那就是错误的。我们应当如何理解Flutter 的大小单位?官方文档中有对 devicePixelRa

2020-06-22 20:34:01 1781 3

原创 Flutter成就你的产品梦——就缺一个idea了
原力计划

在互联网时代,人们将信息与服务搬到了网络上,后来进入了移动互联网时代,人们又将互联网搬进了你我的生活中。智能手机是移动互联网的载体,如今,我们一刻也离不开智能手机,假如遗失了手机或者断开了网络,那对于个人来说不亚于一场灾难。很多人说移动互联网已经进入了下半场,但这只是对于投资者而言的,移动互联网在未来很长一段时间内仍将主导人们的生活,它的重要性无人能够否认。在移动互联网的浪潮中,催生了许多优秀的App产品,这让我们有了一种感觉,只要手中握着智能手机,我们就仿佛握住了世界!在这样的时代,无论你是设计师、程

2020-06-10 23:44:19 237

Common Language Extension文档

CLE中间件支持多脚本语言混合编程。c/c++, lua, python, c#, ruby, java等语言可以通过CLE中间件直接使用其它语言中的类,函数,变量或者模块, 使得现有的功能库或者模块可以很容易的应用到其它编程语言中。开发者可以使用熟悉的语言编写功能库,然后在其它语言开发的应用中使用。CLE非常简单,其执行体仅为一个核心共享库和对应于每个脚本语言接口的共享库.

2017-11-18

python3-tkinter官方高清文档

Python3 -Tkinter 官方高清文档,包含完整的tkinter方面的知识

2017-12-04

Android平台的Python3.5.so

重新编译的CrytaxNDK中的Python3.5so,可支持ssl,可在 Android的Armabi上运行的so

2018-09-24

gradle入门指南(离线版)

自己制作的gradle中文指南高清离线版,已经打包,比chm格式更友好

2018-02-03

JNI 完整高清手册(英文版)

JNI 完整全面的高清手册,想了解Android的Ndk开发的人而言,是必备资料

2018-01-14

tkinter关于ttk应用的详细教程

主要讲的tkinter的现代会界面,也就是着重于ttk的运用

2017-12-04

tkinter高清文档

python的tkinter文档,内容高清,涵盖知识完整,非常推荐

2017-12-04

python编程:从入门到实践pdf

超清电子书,非扫描

2017-01-22

Android 开发范例代码大全(第2版)

超清电子书,绝非扫描版

2017-01-01

Android编程权威指南

Android编程权威指南 Bill Phillips Brian Hardy 超高清PDF文档

2015-05-23

请管理员帮忙恢复一下回收站博客,谢谢

发表于 2018-01-22 最后回复 2018-01-22

已发布过的博客丢失了如何找回?

发表于 2018-01-22 最后回复 2018-01-22

新版界面为什么不能收藏?什么破界面,毫无人性化

发表于 2017-11-24 最后回复 2018-01-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除