Cocos2d加载网络图片

前言

Cocos2d-x 默认不支持加载网络图片,而加载网络图片是一个常见的需求,本文简单的实现了加载网络图片。

加载网路图片

加载一张网络图片需要以下几个步骤

  1. 从网络上把图片的二进制数据下载下来
  2. 使用图片的二进制数据创建 Image 对象
  3. 用创建好的 Image 对象初始化 Texture2D 对象
  4. 使用 Texture2D 对象创建一个精灵
  5. 把精灵添加到节点中
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
auto request = new cocos2d::network::HttpRequest();
request->setUrl(url);
request->setRequestType(cocos2d::network::HttpRequest::Type::GET);
request->setResponseCallback([=](cocos2d::network::HttpClient* client,
cocos2d::network::HttpResponse* response) {
    if (!response) {
        return;
    }

    if (!response->isSucceed()) {
        return;
    }

    std::vector<char> data;
    auto responseData = response->getResponseData();
    data.assign(responseData->begin(), responseData->end()); // 获取二进制数据

    auto image = new Image(); // 创建 Image对象
    image->initWithImageData(reinterpret_cast<unsigned char*>(data.data()), data.size()); // 填充图片数据

    auto texture = new Texture2D();
    bool isImage = texture->initWithImage(image); // 使用 Image 初始化 Texture2D
    if (!isImage) {
        texture->release();
        image->release();
        return ;
    }

    auto sprite = Sprite::createWithTexture(texture); // 使用 Texture2D 创建精灵
    sprite->setContentSize(Size(200, 200));
    sprite->setAnchorPoint(Vec2(0, 0));
    addChild(sprite); // 把精灵添加到节点中

    texture->release();
    image->release();
});

cocos2d::network::HttpClient::getInstance()->sendImmediate(request);
request->release();

总结

通过以上的步骤,就可以在 Cocos2d 中加载网络图片并显示出来。

Cocos2d Layer 中点击事件穿透的最佳解决方案

前言

熟悉 Cocos2d 开发的应该都知道,在一个场景中如果有多个 Layer ,这些 Layer 一个一个的叠在上面,当我们点击 Layer 上的按钮的时候可以正常的触发对应的事件。

但是,当点击的位置所在的 Layer 没有事件要响应,这时候触摸事件就会传递到下面的 Layer ,这是我们所不希望的,在经过一番搜索之后,找到了一个不错的方案,分享一下。

高效文件共享:使用Caddy打造快速、安全的File Server

前言

跨平台文件同步利器:使用Caddy搭建WebDav实现多设备间的无缝文件共中讲了如何使用 caddy 搭建 WebDav 服务,今天就来学一下如何在 caddy 中搭建静态文件服务器。

静态服务器

搭建一个静态服务器需要使用到 file_server 这个插件,这个插件是内置的,只要安装好了 caddy 就能够直接使用。

C语言字符串\0的截断陷阱

前言

字符串在 C 语言中是一种常见的数据类型,以字符数组的形式存储。而 C 语言中的字符串以 \0 (空字符)作为结束符。然而, \0 的存在可能导致一些问题,特别是在处理包含 \0 的字符串时,常见的字符串处理函数可能会出现截断的情况。

最近就在字符串上踩了坑。

跨平台文件同步利器:使用Caddy搭建WebDav实现多设备间的无缝文件共享

前言

我在 iOS 上使用 beorg 来管理日程,所以经常需要在电脑和手机之间同步。

beorg 支持 iCloudDropboxWebDav 等方式同步,使用 iCloud 是最简单的,但是我不想数据放到别人的服务器上面,所以我就不考虑了, Dropbox 就你懂的,所以就只剩下 WebDav 了。

WebDav 是一种基于 HTTP 协议的文件访问和管理技术,它提供了一种标准化的方式,使我们可以在网络上进行文件操作,如上传、下载、删除和重命名等。

我找了一圈看上了 Caddy ,它是一个功能强大且易于使用的 Web 服务器,它为搭建 WebDav 服务器提供了简洁而灵活的解决方案。所以今天就要用 Caddy 来搭建 WebDav 服务。

Cocos2d监听TextField输入

前言

Android 开发中,要监听 EditText 输入内容的变化,可以通过 addTextChangedListener 方法来实现,非常方便。

但是在 Cocos2d 中要监听 TextField 却没有那么容易,我经过实验发现有两种方法可以达到同样的目的,一种是监听文本的输入事件、另一种是在每一帧里监听文本变化。

Cocos2d-x之LoadingView

前言

Cocos2d-x 中实现加载动画可以提高用户体验和应用程序的交互性。加载动画通常会显示在网络通信或资源加载等操作期间,以告知用户当前操作正在进行中。

可惜的是 Cocos2d 并没有提供这种操作,不像 Android 提供了 ProgressDialog

所以今天就来自己实现一个。

Cocos2d-x之网络请求

前言

网络编程是开发中必不可少的一环, Cocos2d-x 提供了一个简单易用的网络模块,包括 HTTPWebSocketSocket 三种协议的支持。

它们都是基于标准的网络协议和 API 实现的,因此可以很容易地与其他网络库或服务端进行通信。

今天就来学习一下 HTTP 的使用。

Cocos2d-x环境搭建(Mac)

前言

是的我最近在学习 Cocos2d-x 。你可能会有疑问,已经 2023 年了为什么还要学习 Cocos2d-x ?

Cocos2d-x 最新一次发布是在 2019-12-04,已经 3 年没更新了,这时候学习不是明智之举。

我最初知道 Cocos2d-x 的时候还是上大学那会,在极客学院学了不少知识,后面没什么场景会用到,就再也没使用过了。

我最近又学了是因为我们有个项目要提供 Cocos2d-x 的版本,这么多年过去我也没想到还会有一天要用到。

我在搭建环境碰到了一些问题,记录一下。

让Hugo支持音频和视频

前言

前段时间写 MoviePy 系列博客的时候,要把处理的视频效果展示出来,我按照图片的写法去写视频发现并不能渲染出来,然后又用 HTML 的方式发现还是不行,经过一番研究找到了办法。

MoviePy: 使用MoviePy裁剪一个区域

前言

之前的几篇文章讲了 MoviePy 的一些基本使用,发现没有裁剪视频中的一个区域的功能,然后去搜文档发现要使用 fx 函数进行变换,我经过实验发现了可以直接使用 crop 方法直接进行裁剪。

MoviePy: 用Python剪辑视频

前言

生活中视频使用的场景越来越多,生活中不免会碰到要对视频进行处理。

现在的视频剪辑软件也非常好用,可以进行精细化制作,但是效率就低了许多,如果有很多视频要处理,那就需要非常多的时间去处理。

用Rust实现Android Studio 二维码配对功能

前言

上一篇中我们讲了,在 Android Studio 中通过二维码使用WIFI连接手机的原理,今天就来使用 Rust 来实现类似的功能。

没有看过的建议看一下,不然这篇文档可能会看不懂。

为什么要用 Rust 呢?

一方面是 Go 已经有了,而刚好我想用 Rust 来练练手,所以就是它了。

Android Studio 通过二维码使用WIFI连接手机原理分析

前言

由于开发需要,下了最新版的 Android Studio(Dolphin) ,发现在选择 Android 设备的时候多了一个 Pair Devices Using WI-FI ,然后这里可以使用二维码和配对码,我使用了二维码进行配对,发现挺方便的,可以不用数据线了。

本文会分析一下实现的过程。