遥控小车之:HTML5+ 虚拟摇杆

游戏开发:Html5 虚拟摇杆控制人物移动 这边想再单独和大家分享一下有关虚拟摇杆的开发经验,因为觉得这个功能还是很实用和用途广泛的! 效果: 运行地址: http://h5demo.yyfuncdn.com/res/gameDemo/Pokemon/game.html 摇杆显示: 因为制作该游戏使用了 pixi 框架,所以需要利用 PIXI.Graphics() 方法绘制两个圆就可以了,一大一小,大圆为移动背景,给与一个颜色和透明度,默认隐藏即可,下面是绘制一个按钮移动背景圆的代码: var rockerbg = new PIXI.Graphi 阅读详情
之前用做了一台树莓派小车,然后写了个简易的遥控器,现在觉得太蹩脚,不能调整转速,特来做一个手机端的小车遥控器:

用C#写的一个winform遥控器,支持方向键或WSAD或鼠标点击控制
接下来摆在我面前的问题就是选择什么语言进行编写咯,我首先考虑了JAVA,首先我从来没写过JAVA的程序,而且IDE装起来很麻烦,而且还是英文的,那更加完全不懂了。然后是C#,很多人都不知道C#可以写Android应用。其实是可以的,但是Android Studio我上次用着卡卡的,印象不是很好,不想用。那还剩下什么选择呢?还有一个:HTML5。
好了我去装了个Hbuilder:
Hbuilder logo
中文的,很好用,问题在于我也从来没用过javascript,不过这是小问题啦。
打开Hbuilder,设置一些护眼什么的,然后点左上角[文件]-[新建]-[移动APP]。然后我选了个模板:
Hbuilder自带的移动APP模板
嗯,这就是这个程序在手机上执行的时候的样子。然后我模仿着加了一个列表项到index.html里面去:

<li id="plus/controller.html" onclick="clicked(this.id);">
    <span class="item">Controller
        <div class="chs">小车遥控器</div>
    </span>
</li>

好的,于是这个列表就加了一个选项了。:
被添加选项
继续,在plus文件夹里边添加一个controller.html,这就是我们的摇杆所存在的页面。在这个页面上,我们需要一个canvas标签和一个js脚本共同来绘制摇杆:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
        <meta name="HandheldFriendly" content="true" />
        <meta name="apple-mobile-web-app-capable" content=
使用nipple.js创建前端虚拟摇杆 对比之前的样式也是大同小异,只是摇杆的背景需要自定义了,不能直接使用默认创建的摇杆样式,所以查看了一下摇杆的元素,摇杆主要就是前后两块块级元素做的,样式名称分别是.front和.back,注意要加!这个是在开发项目中,遇到的一个技术点,因为想要像控制玩具汽车一样,所以参考了王者荣耀,无人机页面等,最终想要一个虚拟摇杆功能,然后我先搜索了下相关的组件,然后发现了nipple.js。nippleJs是一个虚拟摇杆的js库,专为可触摸的设备提供接口,常被用于游戏和可操作硬件设备的app或网页中。 阅读详情

相关推荐

ESP32 WiFi小车Web遥控系统设计与实现

Web遥控是嵌入式设备人机交互的重要范式,其本质是基于HTTP或WebSocket协议的前后端协同控制机制。原理上依赖浏览器触控事件捕获、轻量级Web服务器响应、MCU实时PWM驱动及视频流同步等多技术栈协同。该方案显著降低硬件成本与开发复杂度,具备零配置接入、确定性低延迟和跨平台兼容等技术价值。典型应用场景包括教育机器人、原型验证平台及IoT终端远程操控。本文聚焦ESP32软AP模式下的虚拟摇杆映射、MJPEG视频流集成与差速电机控制算法工程实现,涵盖触摸输入语义界定、SoftAP网络拓扑优化及实时控制任

weixin_42576186的博客 601

ESP32 WiFi遥控小车:AP模式+虚拟摇杆+PWM电机控制实战

WiFi遥控小车是嵌入式物联网的经典入门项目,其本质是基于MCU的实时控制系统与Web人机交互的融合。核心原理涉及WiFi AP模式配置、HTTP协议通信、JSON数据解析、PWM电机驱动及FreeRTOS多任务调度。技术价值在于无需路由器即可构建本地控制网络,兼顾低延迟响应与跨平台兼容性;典型应用场景包括智能教育机器人、实验室原型验证及轻量级AGV开发。本文聚焦ESP32平台,深入解析软硬协同优化——从AP信道选择降低干扰、SPIFFS内嵌Web资源、归一化摇杆数据设计,到双核任务隔离与硬件死区防护,覆盖

weixin_29717341的博客 292

ESP32双摇杆WiFi遥控小车逻辑设计与电机映射

在嵌入式智能小车开发中,运动控制逻辑是连接用户意图与物理执行的关键枢纽。其核心在于将遥操作输入(如虚拟摇杆坐标)通过语义解析、死区滤波、差速转向建模等步骤,转化为精确的PWM驱动信号。该过程涉及HTTP协议栈集成、MCU外设(LEDC)配置、H桥驱动时序匹配及多级异常保护机制,技术价值体现在低资源开销下的实时性、鲁棒性与可扩展性。典型应用场景包括教育机器人、创客原型验证及自主导航平台的遥控调试阶段。本文围绕ESP32软AP模式下的双摇杆指令解析、左右轮协同控制映射及状态反馈闭环展开,深入剖析WiFi遥控系统

weixin_29717341的博客 451

ESP32 WiFi遥控自平衡小车:IMU姿态解算与双环PID控制实战

自平衡小车是倒立摆控制理论的典型嵌入式实现,其核心在于多传感器融合、实时闭环控制与电机驱动协同。MPU-6050提供六轴惯性数据,需经坐标变换、零偏校准与卡尔曼滤波融合加速度计低频稳定性与陀螺仪高频响应,生成高精度倾角;在此基础上,采用内环PD(直立)+外环PI(速度)的双环PID结构,实现动态稳定与运动响应解耦。ESP32凭借双核FreeRTOS调度能力,将姿态采集、控制运算、WiFi通信任务分层隔离,并通过SoftAP模式构建免PC调试的移动Web控制平台。该方案广泛适用于智能车教学实验、ROS底层底盘

weixin_34268462的博客 300

基于ESP32的智能遥控车:从硬件选型到Wi-Fi控制全流程实践

嵌入式系统开发是物联网(IoT)应用的基础,其核心在于微控制器与外围设备的协同工作。通过GPIO(通用输入输出)引脚控制电机驱动模块,结合PWM(脉冲宽度调制)技术实现精准调速,构成了机电一体化的底层原理。这种技术组合的价值在于能够将数字指令转化为物理运动,为自动化控制提供了可能。在智能硬件和DIY机器人领域,这种基础能力被广泛应用于遥控车、智能小车等移动平台。本文以ESP32为核心,详细解析了如何利用其集成的Wi-Fi功能,构建一个可通过网页实时遥控的智能小车系统,涵盖了从L298N电机驱动电路设计到We

weixin_34013044的博客 473

ESP32智能小车WiFi遥控系统设计与实现

WiFi软AP与HTTP服务器是嵌入式物联网设备远程控制的基础技术路径。其原理在于利用MCU内置WiFi射频模块构建本地无线接入点,配合轻量级Web服务实现浏览器直连交互;技术价值体现在无需路由器依赖、降低部署门槛、提升调试效率;典型应用场景涵盖教育机器人、工业巡检原型、创客项目快速验证等对离线可控性要求高的领域。本文围绕ESP32-WROOM-32平台,深入解析软AP配置、FreeRTOS任务协同、L298N电机驱动及虚拟摇杆交互等关键环节,覆盖从硬件选型到鲁棒性增强的完整工程链路。

weixin_29717341的博客 247

树莓派小车远程控制实战:Web方案从零搭建指南

远程控制是嵌入式系统与物联网应用的核心能力,其本质在于指令下发、状态反馈与实时交互的技术闭环。基于HTTP/WebSocket的Web端远程控制方案,因跨平台兼容性强、部署成本低、调试可视化程度高,已成为教育、创客及轻量自动化场景的首选实现路径。本文围绕树莓派+直流电机小车平台,详解如何利用Flask构建轻量Web服务、OpenCV实现低延迟视频流、Canvas原生摇杆设计及电机PWM平滑控制等关键技术,覆盖硬件接线、通信协议选型、状态同步机制与网络穿透优化等工程细节,为初学者提供一条可复现、可扩展、可调试

weixin_33898233的博客 404

手机浏览器直连VREP小车:实时视频+触控摇杆+状态监控(纯HTML免安装)

打开手机浏览器就能远程操控VREP里的差速小车,不用装App、不依赖额外框架。页面通过WebSockets和后端Python服务通信,支持局域网内低延迟控制。主界面有自适应视频流区域,兼容MJPG或WebRTC格式;圆形虚拟摇杆专为触屏优化,拖拽或点击即可控制前进、后退、左转、右转;顶部状态栏实时显示连接是否成功、当前速度、朝向角度、网络延迟毫秒数。所有配置参数(如IP地址、端口号)都写在index.html的JS变量里,改几行就能适配不同主机环境。Chrome、Safari等主流移动浏览器均可正常运行,适

blockchain9miner的博客 272

基于STM32与ESP8266的智能WIFI遥控小车:从硬件选型到软件联调全解析

嵌入式系统开发是连接物理世界与数字世界的核心技术,其核心原理在于通过微控制器(MCU)实时处理传感器数据并驱动执行器,实现智能化控制。这项技术的价值在于能够构建低成本、高可靠性的专用计算设备,广泛应用于物联网、智能家居、工业自动化等领域。在物联网应用场景中,设备联网与远程控制是基础需求,常通过WIFI模块实现。本文以智能WIFI遥控小车这一经典嵌入式与物联网综合实践项目为例,深入剖析其实现方案。项目采用STM32作为主控核心,负责电机驱动与逻辑处理;选用ESP8266模块创建WIFI热点并运行Web服务器,

weixin_34146805的博客 448

HTML虚拟摇杆、虚拟手柄(源码)

演示地址:http://tools.pt.wsing.cn/VirtualRocker/

移动端h5页面虚拟摇杆

一个简单易懂的html5页面的虚拟摇杆功能,该demo使用了zepto.js的touch事件,请在PC浏览器的控制台中使用手机模拟器运行或在移动端设备上打开。横屏预览更佳。

《Joystick》(虚拟摇杆代码-Cocos2d-js)

2016年5月学习Cocos2d-js的时候写的代码,实现了虚拟摇杆技术。 小框根据摇杆运动。 如有侵权请及时联系。 Cocos2d-x-3.10 WebStorm2016.2

Hadoop实战:用MapReduce分析YouTube视频数据集(附完整代码)

本文提供了一个完整的Hadoop MapReduce实战教程,指导读者使用MapReduce框架分析YouTube视频数据集,统计不同视频类别的数量分布。教程涵盖从数据获取、预处理、HDFS操作到Java代码编写、作业提交及结果可视化的全流程,并附有完整代码,帮助开发者深入理解分布式计算思想。

lilh34434的博客 198

保姆级教程:手把手配置MAX9295/9296 GMSL2-CSI2链路,搞定4LAN/1LAN模式与常见调试

本文提供MAX9295/9296 GMSL2-CSI2链路的详细配置教程,涵盖4LAN和1LAN模式的硬件连接、寄存器配置及调试技巧。通过实战案例和代码示例,帮助开发者快速实现高带宽视频传输,解决常见问题如信号同步和功耗优化,适用于车载摄像头和机器人视觉系统开发。

weixin_42561143的博客 434

C++/WinRT入门指南:现代Windows原生开发的核心技术

Windows运行时(WinRT)是微软为现代Windows应用开发设计的一套跨语言API框架,它基于COM技术原理构建,提供了统一的二进制接口标准。这项技术的核心价值在于让开发者能够以原生性能调用系统级功能,同时保持跨语言兼容性。在工程实践中,C++/WinRT作为官方推荐的C++语言投影,通过标准C++语法封装WinRT API,显著降低了开发复杂度。特别是在异步编程场景中,结合C++20协程特性,能够大幅提升代码可读性和维护性。对于需要高性能图形处理、系统集成或跨平台兼容的桌面应用开发,掌握C++/W

weixin_33910191的博客 1198

verilog实现步进电机脉冲分配器(三相六拍)基于Nexys4DDR开发板

使用Verilog HDL设计的一个能够自启动、具有正反转功能的三相六拍步进电机脉冲分配器。已经写好Nexy4DDR的管脚约束文件 可以通过Nexys4DDR开发板的PMOD接口连接步进电机进行调试。 使用verilog语言 在vivado2018.2下运行编译下载都正确,(也可在ISE,QuartusII下使用)下面是工程截图: ...

QQ_778132974的博客 2593

【项目实战】自动化测试软件VectorCAST介绍

VectorCAST是一款先进的自动化测试软件。VectorCAST是一款功能强大、易于使用的自动化测试软件。VectorCAST适用于各种嵌入式系统的测试。VectorCAST为嵌入式系统的测试提供了一种高效、可靠的解决方案。VectorCAST提供了一整套完整的测试工具,包括测试管理、代码覆盖、缺陷定位、报告生成等,以帮助开发人员提高测试效率,确保软件质量。VectorCAST支持。

奶爸的编程之路,也就一周冷个三天 2011

EXCEL VBA从入门到精通 第一章:VBA入门

在VBA中,需要使用关键字Dim来定义一个变量,后面跟上变量名和变量的数据类型。例如,下面的代码定义了一个整型变量x和一个字符串变量name在VBA中,使用关键字Const来定义常量,后面跟上常量名和常量的值。例如,下面的代码定义了一个整型常量MAX_NUM和一个字符串常量MESSAGE需要注意的是,常量一旦被定义,其值就不能被改变。

1万+

31、车载通信中的可见光通信(VLC)技术解析

本文详细解析了车载通信中可见光通信(VLC)技术的应用背景、优势及发展前景。对比传统RF通信技术(如DSRC),VLC利用LED照明设备实现高效、安全的车辆与车辆、车辆与基础设施之间的通信,具有频谱资源丰富、安全性高、无电磁干扰等优势。文章还探讨了VLC在交叉口交通控制、高速公路通信、自动驾驶等场景的应用潜力,展望了其在未来智能交通系统中的重要作用。

hill8的博客 318

SAP-ABAP:ABAP Development Tools(ADT)安装配置学习分享教程-第一篇:ADT安装前置准备与环境校验教程

ABAP Development Tools(ADT)安装配置教程摘要 本文是ADT安装系列的第一篇,重点讲解环境准备与版本校验。ADT是基于Eclipse的现代ABAP开发工具,相比传统SAP GUI提供更智能的开发体验。安装前需确认: 推荐使用Eclipse 2026-03 + Java 21组合 操作系统需Windows 10+/macOS 14+ SAP GUI版本要求Windows≥8.00/macOS≥8.10 后端系统需NetWeaver 7.31 SP04+或S/4HANA 通过java -

baidu_35680696的博客 690

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

下一篇: F#教程(一)
Tianzei
博客等级 码龄10年 10粉丝 1原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值