自定义博客皮肤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

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

原创 Flutter 热更新及动态UI生成

问题由于Dart语言在Flutter上关闭了反射,且本身依缺乏动态能力,因此在Flutter上实现热更新或动态UI较为困难。目前已有的一些动态方案:利用原生框架更新桥接动态脚本语言修改引擎(动态桥接增强版)XML/JSON配置UI以上方案,在我看来都不可取!原因这就来一一分析。利用原生框架更新,实际上就是更新Flutter框架相关的二进制。Flutter应用发布出来的产物主要包括 libflutter.so,libapp.so,flutterAssets,这样,就可以通过Android端

2021-05-12 03:18:37 117 1

原创 最简单的Flutter权限管理插件

文章目录用法配置权限AndroidiOS检查权限请求权限处理回调例子这是Flutter上的一个动态权限处理的插件库,可以让Flutter应用层的开发者以非常简单的API统一处理原生的动态权限。它封装了关于权限的检查、请求,以及权限被永久拒绝时,适当的拉起系统设置页面,提示用户手动打开权限。几乎想不到拒绝使用它的理由。仓库地址: flutter_easy_permission Android iOS用法配置权限检查权限。当调用一些需要权限的API时,应先检查是否具有相关权限请求权限。

2021-05-02 23:15:36 125

原创 Flutter 最佳扫码插件

长期以来,Flutter都缺乏一个简单易用,功能强大的二维码、条形码等扫码库,需要既能支持相机扫码,也能支持本地图片码识别。为了解决这个问题,我考察了原生的扫码生态,选取了功能强大的HUAWEI ScanKit SDK,对它进行了Flutter插件包封装。...

2021-05-02 23:03:31 184 4

原创 如何修改用Flutter构建的App显示名称?

Q:我已经使用Flutter创建了testapp。现在,我想把应用程序的名字从 "testapp"改为 “My Trips Tracker”。我该怎么做呢?我试过从AndroidManifest.xml中更改,它被更改了,但是有Flutter提供的方法吗?A1:有一个插件叫flutter_launcher_name,可以满足你的要求:修改pubspec.yaml添加依赖,并将你的Flutter App名称配置其中:dev_dependencies: flutter_launcher_nam

2021-04-01 00:49:41 90

原创 如何在Dart中创建一个单例?

Q:单例模式确保一个类只有一个实例被创建。我如何在Dart中构建这个模式?A:在Dart中构建一个单例很容易,以工厂构造方法为例:class Singleton { static final Singleton _singleton = Singleton._internal(); factory Singleton() { return _singleton; } Singleton._internal();}你可以这样使用它:void main() {

2021-04-01 00:47:40 107

原创 如何更改Flutter上的应用启动图标?

Q:当我用flutter创建一个应用时,flutter的logo被用作两个平台的应用图标。如果我想改变应用图标,是否要到两个平台目录中去替换那里的图片呢,我说的平台目录是指iOS的myapp/ios/Runner/Assets.xcassets/AppIcon.appiconset和Android的myapp/android/app/src/main/res。或者是否可以将图片定义为Flutter Asset,图标以某种方式生成?A1:Flutter Launcher Icons旨在帮助快速生成A

2021-04-01 00:45:40 58

原创 如何在Flutter中使用十六进制颜色?

Q:我如何在Flutter中把像"#b74093"这样的十六进制颜色字符串转换为Color ?我想在Dart中使用HEX颜色码。A1:在Flutter中,Color类只接受整数作为参数,也可以使用命名构造函数fromARGB和fromRGBO。因此我们只需要将字符串#b74093转换为一个整数值。另外,不透明度总是需要被指定的。十进制255的不透明度用十六进制值FF表示。这让我们得到了0xFF。现在,我们只需要像这样附加我们的颜色字符串:const color = const Color(

2021-03-30 04:29:32 215

原创 Android SDK/NDK命令行环境

SDK/NDK 命令行环境命令行环境搭建通常我们会借助Android Studio这个IDE来安装开发环境(SDK、NDK),但是在Linux系统,特别是在自动集成编译的服务器环境下,没有GUI图形桌面时,只能安装一套命令行环境。下面介绍如何通过手敲命令的方式安装Android 编译环境首先我们需要安装一个用于安装、管理Android开发环境的命令行工具:选取某个合适的路径下(可以是当前的用户目录),创建android-sdk文件夹,并进入该文件夹mkdir android-sdkcd an

2021-03-04 16:52:44 62 1

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

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

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

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

2020-12-30 02:47:26 235

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

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

2020-12-30 02:45:52 230

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

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

2020-12-30 02:44:16 134

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

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

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

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

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

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

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

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

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

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

2020-10-19 14:54:20 383

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

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

2020-10-19 14:51:21 146

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

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

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

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

2020-10-09 16:54:02 205

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

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

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

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

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

2020-09-20 02:07:32 120

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

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

2020-09-19 02:59:07 157

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

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

2020-09-19 02:56:38 103

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

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

2020-09-19 02:54:49 229

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

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

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

2020-09-18 17:25:51 204

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

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

2020-09-18 17:05:36 174

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

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

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

2020-09-18 16:06:53 130

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

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

2020-09-18 15:28:44 182

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

python3-tkinter官方高清文档

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

2017-12-04

tkinter关于ttk应用的详细教程

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

2017-12-04

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

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

2018-01-14

tkinter高清文档

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

2017-12-04

Common Language Extension文档

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

2017-11-18

Android平台的Python3.5.so

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

2018-09-24

python编程:从入门到实践pdf

超清电子书,非扫描

2017-01-22

gradle入门指南(离线版)

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

2018-02-03

Android编程权威指南

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

2015-05-23

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

超清电子书,绝非扫描版

2017-01-01

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

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

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

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

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

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

空空如也

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

TA关注的人 TA的粉丝

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